in nfm-common/src/sock_ops_handler.rs [130:170]
fn handle_new_sock(&mut self, is_client: bool) -> SockOpsResult {
let sock_context = SockContext::from_sock_ops(self.ctx, is_client);
if !sock_context.is_valid() {
self.counters.sockets_invalid += 1;
return Err(SockOpsResultCode::ContextInvalid);
}
let res = bpf_map_insert!(
self,
NFM_SK_PROPS,
&self.composite_key,
&sock_context,
BPF_NOEXIST
);
if res.is_err() {
self.counters.map_insertion_errors += 1;
return Err(SockOpsResultCode::MapInsertionError);
}
// Register to receive events only for successfully recorded sockets, meaning after success
// of the above map insertion.
self.configure_flags()?;
match self.get_or_add_sock_stats() {
Ok(stats_raw) => unsafe {
let sock_stats = &mut *stats_raw;
sock_stats.connect_start_us = self.now_us;
if is_client {
sock_stats.connect_attempts += 1;
}
if nfm_get_sock_state(self.ctx) == BPF_TCP_ESTABLISHED {
sock_stats
.state_flags
.insert(SockStateFlags::ENTERED_ESTABLISH);
}
Ok(())
},
Err(e) => Err(e),
}
}