From patchwork Sun May 5 11:35:08 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 795968 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B21F617556; Sun, 5 May 2024 11:36:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714908978; cv=none; b=BvlZRPY+1DQOE9XKwO8yPOiV+8ZO/5jfBFPKICFeHMNdl775INTfgJ5PQBVu9ZmHT9Pbf7JPn+wjf4LVzAUFwekhHLHu3ZJQmMR3LWKwZrkFCnIMYehCpnEhjiN60WaafROREeGmRYLSJ3inzaqBAbX4R/tGhjspjC72zvXY/08= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714908978; c=relaxed/simple; bh=stxRdDSSRuYZc/pts2D9NuorayFLNdNhEOrxagYcyes=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Er8Pg0LV+W2OUAczOdPzE9NmLf1SMR9iURQ1dYGzLOKy1aIscR3aVZfkdqSHnVZqcG2TnZ7vpEv7YGNwLzuq5dms2FjYci1q06vy3PHBdSRLWnevEIhKCT6w0q/3MLViFrRdsgZoYn46MJFH3ZEfnhxu4UF5PGQPJ27AGGUY16w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=D0fSXqgs; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="D0fSXqgs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B7F5C113CC; Sun, 5 May 2024 11:36:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714908978; bh=stxRdDSSRuYZc/pts2D9NuorayFLNdNhEOrxagYcyes=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=D0fSXqgsOwV3RQgglfq7Om/RaRbu0qhpVoQC0PrPbL0PUlQEI4tZCWXK9nQVPldIF GXPMRXKEwcIxEEBEqEcbsxgrPLXVY4mEFlrnN/xF6Qrhox8uOUw8ghsOyuAbX//Xow FJtVoD0q5Ca3ySYkOFWGfrQBbIJke1hBHYZMEFk501Oa/+UEoKrNYRmeor5fkMHsGP HlevWJ6BqB/YSRrNNdf2rEm1pLMc27eElDTNOa3Q/Jk1G3XD3wN8KWNcpw1izpysAw 11DntpQxvVS/EHflpP2byOr6JPR5o8uI+L0ijru8RQEdFHVVuFPPaN3gQ7ZyBoxwUa aMmy5OUMvDkPQ== From: Geliang Tang To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , Jakub Sitnicki Cc: Geliang Tang , bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Geliang Tang Subject: [PATCH bpf-next 1/6] selftests/bpf: Add post_socket_cb for network_helper_opts Date: Sun, 5 May 2024 19:35:08 +0800 Message-ID: <470cb82f209f055fc7fb39c66c6b090b5b7ed2b2.1714907662.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang __start_server() sets SO_REUSPORT through setsockopt() when the parameter 'reuseport' is set. This patch makes it more flexible by adding a function pointer post_socket_cb, together with 'struct post_socket_opts cb_opts' for future extension into struct network_helper_opts. Then 'reuseport' parameter can be dropped. Now the original start_reuseport_server() can be implemented by setting a newly defined reuseport_cb() function pointer to post_socket_cb filed of struct network_helper_opts. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/network_helpers.c | 25 ++++++++++++------- tools/testing/selftests/bpf/network_helpers.h | 4 +++ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c index 054d26e383e0..a7ab05baedb6 100644 --- a/tools/testing/selftests/bpf/network_helpers.c +++ b/tools/testing/selftests/bpf/network_helpers.c @@ -81,9 +81,8 @@ int settimeo(int fd, int timeout_ms) #define save_errno_close(fd) ({ int __save = errno; close(fd); errno = __save; }) static int __start_server(int type, const struct sockaddr *addr, socklen_t addrlen, - bool reuseport, const struct network_helper_opts *opts) + const struct network_helper_opts *opts) { - int on = 1; int fd; fd = socket(addr->sa_family, type, opts->proto); @@ -95,9 +94,9 @@ static int __start_server(int type, const struct sockaddr *addr, socklen_t addrl if (settimeo(fd, opts->timeout_ms)) goto error_close; - if (reuseport && - setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on))) { - log_err("Failed to set SO_REUSEPORT"); + if (opts->post_socket_cb && + opts->post_socket_cb(fd, &opts->cb_opts)) { + log_err("Failed to call post_socket_cb"); goto error_close; } @@ -132,7 +131,14 @@ int start_server(int family, int type, const char *addr_str, __u16 port, if (make_sockaddr(family, addr_str, port, &addr, &addrlen)) return -1; - return __start_server(type, (struct sockaddr *)&addr, addrlen, false, &opts); + return __start_server(type, (struct sockaddr *)&addr, addrlen, &opts); +} + +static int reuseport_cb(int fd, const struct post_socket_opts *opts) +{ + int on = 1; + + return setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &on, sizeof(on)); } int *start_reuseport_server(int family, int type, const char *addr_str, @@ -140,6 +146,7 @@ int *start_reuseport_server(int family, int type, const char *addr_str, { struct network_helper_opts opts = { .timeout_ms = timeout_ms, + .post_socket_cb = reuseport_cb, }; struct sockaddr_storage addr; unsigned int nr_fds = 0; @@ -156,7 +163,7 @@ int *start_reuseport_server(int family, int type, const char *addr_str, if (!fds) return NULL; - fds[0] = __start_server(type, (struct sockaddr *)&addr, addrlen, true, &opts); + fds[0] = __start_server(type, (struct sockaddr *)&addr, addrlen, &opts); if (fds[0] == -1) goto close_fds; nr_fds = 1; @@ -165,7 +172,7 @@ int *start_reuseport_server(int family, int type, const char *addr_str, goto close_fds; for (; nr_fds < nr_listens; nr_fds++) { - fds[nr_fds] = __start_server(type, (struct sockaddr *)&addr, addrlen, true, &opts); + fds[nr_fds] = __start_server(type, (struct sockaddr *)&addr, addrlen, &opts); if (fds[nr_fds] == -1) goto close_fds; } @@ -183,7 +190,7 @@ int start_server_addr(int type, const struct sockaddr_storage *addr, socklen_t l if (!opts) opts = &default_opts; - return __start_server(type, (struct sockaddr *)addr, len, 0, opts); + return __start_server(type, (struct sockaddr *)addr, len, opts); } void free_fds(int *fds, unsigned int nr_close_fds) diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h index c62b54daa914..887075fbf6ec 100644 --- a/tools/testing/selftests/bpf/network_helpers.h +++ b/tools/testing/selftests/bpf/network_helpers.h @@ -21,6 +21,8 @@ typedef __u16 __sum16; #define VIP_NUM 5 #define MAGIC_BYTES 123 +struct post_socket_opts {}; + struct network_helper_opts { const char *cc; int timeout_ms; @@ -28,6 +30,8 @@ struct network_helper_opts { bool noconnect; int type; int proto; + int (*post_socket_cb)(int fd, const struct post_socket_opts *opts); + struct post_socket_opts cb_opts; }; /* ipv4 test vector */ From patchwork Sun May 5 11:35:09 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 794857 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAB67E54C; Sun, 5 May 2024 11:36:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714908985; cv=none; b=ovMD9mW+OsqHHeJht9vdPruldYyVemrURDgBhbBjdzaCUpolWA3Duj2R5v8JWkPP0ArR9owZDcLzzMie+xv7cCWakfTv0oQib/+t7lk5nmK4Dk25B4CnRvS7bRxAMJwY/TZ2uj2QgPXCsOHeppiUqQS/LI+84PFHCSfgrhZY6tc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714908985; c=relaxed/simple; bh=DswGYNIEvAM0xbmLADZneHkiZ5QkmT0Colzhvlh7lZI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Abtm6tWVGm+c14KAbV2NIeqNpz9i6wsUEj+DUPTpLMTFyNgS2Etio0hxibaRX/0PwMJVJUOZFxwEd5daLsz3r1QSqpzWw/NoAxL/8nRTqIShC1VIXzEOFtjxfpx0g1QXE4K6lVDU8r7iwQVX/EVtmuLRg9LU7Uz9QgqznPxB8RI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oShpf8JF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oShpf8JF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DB973C113CC; Sun, 5 May 2024 11:36:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714908985; bh=DswGYNIEvAM0xbmLADZneHkiZ5QkmT0Colzhvlh7lZI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oShpf8JFlFXXU/Hvo+04YRpJmChcIkzhvuI8smz11UA8gO5EoR8VMNLHItFnl/khM 2YxvrcONKiOPBHgm0SfjE+AWyNBOu+eVdAvRM1nM4TkYi4aDp4Mt9dQfhUpwbTYysm le0ykImtvMXZ8M2PnrKGTrlb5vycUvrasaX8xXFK1r5ugNzGwzMEbfvMdzVFWZQr0+ bg+ivMMNlrP+7QutdtaFFRj/ssw8KMOj8tnH07WSagWnhL29zbVev44ISk5awQ7rWm lCzZQvQsAgHCT8IKIsgPzgWIalkLi0Pb5J4Ibtsoj8tzrfI3RMtEVoSsJXbI7WSfJ+ vabKMFQaz7xRw== From: Geliang Tang To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , Jakub Sitnicki Cc: Geliang Tang , bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Geliang Tang Subject: [PATCH bpf-next 2/6] selftests/bpf: Use start_server_addr in sockopt_inherit Date: Sun, 5 May 2024 19:35:09 +0800 Message-ID: <687af66f743a0bf15cdba372c5f71fe64863219e.1714907662.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Include network_helpers.h in prog_tests/sockopt_inherit.c, use public helper start_server_addr() instead of the local defined function start_server(). This can avoid duplicate code. Add a helper custom_cb() to set SOL_CUSTOM sockopt looply, set it to post_socket_cb pointer of struct network_helper_opts, and pass it to start_server_addr(). Signed-off-by: Geliang Tang --- .../bpf/prog_tests/sockopt_inherit.c | 32 +++++++------------ 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c b/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c index 917f486db826..ff0694ef5286 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c +++ b/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include #include "cgroup_helpers.h" +#include "network_helpers.h" #include "sockopt_inherit.skel.h" @@ -98,23 +99,12 @@ static void *server_thread(void *arg) return (void *)(long)err; } -static int start_server(void) +static int custom_cb(int fd, const struct post_socket_opts *opts) { - struct sockaddr_in addr = { - .sin_family = AF_INET, - .sin_addr.s_addr = htonl(INADDR_LOOPBACK), - }; char buf; int err; - int fd; int i; - fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd < 0) { - log_err("Failed to create server socket"); - return -1; - } - for (i = CUSTOM_INHERIT1; i <= CUSTOM_LISTENER; i++) { buf = 0x01; err = setsockopt(fd, SOL_CUSTOM, i, &buf, 1); @@ -125,20 +115,21 @@ static int start_server(void) } } - if (bind(fd, (const struct sockaddr *)&addr, sizeof(addr)) < 0) { - log_err("Failed to bind socket"); - close(fd); - return -1; - } - - return fd; + return 0; } static void run_test(int cgroup_fd) { struct bpf_link *link_getsockopt = NULL; struct bpf_link *link_setsockopt = NULL; + struct network_helper_opts opts = { + .post_socket_cb = custom_cb, + }; int server_fd = -1, client_fd; + struct sockaddr_in addr = { + .sin_family = AF_INET, + .sin_addr.s_addr = htonl(INADDR_LOOPBACK), + }; struct sockopt_inherit *obj; void *server_err; pthread_t tid; @@ -160,7 +151,8 @@ static void run_test(int cgroup_fd) if (!ASSERT_OK_PTR(link_setsockopt, "cg-attach-setsockopt")) goto close_bpf_object; - server_fd = start_server(); + server_fd = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr, + sizeof(addr), &opts); if (!ASSERT_GE(server_fd, 0, "start_server")) goto close_bpf_object; From patchwork Sun May 5 11:35:10 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 795967 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCCEA17556; Sun, 5 May 2024 11:36:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714908992; cv=none; b=uzz0B1qLQcIjE4IoKB1nDye+grICQTLt1zPw8IFBuQnfyPvwjTpFTSqQNf0lLAPtq/WjUd+foGPFdKWG5Be4bNfvSK/KZV5DhzcR1i68RozmcjTim4s+Dguqk2WKc1MM2zYgM5ClElMW2P9vbGCg9y8c0bnunhmKBf8SHHDRqmw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714908992; c=relaxed/simple; bh=e5Y6wOm375X95v05GWAm0GlDVN2W/22AEli4pK2oJiY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NomEXvok6APpE3QVT4Qc0sjJpEqDmFypvEDWpCtDqNGF9jJo5ehMNOpg5RWMcKessNGWXGG00q61VWipQ+uA2vzYq7Bd+Po26+OD4pKTEPcQ1VDkjbaiGaRadHmH5PYRKtyvEyF4rAYyr00CHqnfc893Rlf9FPAy/DFDP5F0PJk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j8XXcLPb; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j8XXcLPb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 11E39C113CC; Sun, 5 May 2024 11:36:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714908992; bh=e5Y6wOm375X95v05GWAm0GlDVN2W/22AEli4pK2oJiY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j8XXcLPbxjPkc2OCE3E1ggdQUiuJ2J21Cu3FXyNs5pWDu6QfHGomf48USOD/FLDpn HDbi4FqU5hQCIesSOGsK/bTEQQDd61V39cKFbD/GFTxhwjbonLeYjzyhjBlyCAGLGJ yMYjNxZNVC3qnkHlvrfmTcXWmOdGngtFAPq9W/wrD4UoJInlJzuqtHWr5e/Tkz7JG9 viUrIkUUCWH+oJ0tps4EA5Gkl5s1xo4k4/MIfPJkbuvLDXzs5rajxmVNlxBL3XKJup 2L2nN939r9v8vZetuIKXJQShzfbOzbFKZnpytE2yo5OjCtgEQ04ygt0MsuvM73GCpI 7hRPn/SGW48cw== From: Geliang Tang To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , Jakub Sitnicki Cc: Geliang Tang , bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Geliang Tang Subject: [PATCH bpf-next 3/6] selftests/bpf: Use start_server_addr in test_tcp_check_syncookie Date: Sun, 5 May 2024 19:35:10 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang Include network_helpers.h in test_tcp_check_syncookie_user.c, use public helper start_server_addr() in it instead of the local defined function start_server(). This can avoid duplicate code. Add two helpers v6only_true() and v6only_false() to set IPV6_V6ONLY sockopt to true or false, set them to post_socket_cb pointer of struct network_helper_opts, and pass it to start_server_setsockopt(). In order to use functions defined in network_helpers.c, Makefile needs to be updated too. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/Makefile | 1 + .../bpf/test_tcp_check_syncookie_user.c | 68 +++++++------------ 2 files changed, 25 insertions(+), 44 deletions(-) diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index 82247aeef857..b90c718218ae 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -297,6 +297,7 @@ $(OUTPUT)/flow_dissector_load: $(TESTING_HELPERS) $(OUTPUT)/test_maps: $(TESTING_HELPERS) $(OUTPUT)/test_verifier: $(TESTING_HELPERS) $(CAP_HELPERS) $(UNPRIV_HELPERS) $(OUTPUT)/xsk.o: $(BPFOBJ) +$(OUTPUT)/test_tcp_check_syncookie_user: $(NETWORK_HELPERS) BPFTOOL ?= $(DEFAULT_BPFTOOL) $(DEFAULT_BPFTOOL): $(wildcard $(BPFTOOLDIR)/*.[ch] $(BPFTOOLDIR)/Makefile) \ diff --git a/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c b/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c index 32df93747095..bf60bc267cbc 100644 --- a/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c +++ b/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c @@ -16,44 +16,7 @@ #include #include "cgroup_helpers.h" - -static int start_server(const struct sockaddr *addr, socklen_t len, bool dual) -{ - int mode = !dual; - int fd; - - fd = socket(addr->sa_family, SOCK_STREAM, 0); - if (fd == -1) { - log_err("Failed to create server socket"); - goto out; - } - - if (addr->sa_family == AF_INET6) { - if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&mode, - sizeof(mode)) == -1) { - log_err("Failed to set the dual-stack mode"); - goto close_out; - } - } - - if (bind(fd, addr, len) == -1) { - log_err("Failed to bind server socket"); - goto close_out; - } - - if (listen(fd, 128) == -1) { - log_err("Failed to listen on server socket"); - goto close_out; - } - - goto out; - -close_out: - close(fd); - fd = -1; -out: - return fd; -} +#include "network_helpers.h" static int connect_to_server(const struct sockaddr *addr, socklen_t len) { @@ -216,8 +179,23 @@ static bool get_port(int server_fd, in_port_t *port) return true; } +static int v6only_true(int fd, const struct post_socket_opts *opts) +{ + int mode = true; + + return setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &mode, sizeof(mode)); +} + +static int v6only_false(int fd, const struct post_socket_opts *opts) +{ + int mode = false; + + return setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &mode, sizeof(mode)); +} + int main(int argc, char **argv) { + struct network_helper_opts opts = { 0 }; struct sockaddr_in addr4; struct sockaddr_in6 addr6; struct sockaddr_in addr4dual; @@ -259,18 +237,20 @@ int main(int argc, char **argv) addr6dual.sin6_addr = in6addr_any; addr6dual.sin6_port = 0; - server = start_server((const struct sockaddr *)&addr4, sizeof(addr4), - false); + server = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr4, + sizeof(addr4), NULL); if (server == -1 || !get_port(server, &addr4.sin_port)) goto err; - server_v6 = start_server((const struct sockaddr *)&addr6, - sizeof(addr6), false); + opts.post_socket_cb = v6only_true; + server_v6 = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr6, + sizeof(addr6), &opts); if (server_v6 == -1 || !get_port(server_v6, &addr6.sin6_port)) goto err; - server_dual = start_server((const struct sockaddr *)&addr6dual, - sizeof(addr6dual), true); + opts.post_socket_cb = v6only_false; + server_dual = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr6dual, + sizeof(addr6dual), &opts); if (server_dual == -1 || !get_port(server_dual, &addr4dual.sin_port)) goto err; From patchwork Sun May 5 11:35:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 794856 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F04E817BD9; Sun, 5 May 2024 11:36:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714909000; cv=none; b=MrrMIiJPYa5oCCUGPikUAbRnejP6pTcdHT5rpDpMGpvJXNFXEm22Cu7DCwWodKTBV94IK6plkRx6GH7OWsYufi/SYZOgAYfamrprkluXmCzhT2Od7TyodXlYP7Z64lOApF0Kufn/uWVKSSl5jYIQ33+55tABdv30UUuCZoijt6Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714909000; c=relaxed/simple; bh=HGnpd91Q9BcDlpa9HSMrm+MOW8Kgw9qrkCwve21fJ9A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MsD334qTHlzlrtVDgfOfRXxTkt6BpAFwUJN9bYO7QwCVuRtPO4bsQ24amUV5YVgkF3rVPaP0vmJAUKJ76xlHgbFwk/gBVcxBxcnwUzBcQ5Vt1giMoxbaGBTrquaaWmc88ncOJ8bZgjWm9N/dmI/nzIDtsYQRwkH5Cun0yyugNKE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mw8b9vkp; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Mw8b9vkp" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0783FC113CC; Sun, 5 May 2024 11:36:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714908999; bh=HGnpd91Q9BcDlpa9HSMrm+MOW8Kgw9qrkCwve21fJ9A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Mw8b9vkpmI/xIJyI6KW7vzLh2zrogFk94g+Q7vorqi5z9SHCpA1CJac7EzzF3PV00 w8C638J51AdkK5b9sS+P18OQG4xcVinL647Y6Hey5/KM1go/M+lrK33qdsS9NJ1RVp LPqzUmOyIiC591ghtCQNZYWFC+Ys83AlAXupdpA7XYe621bBGuOBOAhrZj7Ia+B6r2 6WUz/U7youWrC2Dl9hzpu/fduDxOlSrVEl4guv1JNbMXmK3CEJ7dK7sMfUUKXKxkO5 UMpkY9MpQqVz6LXWnV3QTTdoWvLDVmC6GYFIdu84vuRtdAapZYu5MDL1ydDdkcKq9X UyO6KDbrtOPRg== From: Geliang Tang To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , Jakub Sitnicki Cc: Geliang Tang , bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Geliang Tang Subject: [PATCH bpf-next 4/6] selftests/bpf: Use connect_to_fd in sockopt_inherit Date: Sun, 5 May 2024 19:35:11 +0800 Message-ID: <71db79127cc160b0643fd9a12c70ae019ae076a1.1714907662.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang This patch uses public helper connect_to_fd() exported in network_helpers.h instead of the local defined function connect_to_server() in prog_tests/sockopt_inherit.c. This can avoid duplicate code. Signed-off-by: Geliang Tang --- .../bpf/prog_tests/sockopt_inherit.c | 31 +------------------ 1 file changed, 1 insertion(+), 30 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c b/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c index ff0694ef5286..17a015a34d15 100644 --- a/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c +++ b/tools/testing/selftests/bpf/prog_tests/sockopt_inherit.c @@ -10,35 +10,6 @@ #define CUSTOM_INHERIT2 1 #define CUSTOM_LISTENER 2 -static int connect_to_server(int server_fd) -{ - struct sockaddr_storage addr; - socklen_t len = sizeof(addr); - int fd; - - fd = socket(AF_INET, SOCK_STREAM, 0); - if (fd < 0) { - log_err("Failed to create client socket"); - return -1; - } - - if (getsockname(server_fd, (struct sockaddr *)&addr, &len)) { - log_err("Failed to get server addr"); - goto out; - } - - if (connect(fd, (const struct sockaddr *)&addr, len) < 0) { - log_err("Fail to connect to server"); - goto out; - } - - return fd; - -out: - close(fd); - return -1; -} - static int verify_sockopt(int fd, int optname, const char *msg, char expected) { socklen_t optlen = 1; @@ -165,7 +136,7 @@ static void run_test(int cgroup_fd) pthread_cond_wait(&server_started, &server_started_mtx); pthread_mutex_unlock(&server_started_mtx); - client_fd = connect_to_server(server_fd); + client_fd = connect_to_fd(server_fd, 0); if (!ASSERT_GE(client_fd, 0, "connect_to_server")) goto close_server_fd; From patchwork Sun May 5 11:35:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 795966 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF67317BD9; Sun, 5 May 2024 11:36:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714909007; cv=none; b=P6j1E0B/lkOan56TUeMVcCIyZ202ZoNvBcC80WeoU8pgVsNMKzAsP7kBbvuitBMFFiuA2WfiOb6gC5tx5eH6qst5Q0lJLBQmGAxgxRmZ5r/POQLDdwe47mZEdXH2eIL6rk/iAODqD2xYwcvlz+VAVlEqVlT6h3/iKwb68FARBu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714909007; c=relaxed/simple; bh=zTT8utGtNMXPeE9ci+04rvk7F9kPQj3xfSI34Wl/coQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bmzqj0Ikcd7vYBbwu3b38g4sJF1gcfLMmJRPdATWm/Q0YnSQaajD00wh3lErRndXYoyGp1lOF6jEaXV9ERVLIGZhGwf9BfQ/ulI2DVxoYI+ris6NbXiAzwO/+kJ5TJI112X+b2Peg6SwGeL9U4kv+cgBtP3fb2aiqn7pFSRZ6UQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=V1ku4iN8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="V1ku4iN8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 30749C113CC; Sun, 5 May 2024 11:36:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714909006; bh=zTT8utGtNMXPeE9ci+04rvk7F9kPQj3xfSI34Wl/coQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=V1ku4iN8bYVaRW3aWAPaN7JGF3n7eBiAB3fOq5pglOwaFmE9cjrNQaeXxvjUtfO1D f3nCsYsLRa67TCL6yiA/bGo1LV4gwdNNnazMQ8FS0ZArPzRtr4fStgqbLkBAZYS2VZ ywIsR3+kZXUfqMGx/UvoyAwJW63gpaycSFtlfk5mbSG6mtTjmCY1oRwGkiy0ghpz2G qS5DY0QIexoKbF7Dfw7yRi9Qt1DqJ04bLgfaJ5fZpDLouUPVsE9SWzsWrz/GjZf4yE PYw157DBdHgkmckyCp2hjbbZL5m6w+DfnOLWf/VRCBTBa7Ws9HMf6I7NmI1UrY8t+5 dRO/QcvocNQSQ== From: Geliang Tang To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , Jakub Sitnicki Cc: Geliang Tang , bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Geliang Tang Subject: [PATCH bpf-next 5/6] selftests/bpf: Use connect_to_fd in test_tcp_check_syncookie Date: Sun, 5 May 2024 19:35:12 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang This patch uses public helper connect_to_fd() exported in network_helpers.h instead of the local defined function connect_to_server() in test_tcp_check_syncookie_user.c. This can avoid duplicate code. Then the arguments "addr" and "len" of run_test() become useless, drop them too. Signed-off-by: Geliang Tang --- .../bpf/test_tcp_check_syncookie_user.c | 38 +++---------------- 1 file changed, 5 insertions(+), 33 deletions(-) diff --git a/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c b/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c index bf60bc267cbc..b928474f3bf9 100644 --- a/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c +++ b/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c @@ -18,30 +18,6 @@ #include "cgroup_helpers.h" #include "network_helpers.h" -static int connect_to_server(const struct sockaddr *addr, socklen_t len) -{ - int fd = -1; - - fd = socket(addr->sa_family, SOCK_STREAM, 0); - if (fd == -1) { - log_err("Failed to create client socket"); - goto out; - } - - if (connect(fd, (const struct sockaddr *)addr, len) == -1) { - log_err("Fail to connect to server"); - goto close_out; - } - - goto out; - -close_out: - close(fd); - fd = -1; -out: - return fd; -} - static int get_map_fd_by_prog_id(int prog_id, bool *xdp) { struct bpf_prog_info info = {}; @@ -80,8 +56,7 @@ static int get_map_fd_by_prog_id(int prog_id, bool *xdp) return map_fd; } -static int run_test(int server_fd, int results_fd, bool xdp, - const struct sockaddr *addr, socklen_t len) +static int run_test(int server_fd, int results_fd, bool xdp) { int client = -1, srv_client = -1; int ret = 0; @@ -107,7 +82,7 @@ static int run_test(int server_fd, int results_fd, bool xdp, goto err; } - client = connect_to_server(addr, len); + client = connect_to_fd(server_fd, 0); if (client == -1) goto err; @@ -254,16 +229,13 @@ int main(int argc, char **argv) if (server_dual == -1 || !get_port(server_dual, &addr4dual.sin_port)) goto err; - if (run_test(server, results, xdp, - (const struct sockaddr *)&addr4, sizeof(addr4))) + if (run_test(server, results, xdp)) goto err; - if (run_test(server_v6, results, xdp, - (const struct sockaddr *)&addr6, sizeof(addr6))) + if (run_test(server_v6, results, xdp)) goto err; - if (run_test(server_dual, results, xdp, - (const struct sockaddr *)&addr4dual, sizeof(addr4dual))) + if (run_test(server_dual, results, xdp)) goto err; printf("ok\n"); From patchwork Sun May 5 11:35:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 794855 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10B7417556; Sun, 5 May 2024 11:36:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714909014; cv=none; b=Aa+dKFBJZUgUqfIAHSuGqNPkPD7RFsLVMnZ1y1X5yjozY8g6kPVkgvjA9MSrfV+1jQTT1FWmJMyZMiW+dti+kDXmdsA0Y2kVzowGjSgl9giXkvxfxNecImyJViPafUqSHQf0WeVKbe6LCNM14a02E1ab52qoz++6O21pU6YNiUM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1714909014; c=relaxed/simple; bh=r2H4ud/VlKHq3yNIYync+GN5J3XoWozHQYRqhhdu42U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Sjx/UHM5eHE2o+M6IoMyNJZ27uARbhxB10VAFdWtDraCBRznsilLrq37iZp/6f6y9nQ1H/CvlHBVHSXSmGsuIx1Pk4czpVZYSZX+GyOGUypsD/iEA0kU97Aa5W6vATPvxmDu77dWZ7vpKGOslHAOqQemZfGg9xd+OSw30fzV9Aw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jTE24B5R; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jTE24B5R" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 42B2DC113CC; Sun, 5 May 2024 11:36:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1714909013; bh=r2H4ud/VlKHq3yNIYync+GN5J3XoWozHQYRqhhdu42U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jTE24B5R32/ZFizyn8/hocIvGfCs+m4Im2pJiUbWKsEjKZ1xvnX5wt7T17NBQT8md kucXCFav8qK0ntHjQndjVNjiJMWoC4n1XFRV8jMmkdM63ly4Uhxyy0ML5hNB9abYXW 5pDW8C9DrP50lI+FhRStb9knZgel0irZPLb8y2G25OwGPLB6T+5BHB7B/KIt7scfaU aHtXl5FLmCmI87IAK/a/7H4Gb7uFaOujMtTWhF5JpcuWnc5eLCHAGxeoHgVbj58fDa 9qZaE4R8uuN4AJmo+N4h+HI3tTwpnKtjGpTT7Z80vA+Dq5CwAV/P5D4zcdBhtLuWq0 ZFB0vfRJi1EAg== From: Geliang Tang To: Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , Jakub Sitnicki Cc: Geliang Tang , bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, Geliang Tang Subject: [PATCH bpf-next 6/6] selftests/bpf: Drop get_port in test_tcp_check_syncookie Date: Sun, 5 May 2024 19:35:13 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang The arguments "addr" and "len" of run_test() have dropped. This makes function get_port() useless. Drop it from test_tcp_check_syncookie_user.c. Signed-off-by: Geliang Tang --- .../bpf/test_tcp_check_syncookie_user.c | 21 +++---------------- 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c b/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c index b928474f3bf9..7b5fc98838cd 100644 --- a/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c +++ b/tools/testing/selftests/bpf/test_tcp_check_syncookie_user.c @@ -139,21 +139,6 @@ static int run_test(int server_fd, int results_fd, bool xdp) return ret; } -static bool get_port(int server_fd, in_port_t *port) -{ - struct sockaddr_in addr; - socklen_t len = sizeof(addr); - - if (getsockname(server_fd, (struct sockaddr *)&addr, &len)) { - log_err("Failed to get server addr"); - return false; - } - - /* sin_port and sin6_port are located at the same offset. */ - *port = addr.sin_port; - return true; -} - static int v6only_true(int fd, const struct post_socket_opts *opts) { int mode = true; @@ -214,19 +199,19 @@ int main(int argc, char **argv) server = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr4, sizeof(addr4), NULL); - if (server == -1 || !get_port(server, &addr4.sin_port)) + if (server == -1) goto err; opts.post_socket_cb = v6only_true; server_v6 = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr6, sizeof(addr6), &opts); - if (server_v6 == -1 || !get_port(server_v6, &addr6.sin6_port)) + if (server_v6 == -1) goto err; opts.post_socket_cb = v6only_false; server_dual = start_server_addr(SOCK_STREAM, (struct sockaddr_storage *)&addr6dual, sizeof(addr6dual), &opts); - if (server_dual == -1 || !get_port(server_dual, &addr4dual.sin_port)) + if (server_dual == -1) goto err; if (run_test(server, results, xdp))