fn get_new_entries()

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)
    }