in nfm-controller/src/utils/conntrack_listener.rs [134:170]
fn get_new_entries(&mut self) -> Result<Vec<ConntrackEntry>, String> {
let mut events = Vec::<ConntrackEntry>::new();
loop {
let flags: i32 = 0;
match self.socket.recv(&mut &mut self.rx_buf[..], flags) {
Err(e) if e.kind() == ErrorKind::WouldBlock => {
break;
}
Err(e) => {
return Err(format!("Failed to read from netlink socket: {:?}", e));
}
_ => {}
}
let msg = match NetlinkMessage::<NetfilterMessage>::deserialize(&self.rx_buf[..]) {
Ok(m) => m,
Err(_) => {
// We failed to parse the netlink message.
// TODO: Should we track occurrences are record a throttled log messge?
continue;
}
};
match Self::parse_connection_properties(msg) {
Ok((original, reply)) => {
events.push(ConntrackEntry { original, reply });
}
Err(_) => {
// The message was not a valid pair of 5-tuples.
// TODO: Should we track occurrences are record a throttled log messge?
}
}
}
Ok(events)
}