linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH bpf-next 0/4] use network helpers, part 5
@ 2024-05-11  3:16 Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 1/4] selftests/bpf: Use post_socket_cb in connect_to_fd_opts Geliang Tang
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Geliang Tang @ 2024-05-11  3:16 UTC (permalink / raw)
  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
  Cc: Geliang Tang, bpf, linux-kselftest, Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

This patchset uses post_socket_cb and post_connect_cb callbacks of struct
network_helper_opts to refactor do_test() in bpf_tcp_ca.c to move dctcp
test dedicated code out of do_test() into test_dctcp().

Patch 3 adds a new member in post_socket_opts and patch 4 adds a new
callback in network_helper_opts. I'm not sure if this is going too far.

Geliang Tang (4):
  selftests/bpf: Use post_socket_cb in connect_to_fd_opts
  selftests/bpf: Use start_server_addr in bpf_tcp_ca
  selftests/bpf: Use connect_to_fd_opts in do_test in bpf_tcp_ca
  selftests/bpf: Add post_connect_cb callback

 tools/testing/selftests/bpf/network_helpers.c |  13 ++-
 tools/testing/selftests/bpf/network_helpers.h |   8 +-
 .../selftests/bpf/prog_tests/bpf_tcp_ca.c     | 105 +++++++++++-------
 3 files changed, 81 insertions(+), 45 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH bpf-next 1/4] selftests/bpf: Use post_socket_cb in connect_to_fd_opts
  2024-05-11  3:16 [PATCH bpf-next 0/4] use network helpers, part 5 Geliang Tang
@ 2024-05-11  3:16 ` Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 2/4] selftests/bpf: Use start_server_addr in bpf_tcp_ca Geliang Tang
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2024-05-11  3:16 UTC (permalink / raw)
  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
  Cc: Geliang Tang, bpf, linux-kselftest, Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

Since the post_socket_cb() callback is added in struct network_helper_opts,
it's make sense to use it not only in __start_server(), but also in
connect_to_fd_opts(). Then it can be used to set TCP_CONGESTION sockopt.

Add a post_socket_opts type member cb_opts into struct network_helper_opts,
then cc can be moved into struct post_socket_opts from network_helper_opts.
Define a new callback cc_cb() to set TCP_CONGESTION sockopt, and set it to
post_socket_cb pointer.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/bpf/network_helpers.c       | 5 ++---
 tools/testing/selftests/bpf/network_helpers.h       | 6 ++++--
 tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c | 9 ++++++++-
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
index 35250e6cde7f..d97f8a669b38 100644
--- a/tools/testing/selftests/bpf/network_helpers.c
+++ b/tools/testing/selftests/bpf/network_helpers.c
@@ -338,9 +338,8 @@ int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts)
 	if (settimeo(fd, opts->timeout_ms))
 		goto error_close;
 
-	if (opts->cc && opts->cc[0] &&
-	    setsockopt(fd, SOL_TCP, TCP_CONGESTION, opts->cc,
-		       strlen(opts->cc) + 1))
+	if (opts->post_socket_cb &&
+	    opts->post_socket_cb(fd, &opts->cb_opts))
 		goto error_close;
 
 	if (!opts->noconnect)
diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h
index 883c7ea9d8d5..e44a6e5d8344 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -21,16 +21,18 @@ typedef __u16 __sum16;
 #define VIP_NUM 5
 #define MAGIC_BYTES 123
 
-struct post_socket_opts {};
+struct post_socket_opts {
+	const char *cc;
+};
 
 struct network_helper_opts {
-	const char *cc;
 	int timeout_ms;
 	bool must_fail;
 	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 */
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
index 907bac46c774..4eedc161b5b3 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
@@ -80,6 +80,12 @@ static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map)
 	close(fd);
 }
 
+static int cc_cb(int fd, const struct post_socket_opts *opts)
+{
+	return setsockopt(fd, SOL_TCP, TCP_CONGESTION, opts->cc,
+			  strlen(opts->cc) + 1);
+}
+
 static void test_cubic(void)
 {
 	struct bpf_cubic *cubic_skel;
@@ -171,7 +177,8 @@ static void test_dctcp_fallback(void)
 {
 	int err, lfd = -1, cli_fd = -1, srv_fd = -1;
 	struct network_helper_opts opts = {
-		.cc = "cubic",
+		.cb_opts.cc = "cubic",
+		.post_socket_cb = cc_cb,
 	};
 	struct bpf_dctcp *dctcp_skel;
 	struct bpf_link *link = NULL;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bpf-next 2/4] selftests/bpf: Use start_server_addr in bpf_tcp_ca
  2024-05-11  3:16 [PATCH bpf-next 0/4] use network helpers, part 5 Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 1/4] selftests/bpf: Use post_socket_cb in connect_to_fd_opts Geliang Tang
@ 2024-05-11  3:16 ` Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 3/4] selftests/bpf: Use connect_to_fd_opts in do_test " Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback Geliang Tang
  3 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2024-05-11  3:16 UTC (permalink / raw)
  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
  Cc: Geliang Tang, bpf, linux-kselftest, Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

This patch uses start_server_addr() in do_test() in prog_tests/bpf_tcp_ca.c
to accept a struct network_helper_opts argument instead of using
start_server() and settcpca(). Then change the type of the first paramenter
of do_test() into a struct network_helper_opts one.

Define its own opts for each test, set its own cc name into cb_opts.cc, and
cc_cb() into post_socket_cb callback, then pass it to do_test().

opts->cb_opts needs to be passed to post_socket_cb() in __start_server().

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/bpf/network_helpers.c |  2 +-
 .../selftests/bpf/prog_tests/bpf_tcp_ca.c     | 46 +++++++++++++++----
 2 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
index d97f8a669b38..6864af665508 100644
--- a/tools/testing/selftests/bpf/network_helpers.c
+++ b/tools/testing/selftests/bpf/network_helpers.c
@@ -94,7 +94,7 @@ static int __start_server(int type, const struct sockaddr *addr, socklen_t addrl
 	if (settimeo(fd, opts->timeout_ms))
 		goto error_close;
 
-	if (opts->post_socket_cb && opts->post_socket_cb(fd, NULL)) {
+	if (opts->post_socket_cb && opts->post_socket_cb(fd, &opts->cb_opts)) {
 		log_err("Failed to call post_socket_cb");
 		goto error_close;
 	}
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
index 4eedc161b5b3..f50832b7838e 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
@@ -33,12 +33,18 @@ static int settcpca(int fd, const char *tcp_ca)
 	return 0;
 }
 
-static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map)
+static void do_test(const struct network_helper_opts *opts,
+		    const struct bpf_map *sk_stg_map)
 {
+	struct sockaddr_storage addr;
 	int lfd = -1, fd = -1;
+	socklen_t addrlen;
 	int err;
 
-	lfd = start_server(AF_INET6, SOCK_STREAM, NULL, 0, 0);
+	if (make_sockaddr(AF_INET6, NULL, 0, &addr, &addrlen))
+		return;
+
+	lfd = start_server_addr(SOCK_STREAM, &addr, addrlen, opts);
 	if (!ASSERT_NEQ(lfd, -1, "socket"))
 		return;
 
@@ -48,7 +54,7 @@ static void do_test(const char *tcp_ca, const struct bpf_map *sk_stg_map)
 		return;
 	}
 
-	if (settcpca(lfd, tcp_ca) || settcpca(fd, tcp_ca))
+	if (settcpca(fd, opts->cb_opts.cc))
 		goto done;
 
 	if (sk_stg_map) {
@@ -88,6 +94,10 @@ static int cc_cb(int fd, const struct post_socket_opts *opts)
 
 static void test_cubic(void)
 {
+	struct network_helper_opts opts = {
+		.cb_opts.cc = "bpf_cubic",
+		.post_socket_cb = cc_cb,
+	};
 	struct bpf_cubic *cubic_skel;
 	struct bpf_link *link;
 
@@ -101,7 +111,7 @@ static void test_cubic(void)
 		return;
 	}
 
-	do_test("bpf_cubic", NULL);
+	do_test(&opts, NULL);
 
 	ASSERT_EQ(cubic_skel->bss->bpf_cubic_acked_called, 1, "pkts_acked called");
 
@@ -111,6 +121,10 @@ static void test_cubic(void)
 
 static void test_dctcp(void)
 {
+	struct network_helper_opts opts = {
+		.cb_opts.cc = "bpf_dctcp",
+		.post_socket_cb = cc_cb,
+	};
 	struct bpf_dctcp *dctcp_skel;
 	struct bpf_link *link;
 
@@ -124,7 +138,7 @@ static void test_dctcp(void)
 		return;
 	}
 
-	do_test("bpf_dctcp", dctcp_skel->maps.sk_stg_map);
+	do_test(&opts, dctcp_skel->maps.sk_stg_map);
 	ASSERT_EQ(dctcp_skel->bss->stg_result, expected_stg, "stg_result");
 
 	bpf_link__destroy(link);
@@ -303,6 +317,10 @@ static void test_unsupp_cong_op(void)
 
 static void test_update_ca(void)
 {
+	struct network_helper_opts opts = {
+		.cb_opts.cc = "tcp_ca_update",
+		.post_socket_cb = cc_cb,
+	};
 	struct tcp_ca_update *skel;
 	struct bpf_link *link;
 	int saved_ca1_cnt;
@@ -315,14 +333,14 @@ static void test_update_ca(void)
 	link = bpf_map__attach_struct_ops(skel->maps.ca_update_1);
 	ASSERT_OK_PTR(link, "attach_struct_ops");
 
-	do_test("tcp_ca_update", NULL);
+	do_test(&opts, NULL);
 	saved_ca1_cnt = skel->bss->ca1_cnt;
 	ASSERT_GT(saved_ca1_cnt, 0, "ca1_ca1_cnt");
 
 	err = bpf_link__update_map(link, skel->maps.ca_update_2);
 	ASSERT_OK(err, "update_map");
 
-	do_test("tcp_ca_update", NULL);
+	do_test(&opts, NULL);
 	ASSERT_EQ(skel->bss->ca1_cnt, saved_ca1_cnt, "ca2_ca1_cnt");
 	ASSERT_GT(skel->bss->ca2_cnt, 0, "ca2_ca2_cnt");
 
@@ -332,6 +350,10 @@ static void test_update_ca(void)
 
 static void test_update_wrong(void)
 {
+	struct network_helper_opts opts = {
+		.cb_opts.cc = "tcp_ca_update",
+		.post_socket_cb = cc_cb,
+	};
 	struct tcp_ca_update *skel;
 	struct bpf_link *link;
 	int saved_ca1_cnt;
@@ -344,14 +366,14 @@ static void test_update_wrong(void)
 	link = bpf_map__attach_struct_ops(skel->maps.ca_update_1);
 	ASSERT_OK_PTR(link, "attach_struct_ops");
 
-	do_test("tcp_ca_update", NULL);
+	do_test(&opts, NULL);
 	saved_ca1_cnt = skel->bss->ca1_cnt;
 	ASSERT_GT(saved_ca1_cnt, 0, "ca1_ca1_cnt");
 
 	err = bpf_link__update_map(link, skel->maps.ca_wrong);
 	ASSERT_ERR(err, "update_map");
 
-	do_test("tcp_ca_update", NULL);
+	do_test(&opts, NULL);
 	ASSERT_GT(skel->bss->ca1_cnt, saved_ca1_cnt, "ca2_ca1_cnt");
 
 	bpf_link__destroy(link);
@@ -360,6 +382,10 @@ static void test_update_wrong(void)
 
 static void test_mixed_links(void)
 {
+	struct network_helper_opts opts = {
+		.cb_opts.cc = "tcp_ca_update",
+		.post_socket_cb = cc_cb,
+	};
 	struct tcp_ca_update *skel;
 	struct bpf_link *link, *link_nl;
 	int err;
@@ -374,7 +400,7 @@ static void test_mixed_links(void)
 	link = bpf_map__attach_struct_ops(skel->maps.ca_update_1);
 	ASSERT_OK_PTR(link, "attach_struct_ops");
 
-	do_test("tcp_ca_update", NULL);
+	do_test(&opts, NULL);
 	ASSERT_GT(skel->bss->ca1_cnt, 0, "ca1_ca1_cnt");
 
 	err = bpf_link__update_map(link, skel->maps.ca_no_link);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bpf-next 3/4] selftests/bpf: Use connect_to_fd_opts in do_test in bpf_tcp_ca
  2024-05-11  3:16 [PATCH bpf-next 0/4] use network helpers, part 5 Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 1/4] selftests/bpf: Use post_socket_cb in connect_to_fd_opts Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 2/4] selftests/bpf: Use start_server_addr in bpf_tcp_ca Geliang Tang
@ 2024-05-11  3:16 ` Geliang Tang
  2024-05-11  3:16 ` [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback Geliang Tang
  3 siblings, 0 replies; 6+ messages in thread
From: Geliang Tang @ 2024-05-11  3:16 UTC (permalink / raw)
  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
  Cc: Geliang Tang, bpf, linux-kselftest, Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

This patch uses connect_to_fd_opts() instead of using connect_fd_to_fd()
and settcpca() in do_test() in prog_tests/bpf_tcp_ca.c to accept a struct
network_helper_opts argument.

Then define a dctcp dedicated post_socket_cb callback stg_post_socket_cb(),
invoking both cc_cb() and bpf_map_update_elem() in it, and set it in
test_dctcp(). For passing map_fd into stg_post_socket_cb() callback, a new
member map_fd is added in struct post_socket_opts.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/bpf/network_helpers.h |  1 +
 .../selftests/bpf/prog_tests/bpf_tcp_ca.c     | 33 ++++++++-----------
 2 files changed, 15 insertions(+), 19 deletions(-)

diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h
index e44a6e5d8344..62dd40095cf2 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -23,6 +23,7 @@ typedef __u16 __sum16;
 
 struct post_socket_opts {
 	const char *cc;
+	int map_fd;
 };
 
 struct network_helper_opts {
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
index f50832b7838e..bca30c32b819 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
@@ -48,25 +48,9 @@ static void do_test(const struct network_helper_opts *opts,
 	if (!ASSERT_NEQ(lfd, -1, "socket"))
 		return;
 
-	fd = socket(AF_INET6, SOCK_STREAM, 0);
-	if (!ASSERT_NEQ(fd, -1, "socket")) {
-		close(lfd);
-		return;
-	}
-
-	if (settcpca(fd, opts->cb_opts.cc))
-		goto done;
-
-	if (sk_stg_map) {
-		err = bpf_map_update_elem(bpf_map__fd(sk_stg_map), &fd,
-					  &expected_stg, BPF_NOEXIST);
-		if (!ASSERT_OK(err, "bpf_map_update_elem(sk_stg_map)"))
-			goto done;
-	}
-
 	/* connect to server */
-	err = connect_fd_to_fd(fd, lfd, 0);
-	if (!ASSERT_NEQ(err, -1, "connect"))
+	fd = connect_to_fd_opts(lfd, opts);
+	if (!ASSERT_NEQ(fd, -1, "connect_to_fd_opts"))
 		goto done;
 
 	if (sk_stg_map) {
@@ -119,11 +103,21 @@ static void test_cubic(void)
 	bpf_cubic__destroy(cubic_skel);
 }
 
+static int stg_post_socket_cb(int fd, const struct post_socket_opts *opts)
+{
+	int err;
+
+	err = cc_cb(fd, opts);
+	if (err)
+		return err;
+	return bpf_map_update_elem(opts->map_fd, &fd, &expected_stg, BPF_NOEXIST);
+}
+
 static void test_dctcp(void)
 {
 	struct network_helper_opts opts = {
 		.cb_opts.cc = "bpf_dctcp",
-		.post_socket_cb = cc_cb,
+		.post_socket_cb = stg_post_socket_cb,
 	};
 	struct bpf_dctcp *dctcp_skel;
 	struct bpf_link *link;
@@ -138,6 +132,7 @@ static void test_dctcp(void)
 		return;
 	}
 
+	opts.cb_opts.map_fd = bpf_map__fd(dctcp_skel->maps.sk_stg_map);
 	do_test(&opts, dctcp_skel->maps.sk_stg_map);
 	ASSERT_EQ(dctcp_skel->bss->stg_result, expected_stg, "stg_result");
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback
  2024-05-11  3:16 [PATCH bpf-next 0/4] use network helpers, part 5 Geliang Tang
                   ` (2 preceding siblings ...)
  2024-05-11  3:16 ` [PATCH bpf-next 3/4] selftests/bpf: Use connect_to_fd_opts in do_test " Geliang Tang
@ 2024-05-11  3:16 ` Geliang Tang
  2024-05-15  1:32   ` kernel test robot
  3 siblings, 1 reply; 6+ messages in thread
From: Geliang Tang @ 2024-05-11  3:16 UTC (permalink / raw)
  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
  Cc: Geliang Tang, bpf, linux-kselftest, Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

For getting rid of the second parameter of do_test(), this patch adds a
new callback post_connect_cb in struct network_helper_opts, it will be
invoked after connect_fd_to_addr() in connect_to_fd_opts().

Then define a dctcp dedicated post_connect_cb callback, invoking
bpf_map_lookup_elem() in it, named stg_post_connect_cb() and set it in
test_dctcp().

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/bpf/network_helpers.c |  6 ++-
 tools/testing/selftests/bpf/network_helpers.h |  1 +
 .../selftests/bpf/prog_tests/bpf_tcp_ca.c     | 41 ++++++++++---------
 3 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/selftests/bpf/network_helpers.c
index 6864af665508..5636488dfb42 100644
--- a/tools/testing/selftests/bpf/network_helpers.c
+++ b/tools/testing/selftests/bpf/network_helpers.c
@@ -342,10 +342,14 @@ int connect_to_fd_opts(int server_fd, const struct network_helper_opts *opts)
 	    opts->post_socket_cb(fd, &opts->cb_opts))
 		goto error_close;
 
-	if (!opts->noconnect)
+	if (!opts->noconnect) {
 		if (connect_fd_to_addr(fd, &addr, addrlen, opts->must_fail))
 			goto error_close;
 
+		if (opts->post_connect_cb && opts->post_connect_cb(fd, &opts->cb_opts))
+			goto error_close;
+	}
+
 	return fd;
 
 error_close:
diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/selftests/bpf/network_helpers.h
index 62dd40095cf2..0c8859651e7a 100644
--- a/tools/testing/selftests/bpf/network_helpers.h
+++ b/tools/testing/selftests/bpf/network_helpers.h
@@ -33,6 +33,7 @@ struct network_helper_opts {
 	int type;
 	int proto;
 	int (*post_socket_cb)(int fd, const struct post_socket_opts *opts);
+	int (*post_connect_cb)(int fd, const struct post_socket_opts *opts);
 	struct post_socket_opts cb_opts;
 };
 
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
index bca30c32b819..0801b0c39cfe 100644
--- a/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
+++ b/tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c
@@ -33,13 +33,11 @@ static int settcpca(int fd, const char *tcp_ca)
 	return 0;
 }
 
-static void do_test(const struct network_helper_opts *opts,
-		    const struct bpf_map *sk_stg_map)
+static void do_test(const struct network_helper_opts *opts)
 {
 	struct sockaddr_storage addr;
 	int lfd = -1, fd = -1;
 	socklen_t addrlen;
-	int err;
 
 	if (make_sockaddr(AF_INET6, NULL, 0, &addr, &addrlen))
 		return;
@@ -53,16 +51,6 @@ static void do_test(const struct network_helper_opts *opts,
 	if (!ASSERT_NEQ(fd, -1, "connect_to_fd_opts"))
 		goto done;
 
-	if (sk_stg_map) {
-		int tmp_stg;
-
-		err = bpf_map_lookup_elem(bpf_map__fd(sk_stg_map), &fd,
-					  &tmp_stg);
-		if (!ASSERT_ERR(err, "bpf_map_lookup_elem(sk_stg_map)") ||
-				!ASSERT_EQ(errno, ENOENT, "bpf_map_lookup_elem(sk_stg_map)"))
-			goto done;
-	}
-
 	ASSERT_OK(send_recv_data(lfd, fd, total_bytes), "send_recv_data");
 
 done:
@@ -95,7 +83,7 @@ static void test_cubic(void)
 		return;
 	}
 
-	do_test(&opts, NULL);
+	do_test(&opts);
 
 	ASSERT_EQ(cubic_skel->bss->bpf_cubic_acked_called, 1, "pkts_acked called");
 
@@ -113,11 +101,24 @@ static int stg_post_socket_cb(int fd, const struct post_socket_opts *opts)
 	return bpf_map_update_elem(opts->map_fd, &fd, &expected_stg, BPF_NOEXIST);
 }
 
+static int stg_post_connect_cb(int fd, const struct post_socket_opts *opts)
+{
+	int tmp_stg;
+	int err;
+
+	err = bpf_map_lookup_elem(opts->map_fd, &fd, &tmp_stg);
+	if (!ASSERT_ERR(err, "bpf_map_lookup_elem(sk_stg_map)") ||
+			!ASSERT_EQ(errno, ENOENT, "bpf_map_lookup_elem(sk_stg_map)"))
+		return err;
+	return 0;
+}
+
 static void test_dctcp(void)
 {
 	struct network_helper_opts opts = {
 		.cb_opts.cc = "bpf_dctcp",
 		.post_socket_cb = stg_post_socket_cb,
+		.post_connect_cb = stg_post_connect_cb,
 	};
 	struct bpf_dctcp *dctcp_skel;
 	struct bpf_link *link;
@@ -133,7 +134,7 @@ static void test_dctcp(void)
 	}
 
 	opts.cb_opts.map_fd = bpf_map__fd(dctcp_skel->maps.sk_stg_map);
-	do_test(&opts, dctcp_skel->maps.sk_stg_map);
+	do_test(&opts);
 	ASSERT_EQ(dctcp_skel->bss->stg_result, expected_stg, "stg_result");
 
 	bpf_link__destroy(link);
@@ -328,14 +329,14 @@ static void test_update_ca(void)
 	link = bpf_map__attach_struct_ops(skel->maps.ca_update_1);
 	ASSERT_OK_PTR(link, "attach_struct_ops");
 
-	do_test(&opts, NULL);
+	do_test(&opts);
 	saved_ca1_cnt = skel->bss->ca1_cnt;
 	ASSERT_GT(saved_ca1_cnt, 0, "ca1_ca1_cnt");
 
 	err = bpf_link__update_map(link, skel->maps.ca_update_2);
 	ASSERT_OK(err, "update_map");
 
-	do_test(&opts, NULL);
+	do_test(&opts);
 	ASSERT_EQ(skel->bss->ca1_cnt, saved_ca1_cnt, "ca2_ca1_cnt");
 	ASSERT_GT(skel->bss->ca2_cnt, 0, "ca2_ca2_cnt");
 
@@ -361,14 +362,14 @@ static void test_update_wrong(void)
 	link = bpf_map__attach_struct_ops(skel->maps.ca_update_1);
 	ASSERT_OK_PTR(link, "attach_struct_ops");
 
-	do_test(&opts, NULL);
+	do_test(&opts);
 	saved_ca1_cnt = skel->bss->ca1_cnt;
 	ASSERT_GT(saved_ca1_cnt, 0, "ca1_ca1_cnt");
 
 	err = bpf_link__update_map(link, skel->maps.ca_wrong);
 	ASSERT_ERR(err, "update_map");
 
-	do_test(&opts, NULL);
+	do_test(&opts);
 	ASSERT_GT(skel->bss->ca1_cnt, saved_ca1_cnt, "ca2_ca1_cnt");
 
 	bpf_link__destroy(link);
@@ -395,7 +396,7 @@ static void test_mixed_links(void)
 	link = bpf_map__attach_struct_ops(skel->maps.ca_update_1);
 	ASSERT_OK_PTR(link, "attach_struct_ops");
 
-	do_test(&opts, NULL);
+	do_test(&opts);
 	ASSERT_GT(skel->bss->ca1_cnt, 0, "ca1_ca1_cnt");
 
 	err = bpf_link__update_map(link, skel->maps.ca_no_link);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback
  2024-05-11  3:16 ` [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback Geliang Tang
@ 2024-05-15  1:32   ` kernel test robot
  0 siblings, 0 replies; 6+ messages in thread
From: kernel test robot @ 2024-05-15  1:32 UTC (permalink / raw)
  To: Geliang Tang, 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
  Cc: oe-kbuild-all, Geliang Tang, bpf, linux-kselftest

Hi Geliang,

kernel test robot noticed the following build errors:

[auto build test ERROR on bpf-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/Geliang-Tang/selftests-bpf-Use-post_socket_cb-in-connect_to_fd_opts/20240511-111755
base:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
patch link:    https://lore.kernel.org/r/2da67a207bfd53057db219e13bd68a7ee82d5d30.1715396405.git.tanggeliang%40kylinos.cn
patch subject: [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <yujie.liu@intel.com>
| Closes: https://lore.kernel.org/r/202405141220.s3qJcZc4-lkp@intel.com/

All errors (new ones prefixed by >>):

>> tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c:500:26: error: too many arguments to function call, expected single argument 'opts', have 2 arguments
     500 |         do_test("bpf_cc_cubic", NULL);
         |         ~~~~~~~                 ^~~~
   lib/clang/18/include/__stddef_null.h:26:14: note: expanded from macro 'NULL'
      26 | #define NULL ((void*)0)
         |              ^~~~~~~~~~
   tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c:37:13: note: 'do_test' declared here
      37 | static void do_test(const struct network_helper_opts *opts)
         |             ^       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   1 error generated.


vim +/opts +500 tools/testing/selftests/bpf/prog_tests/bpf_tcp_ca.c

5da7fb04902b0f Martin KaFai Lau 2024-03-22  484  
96c3490d6423b7 Miao Xu          2024-05-01  485  static void test_cc_cubic(void)
96c3490d6423b7 Miao Xu          2024-05-01  486  {
96c3490d6423b7 Miao Xu          2024-05-01  487  	struct bpf_cc_cubic *cc_cubic_skel;
96c3490d6423b7 Miao Xu          2024-05-01  488  	struct bpf_link *link;
96c3490d6423b7 Miao Xu          2024-05-01  489  
96c3490d6423b7 Miao Xu          2024-05-01  490  	cc_cubic_skel = bpf_cc_cubic__open_and_load();
96c3490d6423b7 Miao Xu          2024-05-01  491  	if (!ASSERT_OK_PTR(cc_cubic_skel, "bpf_cc_cubic__open_and_load"))
96c3490d6423b7 Miao Xu          2024-05-01  492  		return;
96c3490d6423b7 Miao Xu          2024-05-01  493  
96c3490d6423b7 Miao Xu          2024-05-01  494  	link = bpf_map__attach_struct_ops(cc_cubic_skel->maps.cc_cubic);
96c3490d6423b7 Miao Xu          2024-05-01  495  	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
96c3490d6423b7 Miao Xu          2024-05-01  496  		bpf_cc_cubic__destroy(cc_cubic_skel);
96c3490d6423b7 Miao Xu          2024-05-01  497  		return;
96c3490d6423b7 Miao Xu          2024-05-01  498  	}
96c3490d6423b7 Miao Xu          2024-05-01  499  
96c3490d6423b7 Miao Xu          2024-05-01 @500  	do_test("bpf_cc_cubic", NULL);
96c3490d6423b7 Miao Xu          2024-05-01  501  
96c3490d6423b7 Miao Xu          2024-05-01  502  	bpf_link__destroy(link);
96c3490d6423b7 Miao Xu          2024-05-01  503  	bpf_cc_cubic__destroy(cc_cubic_skel);
96c3490d6423b7 Miao Xu          2024-05-01  504  }
96c3490d6423b7 Miao Xu          2024-05-01  505  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-05-15  1:32 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-11  3:16 [PATCH bpf-next 0/4] use network helpers, part 5 Geliang Tang
2024-05-11  3:16 ` [PATCH bpf-next 1/4] selftests/bpf: Use post_socket_cb in connect_to_fd_opts Geliang Tang
2024-05-11  3:16 ` [PATCH bpf-next 2/4] selftests/bpf: Use start_server_addr in bpf_tcp_ca Geliang Tang
2024-05-11  3:16 ` [PATCH bpf-next 3/4] selftests/bpf: Use connect_to_fd_opts in do_test " Geliang Tang
2024-05-11  3:16 ` [PATCH bpf-next 4/4] selftests/bpf: Add post_connect_cb callback Geliang Tang
2024-05-15  1:32   ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).