From: Yann Dirson Date: Thu, 23 Nov 2023 16:28:08 +0000 (+0100) Subject: netlink: properly behave if link event has no MAC X-Git-Tag: 0.3.0~11^2~2 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=e06288d57a2798be48d6518a5a1d73006baaba32;p=xen-guest-agent.git netlink: properly behave if link event has no MAC Should never happen, but not a reason to have bad code. And we can do that without worrying, because now we have separate Add/RmIface events. Signed-off-by: Yann Dirson --- diff --git a/src/collector_net_netlink.rs b/src/collector_net_netlink.rs index 81c8cde..bea3a45 100644 --- a/src/collector_net_netlink.rs +++ b/src/collector_net_netlink.rs @@ -107,15 +107,19 @@ impl NetworkSource { match nl_msg { RtnlMessage::NewLink(link_msg) => { let (iface, mac_address) = self.nl_linkmessage_decode(link_msg)?; - log::debug!("NewLink({iface:?} {mac_address})"); + log::debug!("NewLink({iface:?} {mac_address:?})"); events.push(NetEvent{iface: iface.clone(), op: NetEventOp::AddIface}); - events.push(NetEvent{iface, op: NetEventOp::AddMac(mac_address)}); + if let Some(mac_address) = mac_address { + events.push(NetEvent{iface, op: NetEventOp::AddMac(mac_address)}); + } }, RtnlMessage::DelLink(link_msg) => { let (iface, mac_address) = self.nl_linkmessage_decode(link_msg)?; - log::debug!("DelLink({iface:?} {mac_address})"); - events.push(NetEvent{iface: iface.clone(), - op: NetEventOp::RmMac(mac_address)}); // redundant + log::debug!("DelLink({iface:?} {mac_address:?})"); + if let Some(mac_address) = mac_address { + events.push(NetEvent{iface: iface.clone(), + op: NetEventOp::RmMac(mac_address)}); // redundant + } events.push(NetEvent{iface, op: NetEventOp::RmIface}); }, RtnlMessage::NewAddress(address_msg) => { @@ -137,7 +141,8 @@ impl NetworkSource { Ok(events) } - fn nl_linkmessage_decode(&mut self, msg: &LinkMessage) -> io::Result<(Rc, String)> { + fn nl_linkmessage_decode(&mut self, msg: &LinkMessage) + -> io::Result<(Rc, Option)> { let LinkMessage{header, nlas, ..} = msg; // extract fields of interest @@ -160,10 +165,7 @@ impl NetworkSource { .entry(header.index) .or_insert_with_key(|index| NetInterface::new(*index, iface_name).into()); - match mac_address { - Some(mac_address) => Ok((iface.clone(), mac_address)), - None => Ok((iface.clone(), "".to_string())), // FIXME ad-hoc ugly, use Option instead - } + Ok((iface.clone(), mac_address)) } fn nl_addressmessage_decode(&mut self, msg: &AddressMessage) -> io::Result<(Rc, IpAddr)> {