• Martin KaFai Lau's avatar
    selftests/bpf: Test udp and tcp iter batching · dbd7db77
    Martin KaFai Lau authored
    The patch adds a test to exercise the bpf_iter_udp batching
    logic. It specifically tests the case that there are multiple
    so_reuseport udp_sk in a bucket of the udp_table.
    
    The test creates two sets of so_reuseport sockets and
    each set on a different port. Meaning there will be
    two buckets in the udp_table.
    
    The test does the following:
    1. read() 3 out of 4 sockets in the first bucket.
    2. close() all sockets in the first bucket. This
       will ensure the current bucket's offset in
       the kernel does not affect the read() of the
       following bucket.
    3. read() all 4 sockets in the second bucket.
    
    The test also reads one udp_sk at a time from
    the bpf_iter_udp prog. The true case in
    "do_test(..., bool onebyone)". This is the buggy case
    that the previous patch fixed.
    
    It also tests the "false" case in "do_test(..., bool onebyone)",
    meaning the userspace reads the whole bucket. There is
    no bug in this case but adding this test also while
    at it.
    
    Considering the way to have multiple tcp_sk in the same
    bucket is similar (by using so_reuseport),
    this patch also tests the bpf_iter_tcp even though the
    bpf_iter_tcp batching logic works correctly.
    
    Both IP v4 and v6 are exercising the same bpf_iter batching
    code path, so only v6 is tested.
    Acked-by: default avatarYonghong Song <yonghong.song@linux.dev>
    Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
    Link: https://lore.kernel.org/r/20240112190530.3751661-4-martin.lau@linux.devSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
    dbd7db77
bpf_tracing_net.h 2.81 KB