]> www.infradead.org Git - users/hch/configfs.git/commitdiff
selftests/bpf: Add backlog for network_helper_opts
authorGeliang Tang <tanggeliang@kylinos.cn>
Tue, 9 Jul 2024 09:16:17 +0000 (17:16 +0800)
committerMartin KaFai Lau <martin.lau@kernel.org>
Wed, 10 Jul 2024 18:56:22 +0000 (11:56 -0700)
Some callers expect __start_server() helper to pass their own "backlog"
value to listen() instead of the default of 1. So this patch adds struct
member "backlog" for network_helper_opts to allow callers to set "backlog"
value via start_server_str() helper.

listen(fd, 0 /* backlog */) can be used to enforce syncookie. Meaning
backlog 0 is a legit value.

Using 0 as a default and changing it to 1 here is fine. It makes the test
program easier to write for the common case. Enforcing syncookie mode by
using backlog 0 is a niche use case but it should at least have a way for
the caller to do that. Thus, -ve backlog value is used here for the
syncookie use case. Please see the comment in network_helpers.h for
the details.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Link: https://lore.kernel.org/r/1660229659b66eaad07aa2126e9c9fe217eba0dd.1720515893.git.tanggeliang@kylinos.cn
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
tools/testing/selftests/bpf/network_helpers.c
tools/testing/selftests/bpf/network_helpers.h

index 44c2c8fa542abecc4f150632e2ff6e4a64366fb9..e0cba4178e41d3325ce4d5bd84eff9b002abf8fc 100644 (file)
@@ -106,7 +106,7 @@ static int __start_server(int type, const struct sockaddr *addr, socklen_t addrl
        }
 
        if (type == SOCK_STREAM) {
-               if (listen(fd, 1) < 0) {
+               if (listen(fd, opts->backlog ? MAX(opts->backlog, 0) : 1) < 0) {
                        log_err("Failed to listed on socket");
                        goto error_close;
                }
index 9ea36524b9db47162bb2010af4580a3b84c768e4..aac5b94d6379916d63a9e9192b69af720e06c706 100644 (file)
@@ -25,6 +25,16 @@ struct network_helper_opts {
        int timeout_ms;
        bool must_fail;
        int proto;
+       /* +ve: Passed to listen() as-is.
+        *   0: Default when the test does not set
+        *      a particular value during the struct init.
+        *      It is changed to 1 before passing to listen().
+        *      Most tests only have one on-going connection.
+        * -ve: It is changed to 0 before passing to listen().
+        *      It is useful to force syncookie without
+        *      changing the "tcp_syncookies" sysctl from 1 to 2.
+        */
+       int backlog;
        int (*post_socket_cb)(int fd, void *opts);
        void *cb_opts;
 };