in nfm-common/src/sock_ops_handler.rs [930:979]
fn test_ebpf_sock_op_rst_on_establish() {
let mock_ktime_us: u64 = 99;
let cookie: u64 = 197;
let mut mock_ebpf_maps = MockEbpfMaps::new();
// Handle two events.
run_sock_ops_test(
cookie,
BPF_SOCK_OPS_TCP_CONNECT_CB,
&mut mock_ebpf_maps,
mock_ktime_us,
Ok(()),
);
run_sock_ops_test_with_args(
cookie,
BPF_TCP_SYN_SENT,
BPF_SOCK_OPS_STATE_CB,
[BPF_TCP_SYN_SENT, BPF_TCP_ESTABLISHED],
&mut mock_ebpf_maps,
mock_ktime_us + 10,
Ok(()),
);
// Handle a 3rd event that mimicks a TCP RST by transitioning from ESTABLISHED to CLOSED.
let args: [u32; 2] = [BPF_TCP_ESTABLISHED, BPF_TCP_CLOSE];
run_sock_ops_test_with_args(
cookie,
BPF_TCP_ESTABLISHED,
BPF_SOCK_OPS_STATE_CB,
args,
&mut mock_ebpf_maps,
mock_ktime_us + 10,
Ok(()),
);
// Validate results.
let composite_key = CpuSockKey {
sock_key: cookie,
cpu_id: MOCK_CPU_ID,
};
let sock_wrap = mock_ebpf_maps.sock_stats(&composite_key);
assert_eq!(
sock_wrap.state_flags,
SockStateFlags::ENTERED_ESTABLISH
| SockStateFlags::STARTED_CLOSURE
| SockStateFlags::TERMINATED_FROM_EST
| SockStateFlags::CLOSED
);
assert_eq!(mock_ebpf_maps.counters().state_change_events, 2);
}