fn handle_new_sock()

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