]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
selftests/bpf: Make ehash buckets configurable in socket iterator tests
authorJordan Rife <jordan@jrife.io>
Mon, 14 Jul 2025 18:09:13 +0000 (11:09 -0700)
committerMartin KaFai Lau <martin.lau@kernel.org>
Mon, 14 Jul 2025 22:11:39 +0000 (15:11 -0700)
Prepare for bucket resume tests for established TCP sockets by making
the number of ehash buckets configurable. Subsequent patches force all
established sockets into the same bucket by setting ehash_buckets to
one.

Signed-off-by: Jordan Rife <jordan@jrife.io>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Acked-by: Stanislav Fomichev <sdf@fomichev.me>
tools/testing/selftests/bpf/prog_tests/sock_iter_batch.c

index 4e15a0c2f237a6611e44ebcdc562ffe90520d543..60b45685ef72a33a6bb710ccba3d821688973cfc 100644 (file)
@@ -6,6 +6,7 @@
 #include "sock_iter_batch.skel.h"
 
 #define TEST_NS "sock_iter_batch_netns"
+#define TEST_CHILD_NS "sock_iter_batch_child_netns"
 
 static const int init_batch_size = 16;
 static const int nr_soreuse = 4;
@@ -304,6 +305,7 @@ struct test_case {
                     int *socks, int socks_len, struct sock_count *counts,
                     int counts_len, struct bpf_link *link, int iter_fd);
        const char *description;
+       int ehash_buckets;
        int init_socks;
        int max_socks;
        int sock_type;
@@ -410,13 +412,25 @@ static struct test_case resume_tests[] = {
 static void do_resume_test(struct test_case *tc)
 {
        struct sock_iter_batch *skel = NULL;
+       struct sock_count *counts = NULL;
        static const __u16 port = 10001;
+       struct nstoken *nstoken = NULL;
        struct bpf_link *link = NULL;
-       struct sock_count *counts;
        int err, iter_fd = -1;
        const char *addr;
        int *fds = NULL;
 
+       if (tc->ehash_buckets) {
+               SYS_NOFAIL("ip netns del " TEST_CHILD_NS);
+               SYS(done, "sysctl -wq net.ipv4.tcp_child_ehash_entries=%d",
+                   tc->ehash_buckets);
+               SYS(done, "ip netns add %s", TEST_CHILD_NS);
+               SYS(done, "ip -net %s link set dev lo up", TEST_CHILD_NS);
+               nstoken = open_netns(TEST_CHILD_NS);
+               if (!ASSERT_OK_PTR(nstoken, "open_child_netns"))
+                       goto done;
+       }
+
        counts = calloc(tc->max_socks, sizeof(*counts));
        if (!ASSERT_OK_PTR(counts, "counts"))
                goto done;
@@ -453,6 +467,9 @@ static void do_resume_test(struct test_case *tc)
        tc->test(tc->family, tc->sock_type, addr, port, fds, tc->init_socks,
                 counts, tc->max_socks, link, iter_fd);
 done:
+       close_netns(nstoken);
+       SYS_NOFAIL("ip netns del " TEST_CHILD_NS);
+       SYS_NOFAIL("sysctl -w net.ipv4.tcp_child_ehash_entries=0");
        free(counts);
        free_fds(fds, tc->init_socks);
        if (iter_fd >= 0)