• Martin KaFai Lau's avatar
    selftests/bpf: Remove the bpf_tcp_helpers.h usages from other non tcp-cc tests · c075c9c4
    Martin KaFai Lau authored
    The patch removes the remaining bpf_tcp_helpers.h usages in the
    non tcp-cc networking tests. It either replaces it with bpf_tracing_net.h
    or just removed it because the test is not actually using any
    kernel sockets. For the later, the missing macro (mainly SOL_TCP) is
    defined locally.
    
    An exception is the test_sock_fields which is testing
    the "struct bpf_sock" type instead of the kernel sock type.
    Whenever "vmlinux.h" is used instead, it hits a verifier
    error on doing arithmetic on the sock_common pointer:
    
    ; return !a6[0] && !a6[1] && !a6[2] && a6[3] == bpf_htonl(1); @ test_sock_fields.c:54
    21: (61) r2 = *(u32 *)(r1 +28)        ; R1_w=sock_common() R2_w=scalar(smin=0,smax=umax=0xffffffff,var_off=(0x0; 0xffffffff))
    22: (56) if w2 != 0x0 goto pc-6       ; R2_w=0
    23: (b7) r3 = 28                      ; R3_w=28
    24: (bf) r2 = r1                      ; R1_w=sock_common() R2_w=sock_common()
    25: (0f) r2 += r3
    R2 pointer arithmetic on sock_common prohibited
    
    Hence, instead of including bpf_tracing_net.h, the test_sock_fields test
    defines a tcp_sock with one lsndtime field in it.
    
    Another highlight is, in sockopt_qos_to_cc.c, the tcp_cc_eq()
    is replaced by bpf_strncmp(). tcp_cc_eq() was a workaround
    in bpf_tcp_helpers.h before bpf_strncmp had been added.
    
    The SOL_IPV6 addition to bpf_tracing_net.h is needed by the
    test_tcpbpf_kern test.
    Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Link: https://lore.kernel.org/r/20240509175026.3423614-10-martin.lau@linux.devSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    c075c9c4
test_sock_fields.c 7.32 KB