wireguard-control: cargo fmt

pull/186/head
Jake McGinty 2022-01-09 22:58:21 -06:00
parent 92b60f535d
commit 68d3b09f3a
2 changed files with 36 additions and 18 deletions

View File

@ -8,8 +8,9 @@ mod linux {
NLM_F_CREATE, NLM_F_EXCL, NLM_F_REQUEST, NLM_F_CREATE, NLM_F_EXCL, NLM_F_REQUEST,
}; };
use netlink_packet_generic::{ use netlink_packet_generic::{
constants::GENL_HDRLEN,
ctrl::{nlas::GenlCtrlAttrs, GenlCtrl, GenlCtrlCmd}, ctrl::{nlas::GenlCtrlAttrs, GenlCtrl, GenlCtrlCmd},
GenlFamily, GenlMessage, constants::GENL_HDRLEN, GenlFamily, GenlMessage,
}; };
use netlink_packet_route::RtnlMessage; use netlink_packet_route::RtnlMessage;
use netlink_sys::{constants::NETLINK_GENERIC, protocols::NETLINK_ROUTE, Socket}; use netlink_sys::{constants::NETLINK_GENERIC, protocols::NETLINK_ROUTE, Socket};
@ -85,7 +86,10 @@ mod linux {
if req.buffer_len() > MAX_NETLINK_BUFFER_LENGTH { if req.buffer_len() > MAX_NETLINK_BUFFER_LENGTH {
return Err(io::Error::new( return Err(io::Error::new(
io::ErrorKind::InvalidInput, io::ErrorKind::InvalidInput,
format!("Serialized netlink packet larger than maximum size {}", MAX_NETLINK_BUFFER_LENGTH), format!(
"Serialized netlink packet larger than maximum size {}",
MAX_NETLINK_BUFFER_LENGTH
),
)); ));
} }
@ -133,4 +137,7 @@ mod linux {
} }
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
pub use linux::{netlink_request, netlink_request_genl, netlink_request_rtnl, MAX_NETLINK_BUFFER_LENGTH, MAX_GENL_PAYLOAD_LENGTH}; pub use linux::{
netlink_request, netlink_request_genl, netlink_request_rtnl, MAX_GENL_PAYLOAD_LENGTH,
MAX_NETLINK_BUFFER_LENGTH,
};

View File

@ -12,7 +12,8 @@ use netlink_packet_route::{
self, self,
nlas::{Info, InfoKind}, nlas::{Info, InfoKind},
}, },
LinkMessage, RtnlMessage, traits::Emitable, traits::Emitable,
LinkMessage, RtnlMessage,
}; };
use netlink_packet_wireguard::{ use netlink_packet_wireguard::{
self, self,
@ -230,11 +231,10 @@ pub fn apply(builder: &DeviceUpdate, iface: &InterfaceName) -> io::Result<()> {
payload.push(WgDeviceAttrs::Flags(WGDEVICE_F_REPLACE_PEERS)); payload.push(WgDeviceAttrs::Flags(WGDEVICE_F_REPLACE_PEERS));
} }
builder.peers builder
.peers
.iter() .iter()
.for_each(|peer| { .for_each(|peer| payload.push_peer(peer.to_attrs()));
payload.push_peer(peer.to_attrs())
});
for message in payload.finish() { for message in payload.finish() {
netlink_request_genl(message, Some(NLM_F_REQUEST | NLM_F_ACK))?; netlink_request_genl(message, Some(NLM_F_REQUEST | NLM_F_ACK))?;
@ -261,7 +261,8 @@ impl ApplyPayload {
fn flush_nlas(&mut self) { fn flush_nlas(&mut self) {
// cleanup: clear out any empty peer lists. // cleanup: clear out any empty peer lists.
self.nlas.retain(|nla| !matches!(nla, WgDeviceAttrs::Peers(peers) if peers.len() == 0)); self.nlas
.retain(|nla| !matches!(nla, WgDeviceAttrs::Peers(peers) if peers.len() == 0));
let name = WgDeviceAttrs::IfName(self.iface.clone()); let name = WgDeviceAttrs::IfName(self.iface.clone());
self.current_buffer_len = name.buffer_len(); self.current_buffer_len = name.buffer_len();
@ -287,9 +288,17 @@ impl ApplyPayload {
/// A helper function to assist in breaking up large peer lists across multiple netlink messages /// A helper function to assist in breaking up large peer lists across multiple netlink messages
pub fn push_peer(&mut self, peer: Vec<WgPeerAttrs>) { pub fn push_peer(&mut self, peer: Vec<WgPeerAttrs>) {
const EMPTY_PEERS: WgDeviceAttrs = WgDeviceAttrs::Peers(vec![]); const EMPTY_PEERS: WgDeviceAttrs = WgDeviceAttrs::Peers(vec![]);
let mut needs_peer_nla = !self.nlas.iter().any(|nla| matches!(nla, WgDeviceAttrs::Peers(_))); let mut needs_peer_nla = !self
.nlas
.iter()
.any(|nla| matches!(nla, WgDeviceAttrs::Peers(_)));
let peer_buffer_len = peer.as_slice().buffer_len() + 4; let peer_buffer_len = peer.as_slice().buffer_len() + 4;
let additional_buffer_len = peer_buffer_len + if needs_peer_nla { EMPTY_PEERS.buffer_len() } else { 0 }; let additional_buffer_len = peer_buffer_len
+ if needs_peer_nla {
EMPTY_PEERS.buffer_len()
} else {
0
};
if (self.current_buffer_len + additional_buffer_len) > MAX_GENL_PAYLOAD_LENGTH { if (self.current_buffer_len + additional_buffer_len) > MAX_GENL_PAYLOAD_LENGTH {
self.flush_nlas(); self.flush_nlas();
needs_peer_nla = true; needs_peer_nla = true;
@ -298,12 +307,14 @@ impl ApplyPayload {
if needs_peer_nla { if needs_peer_nla {
self.push(EMPTY_PEERS); self.push(EMPTY_PEERS);
} }
let peers_nla = self.nlas.iter_mut().find_map(|nla| { let peers_nla = self
match nla { .nlas
.iter_mut()
.find_map(|nla| match nla {
WgDeviceAttrs::Peers(peers) => Some(peers), WgDeviceAttrs::Peers(peers) => Some(peers),
_ => None, _ => None,
} })
}).expect("WgDeviceAttrs::Peers missing from NLAs when it should exist."); .expect("WgDeviceAttrs::Peers missing from NLAs when it should exist.");
peers_nla.push(peer); peers_nla.push(peer);
self.current_buffer_len += peer_buffer_len; self.current_buffer_len += peer_buffer_len;
@ -358,7 +369,7 @@ mod tests {
WgPeerAttrs::AllowedIps(vec![vec![ WgPeerAttrs::AllowedIps(vec![vec![
WgAllowedIpAttrs::Family(AF_INET), WgAllowedIpAttrs::Family(AF_INET),
WgAllowedIpAttrs::IpAddr([10, 1, 1, 1].into()), WgAllowedIpAttrs::IpAddr([10, 1, 1, 1].into()),
WgAllowedIpAttrs::Cidr(24) WgAllowedIpAttrs::Cidr(24),
]]), ]]),
]); ]);
assert_eq!(payload.finish().len(), 1); assert_eq!(payload.finish().len(), 1);
@ -379,7 +390,7 @@ mod tests {
WgPeerAttrs::AllowedIps(vec![vec![ WgPeerAttrs::AllowedIps(vec![vec![
WgAllowedIpAttrs::Family(AF_INET), WgAllowedIpAttrs::Family(AF_INET),
WgAllowedIpAttrs::IpAddr([10, 1, 1, 1].into()), WgAllowedIpAttrs::IpAddr([10, 1, 1, 1].into()),
WgAllowedIpAttrs::Cidr(24) WgAllowedIpAttrs::Cidr(24),
]]), ]]),
]); ]);
} }