]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
selftests: net: run reuseport in an isolated netns
authorAleksei Oladko <aleksey.oladko@virtuozzo.com>
Sat, 21 Mar 2026 21:59:05 +0000 (21:59 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 24 Mar 2026 02:58:29 +0000 (19:58 -0700)
The reuseport_* tests (bpf, bpf_cpu, bpf_numa, dualstack) currently use
a fixed port range. This can cause intermittent test failures when the
ports are already in use by other services:

  failed to bind receive socket: Address already in use

To avoid conflicts, run these tests in separate network namespaces using
unshare. Each test now has its own isolated network stack, preventing
port collisions with the host services.

Signed-off-by: Aleksei Oladko <aleksey.oladko@virtuozzo.com>
Link: https://patch.msgid.link/20260321215908.175465-2-aleksey.oladko@virtuozzo.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
tools/testing/selftests/net/reuseport_bpf.c
tools/testing/selftests/net/reuseport_bpf_cpu.c
tools/testing/selftests/net/reuseport_bpf_numa.c
tools/testing/selftests/net/reuseport_dualstack.c

index b6634d6da3d606f349bb799bbf4d242e0dbebc3d..12e48b97b8625a01637532b67110052b96aa4de0 100644 (file)
@@ -23,6 +23,7 @@
 #include <sys/socket.h>
 #include <sys/resource.h>
 #include <unistd.h>
+#include <sched.h>
 
 #include "kselftest.h"
 
@@ -455,8 +456,18 @@ static __attribute__((destructor)) void main_dtor(void)
        setrlimit(RLIMIT_MEMLOCK, &rlim_old);
 }
 
+static void setup_netns(void)
+{
+       if (unshare(CLONE_NEWNET))
+               error(1, errno, "failed to unshare netns");
+       if (system("ip link set lo up"))
+               error(1, 0, "failed to bring up lo interface in netns");
+}
+
 int main(void)
 {
+       setup_netns();
+
        fprintf(stderr, "---- IPv4 UDP ----\n");
        /* NOTE: UDP socket lookups traverse a different code path when there
         * are > 10 sockets in a group.  Run the bpf test through both paths.
index 2d646174729f9251c1780e0437180183c1ac5f31..ddfe92f6597a7c3457b77ce0f19c070586b3446a 100644 (file)
@@ -228,10 +228,20 @@ static void test(int *rcv_fd, int len, int family, int proto)
                close(rcv_fd[cpu]);
 }
 
+static void setup_netns(void)
+{
+       if (unshare(CLONE_NEWNET))
+               error(1, errno, "failed to unshare netns");
+       if (system("ip link set lo up"))
+               error(1, 0, "failed to bring up lo interface in netns");
+}
+
 int main(void)
 {
        int *rcv_fd, cpus;
 
+       setup_netns();
+
        cpus = sysconf(_SC_NPROCESSORS_ONLN);
        if (cpus <= 0)
                error(1, errno, "failed counting cpus");
index 2ffd957ffb159e387daa7ebc48ed713743751da4..8ec52fc5ef41b8d86aab12fb5a84dd1722c5ebe5 100644 (file)
@@ -230,10 +230,20 @@ static void test(int *rcv_fd, int len, int family, int proto)
                close(rcv_fd[node]);
 }
 
+static void setup_netns(void)
+{
+       if (unshare(CLONE_NEWNET))
+               error(1, errno, "failed to unshare netns");
+       if (system("ip link set lo up"))
+               error(1, 0, "failed to bring up lo interface in netns");
+}
+
 int main(void)
 {
        int *rcv_fd, nodes;
 
+       setup_netns();
+
        if (numa_available() < 0)
                ksft_exit_skip("no numa api support\n");
 
index fb7a59ed759ebbef223bfe92e85acd33c0b4c597..0eaf739d0c852a78c0bfb690a51b2d8045826c4c 100644 (file)
@@ -25,6 +25,7 @@
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <unistd.h>
+#include <sched.h>
 
 static const int PORT = 8888;
 
@@ -156,10 +157,20 @@ static void test(int *rcv_fds, int count, int proto)
        close(epfd);
 }
 
+static void setup_netns(void)
+{
+       if (unshare(CLONE_NEWNET))
+               error(1, errno, "failed to unshare netns");
+       if (system("ip link set lo up"))
+               error(1, 0, "failed to bring up lo interface in netns");
+}
+
 int main(void)
 {
        int rcv_fds[32], i;
 
+       setup_netns();
+
        fprintf(stderr, "---- UDP IPv4 created before IPv6 ----\n");
        build_rcv_fd(AF_INET, SOCK_DGRAM, rcv_fds, 5);
        build_rcv_fd(AF_INET6, SOCK_DGRAM, &(rcv_fds[5]), 5);