Work on UAPI serialize device

This commit is contained in:
Mathias Hall-Andersen
2019-11-11 23:13:46 +01:00
parent 2ff044dda9
commit 5b555a2e17
6 changed files with 113 additions and 17 deletions

View File

@@ -10,6 +10,45 @@ struct Serializer<C: Configuration> {
impl<C: Configuration> Serializer<C> {
fn get(&self) -> Vec<String> {
vec![]
let mut peers = self.config.get_peers();
let mut lines = Vec::with_capacity(peers.len() * 6 + 5);
let mut write = |key, value: String| {
lines.push(String::new() + key + "=" + &value);
};
// serialize interface
self.config
.get_private_key()
.map(|sk| write("private_key", hex::encode(sk.to_bytes())));
self.config
.get_listen_port()
.map(|port| write("listen_port", port.to_string()));
self.config
.get_fwmark()
.map(|fwmark| write("fwmark", fwmark.to_string()));
// serialize all peers
while let Some(p) = peers.pop() {
write("rx_bytes", p.rx_bytes.to_string());
write("tx_bytes", p.tx_bytes.to_string());
write(
"last_handshake_time_sec",
p.last_handshake_time_nsec.to_string(),
);
write(
"last_handshake_time_nsec",
p.last_handshake_time_nsec.to_string(),
);
write("public_key", hex::encode(p.public_key.as_bytes()));
p.preshared_key
.map(|psk| write("preshared_key", hex::encode(psk)));
for (ip, cidr) in p.allowed_ips {
write("allowed_ip", ip.to_string() + "/" + &cidr.to_string())
}
}
lines
}
}