fn test_ebpf_sock_op_rto()

in nfm-common/src/sock_ops_handler.rs [765:838]


    fn test_ebpf_sock_op_rto() {
        let mock_ktime_us: u64 = 0;
        let mut mock_ebpf_maps = MockEbpfMaps::new();
        let cookie: u64 = 197;

        // A connection is initiated, followed by an RTO.
        run_sock_ops_test(
            cookie,
            BPF_SOCK_OPS_TCP_CONNECT_CB,
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );
        run_sock_ops_test(
            cookie,
            BPF_SOCK_OPS_RTO_CB,
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );

        // After entering established, we see another RTO.
        let args: [u32; 2] = [BPF_TCP_SYN_SENT, BPF_TCP_ESTABLISHED];
        run_sock_ops_test_with_args(
            cookie,
            BPF_TCP_SYN_SENT,
            BPF_SOCK_OPS_STATE_CB,
            args,
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );
        run_sock_ops_test_with_args(
            cookie,
            BPF_TCP_ESTABLISHED,
            BPF_SOCK_OPS_RTO_CB,
            [0, 0],
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );

        // Finally, during close, another RTO.
        let args: [u32; 2] = [BPF_TCP_ESTABLISHED, BPF_TCP_FIN_WAIT1];
        run_sock_ops_test_with_args(
            cookie,
            BPF_TCP_ESTABLISHED,
            BPF_SOCK_OPS_STATE_CB,
            args,
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );
        run_sock_ops_test_with_args(
            cookie,
            BPF_TCP_FIN_WAIT1,
            BPF_SOCK_OPS_RTO_CB,
            [0, 0],
            &mut mock_ebpf_maps,
            mock_ktime_us,
            Ok(()),
        );

        // Validate results.
        let composite_key = CpuSockKey {
            sock_key: cookie,
            cpu_id: MOCK_CPU_ID,
        };
        let sock_stats = mock_ebpf_maps.sock_stats(&composite_key);
        assert_eq!(sock_stats.rtos_syn, 1);
        assert_eq!(sock_stats.rtos_est, 1);
        assert_eq!(sock_stats.rtos_close, 1);
        assert_eq!(mock_ebpf_maps.counters().rto_events, 3);
    }