]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/bpf: Systematically add SO_REUSEADDR in start_server_addr
authorAlexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com>
Wed, 5 Nov 2025 08:22:48 +0000 (09:22 +0100)
committerMartin KaFai Lau <martin.lau@kernel.org>
Thu, 6 Nov 2025 23:23:00 +0000 (15:23 -0800)
Some tests have to stop/start a server multiple time with the same
listening address. Doing so without SO_REUSADDR leads to failures due to
the socket still being in TIME_WAIT right after the first instance
stop/before the second instance start. Instead of letting each test
manually set SO_REUSEADDR on their servers, it can be done automatically
by start_server_addr for all tests (and without any major downside).

Enforce SO_REUSEADDR in start_server_addr for all tests.

Signed-off-by: Alexis Lothoré (eBPF Foundation) <alexis.lothore@bootlin.com>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://patch.msgid.link/20251105-start-server-soreuseaddr-v1-1-1bbd9c1f8d65@bootlin.com
tools/testing/selftests/bpf/network_helpers.c

index 8bb09167399a4745dc2f814c6e356ab9c1c47138..0a6a5561bed39997a75e68de684b18678680f45c 100644 (file)
@@ -97,7 +97,7 @@ int settimeo(int fd, int timeout_ms)
 int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t addrlen,
                      const struct network_helper_opts *opts)
 {
-       int fd;
+       int on = 1, fd;
 
        if (!opts)
                opts = &default_opts;
@@ -111,6 +111,12 @@ int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t a
        if (settimeo(fd, opts->timeout_ms))
                goto error_close;
 
+       if (type == SOCK_STREAM &&
+           setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on))) {
+               log_err("Failed to enable SO_REUSEADDR");
+               goto error_close;
+       }
+
        if (opts->post_socket_cb &&
            opts->post_socket_cb(fd, opts->cb_opts)) {
                log_err("Failed to call post_socket_cb");