All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests
@ 2024-04-08  3:01 Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 1/9] selftests/bpf: Add RUN_MPTCP_TEST macro Geliang Tang
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

v7:
 - address Matt's comments in v6 (thanks)
 - add more commit logs.
 - use WITH_DATA/WITHOUT_DATA instead of 1/0.
 - make patch 3 as a squash-to patch.

v6:
- drop patch 1 in v5 and rebased.

v5:
 - drop patch 5 in v4:
  Squash to "selftests/bpf: Add bpf scheduler test" 4 cleanup

v4:
 - add set_nonblock to make BPF tests stable.
 - split 'Squash to "selftests/bpf: Add bpf scheduler test"' into 4 patches.

v3:
 - part 1, bpf schedulers.

v2:
 - add two more helpers, send_single_byte and send_recv_data.

Refactor mptcp bpf tests using newly added macros MPTCP_BASE_TEST,
RUN_MPTCP_TEST and MPTCP_SCHED_TEST macro.

Geliang Tang (9):
  selftests/bpf: Add RUN_MPTCP_TEST macro
  Squash to "selftests/bpf: Add bpf scheduler test" 1 verify
  Squash to "selftests/bpf: Add bpf scheduler test" 2 time
  Squash to "selftests/bpf: Add bpf scheduler test" 3 MPTCP_SCHED_TEST
  Squash to "selftests/bpf: Add bpf_first scheduler & test"
  Squash to "selftests/bpf: Add bpf_bkup scheduler & test"
  Squash to "selftests/bpf: Add bpf_rr scheduler & test"
  Squash to "selftests/bpf: Add bpf_red scheduler & test"
  Squash to "selftests/bpf: Add bpf_burst scheduler & test"

 .../testing/selftests/bpf/prog_tests/mptcp.c  | 265 +++++-------------
 .../selftests/bpf/progs/mptcp_bpf_bkup.c      |   1 +
 .../selftests/bpf/progs/mptcp_bpf_burst.c     |   1 +
 .../selftests/bpf/progs/mptcp_bpf_first.c     |   1 +
 .../selftests/bpf/progs/mptcp_bpf_red.c       |   1 +
 .../selftests/bpf/progs/mptcp_bpf_rr.c        |   1 +
 6 files changed, 77 insertions(+), 193 deletions(-)

-- 
2.40.1


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

* [PATCH mptcp-next v7 1/9] selftests/bpf: Add RUN_MPTCP_TEST macro
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify Geliang Tang
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

Each MPTCP subtest tests test__start_subtest(suffix), then invokes
test_suffix(). It makes sense to add a new macro RUN_MPTCP_TEST to
simpolify the code.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 tools/testing/selftests/bpf/prog_tests/mptcp.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index cbdb15922949..c29c81239603 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -653,12 +653,16 @@ static void test_burst(void)
 	mptcp_bpf_burst__destroy(burst_skel);
 }
 
+#define RUN_MPTCP_TEST(suffix)					\
+do {								\
+	if (test__start_subtest(#suffix))			\
+		test_##suffix();				\
+} while (0)
+
 void test_mptcp(void)
 {
-	if (test__start_subtest("base"))
-		test_base();
-	if (test__start_subtest("mptcpify"))
-		test_mptcpify();
+	RUN_MPTCP_TEST(base);
+	RUN_MPTCP_TEST(mptcpify);
 	if (test__start_subtest("default"))
 		test_default();
 	if (test__start_subtest("first"))
-- 
2.40.1


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

* [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 1/9] selftests/bpf: Add RUN_MPTCP_TEST macro Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08 19:58   ` Matthieu Baerts
  2024-04-08  3:01 ` [PATCH mptcp-next v7 3/9] Squash to "selftests/bpf: Add bpf scheduler test" 2 time Geliang Tang
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

Add send_data_and_verify helper to avoid duplicated code.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 40 ++++++++++++++-----
 1 file changed, 30 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index c29c81239603..5080e680fbe0 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -457,23 +457,44 @@ static int has_bytes_sent(char *addr)
 	return system(cmd);
 }
 
-static void test_default(void)
+static void send_data_and_verify(char *sched, char *addr1, char *addr2)
 {
 	int server_fd, client_fd;
-	struct nstoken *nstoken;
 
-	nstoken = sched_init("subflow", "default");
-	if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
-		goto fail;
 	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
+	if (CHECK(server_fd < 0, sched, "start_mptcp_server: %d\n", errno))
+		return;
+
 	client_fd = connect_to_fd(server_fd, 0);
+	if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n", errno))
+		goto close_server;
 
-	send_data(server_fd, client_fd, "default");
-	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
-	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
+	send_data(server_fd, client_fd, sched);
+
+	if (!strcmp(addr1, "WITH_DATA"))
+		CHECK(has_bytes_sent(ADDR_1), sched, "should have bytes_sent on addr1\n");
+	else if (!strcmp(addr1, "WITHOUT_DATA"))
+		CHECK(!has_bytes_sent(ADDR_1), sched, "shouldn't have bytes_sent on addr1\n");
+	if (!strcmp(addr2, "WITH_DATA"))
+		CHECK(has_bytes_sent(ADDR_2), sched, "should have bytes_sent on addr2\n");
+	else if (!strcmp(addr2, "WITHOUT_DATA"))
+		CHECK(!has_bytes_sent(ADDR_2), sched, "shouldn't have bytes_sent on addr2\n");
 
 	close(client_fd);
+close_server:
 	close(server_fd);
+}
+
+static void test_default(void)
+{
+	struct nstoken *nstoken;
+
+	nstoken = sched_init("subflow", "default");
+	if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
+		goto fail;
+
+	send_data_and_verify("default", "WITH_DATA", "WITH_DATA");
+
 fail:
 	cleanup_netns(nstoken);
 }
@@ -663,8 +684,7 @@ void test_mptcp(void)
 {
 	RUN_MPTCP_TEST(base);
 	RUN_MPTCP_TEST(mptcpify);
-	if (test__start_subtest("default"))
-		test_default();
+	RUN_MPTCP_TEST(default);
 	if (test__start_subtest("first"))
 		test_first();
 	if (test__start_subtest("bkup"))
-- 
2.40.1


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

* [PATCH mptcp-next v7 3/9] Squash to "selftests/bpf: Add bpf scheduler test" 2 time
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 1/9] selftests/bpf: Add RUN_MPTCP_TEST macro Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 4/9] Squash to "selftests/bpf: Add bpf scheduler test" 3 MPTCP_SCHED_TEST Geliang Tang
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

Move time related code from send_data into send_data_and_verify. Then
send_data can be exported into network_helpers.h as a public function,
reused by mptcp.c and bpf_tcp_ca.c.

Drop duplicate '#include <time.h>', it's included in test_progs.h
already.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 23 +++++++++----------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 5080e680fbe0..aa95bb41d5ea 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -5,7 +5,6 @@
 #include <linux/const.h>
 #include <netinet/in.h>
 #include <test_progs.h>
-#include <time.h>
 #include "cgroup_helpers.h"
 #include "network_helpers.h"
 #include "mptcp_sock.skel.h"
@@ -380,16 +379,12 @@ static void *server(void *arg)
 static void send_data(int lfd, int fd, char *msg)
 {
 	ssize_t nr_recv = 0, bytes = 0;
-	struct timespec start, end;
-	unsigned int delta_ms;
 	pthread_t srv_thread;
 	void *thread_ret;
 	char batch[1500];
 	int err;
 
 	WRITE_ONCE(stop, 0);
-	if (clock_gettime(CLOCK_MONOTONIC, &start) < 0)
-		return;
 
 	err = pthread_create(&srv_thread, NULL, server, (void *)(long)lfd);
 	if (CHECK(err != 0, "pthread_create", "err:%d errno:%d\n", err, errno))
@@ -406,16 +401,9 @@ static void send_data(int lfd, int fd, char *msg)
 		bytes += nr_recv;
 	}
 
-	if (clock_gettime(CLOCK_MONOTONIC, &end) < 0)
-		return;
-
-	delta_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1000000;
-
 	CHECK(bytes != total_bytes, "recv", "%zd != %u nr_recv:%zd errno:%d\n",
 	      bytes, total_bytes, nr_recv, errno);
 
-	printf("%s: %u ms\n", msg, delta_ms);
-
 	WRITE_ONCE(stop, 1);
 
 	pthread_join(srv_thread, &thread_ret);
@@ -459,7 +447,9 @@ static int has_bytes_sent(char *addr)
 
 static void send_data_and_verify(char *sched, char *addr1, char *addr2)
 {
+	struct timespec start, end;
 	int server_fd, client_fd;
+	unsigned int delta_ms;
 
 	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
 	if (CHECK(server_fd < 0, sched, "start_mptcp_server: %d\n", errno))
@@ -469,8 +459,17 @@ static void send_data_and_verify(char *sched, char *addr1, char *addr2)
 	if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n", errno))
 		goto close_server;
 
+	if (clock_gettime(CLOCK_MONOTONIC, &start) < 0)
+		goto close_server;
+
 	send_data(server_fd, client_fd, sched);
 
+	if (clock_gettime(CLOCK_MONOTONIC, &end) < 0)
+		goto close_server;
+
+	delta_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1000000;
+	printf("%s: %u ms\n", sched, delta_ms);
+
 	if (!strcmp(addr1, "WITH_DATA"))
 		CHECK(has_bytes_sent(ADDR_1), sched, "should have bytes_sent on addr1\n");
 	else if (!strcmp(addr1, "WITHOUT_DATA"))
-- 
2.40.1


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

* [PATCH mptcp-next v7 4/9] Squash to "selftests/bpf: Add bpf scheduler test" 3 MPTCP_SCHED_TEST
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (2 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 3/9] Squash to "selftests/bpf: Add bpf scheduler test" 2 time Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 5/9] Squash to "selftests/bpf: Add bpf_first scheduler & test" Geliang Tang
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

Please append this into commit log:

'''
This patch defines MPTCP_SCHED_TEST macro, a template for all scheduler
tests. Every scheduler is identified by argument name, and use sysctl
to set net.mptcp.scheduler as "bpf_name" to use this sched. Add two
veth net devices to simulate the multiple addresses case. Use 'ip mptcp
endpoint' command to add the new endpoint ADDR2 to PM netlink. Arguments
addr1/add2 means whether the data has been sent on the first/second subflow
or not. Send data and check bytes_sent of 'ss' output after it using
send_data_and_verify().
'''

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index aa95bb41d5ea..93819f0e76d7 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -498,6 +498,36 @@ static void test_default(void)
 	cleanup_netns(nstoken);
 }
 
+#define MPTCP_SCHED_TEST(sched, addr1, addr2)			\
+static void test_##sched(void)					\
+{								\
+	struct mptcp_bpf_##sched *skel;				\
+	struct nstoken *nstoken;				\
+	struct bpf_link *link;					\
+	struct bpf_map *map;					\
+								\
+	skel = mptcp_bpf_##sched##__open_and_load();		\
+	if (!ASSERT_OK_PTR(skel, "open_and_load:" #sched))	\
+		return;						\
+								\
+	map = bpf_object__find_map_by_name(skel->obj, #sched);	\
+	link = bpf_map__attach_struct_ops(map);			\
+	if (!ASSERT_OK_PTR(link, "attach_struct_ops:" #sched))	\
+		goto skel_destroy;				\
+								\
+	nstoken = sched_init("subflow", "bpf_" #sched);		\
+	if (!ASSERT_OK_PTR(nstoken, "sched_init:" #sched))	\
+		goto link_destroy;				\
+								\
+	send_data_and_verify(#sched, #addr1, #addr2);		\
+								\
+	cleanup_netns(nstoken);					\
+link_destroy:							\
+	bpf_link__destroy(link);				\
+skel_destroy:							\
+	mptcp_bpf_##sched##__destroy(skel);			\
+}
+
 static void test_first(void)
 {
 	struct mptcp_bpf_first *first_skel;
-- 
2.40.1


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

* [PATCH mptcp-next v7 5/9] Squash to "selftests/bpf: Add bpf_first scheduler & test"
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (3 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 4/9] Squash to "selftests/bpf: Add bpf scheduler test" 3 MPTCP_SCHED_TEST Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 6/9] Squash to "selftests/bpf: Add bpf_bkup " Geliang Tang
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

After squashing into this change, the patch "selftests/bpf: Add bpf_first
test" can be merged into the patch "selftests/bpf: Add bpf_first scheduler"
appending the following lines into commit log:

'''
Using MPTCP_SCHED_TEST macro to add a new test for this bpf_first
scheduler, the arguments "1 0" means data has been only sent on the
first subflow ADDR1. Run this test by RUN_MPTCP_TEST macro.
'''

And update the subject to "selftests/bpf: Add bpf_first scheduler & test".

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 38 +------------------
 .../selftests/bpf/progs/mptcp_bpf_first.c     |  1 +
 2 files changed, 3 insertions(+), 36 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 93819f0e76d7..9d01e4af790f 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -528,40 +528,7 @@ skel_destroy:							\
 	mptcp_bpf_##sched##__destroy(skel);			\
 }
 
-static void test_first(void)
-{
-	struct mptcp_bpf_first *first_skel;
-	int server_fd, client_fd;
-	struct nstoken *nstoken;
-	struct bpf_link *link;
-
-	first_skel = mptcp_bpf_first__open_and_load();
-	if (!ASSERT_OK_PTR(first_skel, "bpf_first__open_and_load"))
-		return;
-
-	link = bpf_map__attach_struct_ops(first_skel->maps.first);
-	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
-		mptcp_bpf_first__destroy(first_skel);
-		return;
-	}
-
-	nstoken = sched_init("subflow", "bpf_first");
-	if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_first"))
-		goto fail;
-	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
-	client_fd = connect_to_fd(server_fd, 0);
-
-	send_data(server_fd, client_fd, "bpf_first");
-	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
-	ASSERT_GT(has_bytes_sent(ADDR_2), 0, "has_bytes_sent addr_2");
-
-	close(client_fd);
-	close(server_fd);
-fail:
-	cleanup_netns(nstoken);
-	bpf_link__destroy(link);
-	mptcp_bpf_first__destroy(first_skel);
-}
+MPTCP_SCHED_TEST(first, WITH_DATA, WITHOUT_DATA);
 
 static void test_bkup(void)
 {
@@ -714,8 +681,7 @@ void test_mptcp(void)
 	RUN_MPTCP_TEST(base);
 	RUN_MPTCP_TEST(mptcpify);
 	RUN_MPTCP_TEST(default);
-	if (test__start_subtest("first"))
-		test_first();
+	RUN_MPTCP_TEST(first);
 	if (test__start_subtest("bkup"))
 		test_bkup();
 	if (test__start_subtest("rr"))
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
index 23a3e8e69e8f..2d067b25d60b 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_first.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /* Copyright (c) 2022, SUSE. */
+/* Copyright (c) 2024, Kylin Software */
 
 #include <linux/bpf.h>
 #include "bpf_tcp_helpers.h"
-- 
2.40.1


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

* [PATCH mptcp-next v7 6/9] Squash to "selftests/bpf: Add bpf_bkup scheduler & test"
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (4 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 5/9] Squash to "selftests/bpf: Add bpf_first scheduler & test" Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 7/9] Squash to "selftests/bpf: Add bpf_rr " Geliang Tang
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

After squashing into this change, the patch "selftests/bpf: Add bpf_bkup
test" can be merged into the patch "selftests/bpf: Add bpf_bkup scheduler"
appending the following lines into commit log:

'''
Using MPTCP_SCHED_TEST macro to add a new test for this bpf_bkup
scheduler, the arguments "1 0" means data has been only sent on the
first subflow ADDR1. Run this test by RUN_MPTCP_TEST macro.
'''

And update the subject to "selftests/bpf: Add bpf_bkup scheduler & test".

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 39 +------------------
 .../selftests/bpf/progs/mptcp_bpf_bkup.c      |  1 +
 2 files changed, 3 insertions(+), 37 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 9d01e4af790f..f1a9faac3731 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -529,41 +529,7 @@ skel_destroy:							\
 }
 
 MPTCP_SCHED_TEST(first, WITH_DATA, WITHOUT_DATA);
-
-static void test_bkup(void)
-{
-	struct mptcp_bpf_bkup *bkup_skel;
-	int server_fd, client_fd;
-	struct nstoken *nstoken;
-	struct bpf_link *link;
-
-	bkup_skel = mptcp_bpf_bkup__open_and_load();
-	if (!ASSERT_OK_PTR(bkup_skel, "bpf_bkup__open_and_load"))
-		return;
-
-	link = bpf_map__attach_struct_ops(bkup_skel->maps.bkup);
-	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
-		mptcp_bpf_bkup__destroy(bkup_skel);
-		return;
-	}
-
-	nstoken = sched_init("subflow backup", "bpf_bkup");
-	if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_bkup"))
-		goto fail;
-	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
-	client_fd = connect_to_fd(server_fd, 0);
-
-	send_data(server_fd, client_fd, "bpf_bkup");
-	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
-	ASSERT_GT(has_bytes_sent(ADDR_2), 0, "has_bytes_sent addr_2");
-
-	close(client_fd);
-	close(server_fd);
-fail:
-	cleanup_netns(nstoken);
-	bpf_link__destroy(link);
-	mptcp_bpf_bkup__destroy(bkup_skel);
-}
+MPTCP_SCHED_TEST(bkup, WITH_DATA, WITHOUT_DATA);
 
 static void test_rr(void)
 {
@@ -682,8 +648,7 @@ void test_mptcp(void)
 	RUN_MPTCP_TEST(mptcpify);
 	RUN_MPTCP_TEST(default);
 	RUN_MPTCP_TEST(first);
-	if (test__start_subtest("bkup"))
-		test_bkup();
+	RUN_MPTCP_TEST(bkup);
 	if (test__start_subtest("rr"))
 		test_rr();
 	if (test__start_subtest("red"))
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
index bfd4644dd592..486407a135c9 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_bkup.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /* Copyright (c) 2022, SUSE. */
+/* Copyright (c) 2024, Kylin Software */
 
 #include <linux/bpf.h>
 #include "bpf_tcp_helpers.h"
-- 
2.40.1


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

* [PATCH mptcp-next v7 7/9] Squash to "selftests/bpf: Add bpf_rr scheduler & test"
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (5 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 6/9] Squash to "selftests/bpf: Add bpf_bkup " Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 8/9] Squash to "selftests/bpf: Add bpf_red " Geliang Tang
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

After squashing into this change, the patch "selftests/bpf: Add bpf_rr
test" can be merged into the patch "selftests/bpf: Add bpf_rr scheduler"
appending the following lines into commit log:

'''
Using MPTCP_SCHED_TEST macro to add a new test for this bpf_rr
scheduler, the arguments "1 1" means data has been sent on both
net devices. Run this test by RUN_MPTCP_TEST macro.
'''

And update the subject to "selftests/bpf: Add bpf_rr scheduler & test".

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 39 +------------------
 .../selftests/bpf/progs/mptcp_bpf_rr.c        |  1 +
 2 files changed, 3 insertions(+), 37 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index f1a9faac3731..d7c6a0bec183 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -530,41 +530,7 @@ skel_destroy:							\
 
 MPTCP_SCHED_TEST(first, WITH_DATA, WITHOUT_DATA);
 MPTCP_SCHED_TEST(bkup, WITH_DATA, WITHOUT_DATA);
-
-static void test_rr(void)
-{
-	struct mptcp_bpf_rr *rr_skel;
-	int server_fd, client_fd;
-	struct nstoken *nstoken;
-	struct bpf_link *link;
-
-	rr_skel = mptcp_bpf_rr__open_and_load();
-	if (!ASSERT_OK_PTR(rr_skel, "bpf_rr__open_and_load"))
-		return;
-
-	link = bpf_map__attach_struct_ops(rr_skel->maps.rr);
-	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
-		mptcp_bpf_rr__destroy(rr_skel);
-		return;
-	}
-
-	nstoken = sched_init("subflow", "bpf_rr");
-	if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_rr"))
-		goto fail;
-	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
-	client_fd = connect_to_fd(server_fd, 0);
-
-	send_data(server_fd, client_fd, "bpf_rr");
-	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
-	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-
-	close(client_fd);
-	close(server_fd);
-fail:
-	cleanup_netns(nstoken);
-	bpf_link__destroy(link);
-	mptcp_bpf_rr__destroy(rr_skel);
-}
+MPTCP_SCHED_TEST(rr, WITH_DATA, WITH_DATA);
 
 static void test_red(void)
 {
@@ -649,8 +615,7 @@ void test_mptcp(void)
 	RUN_MPTCP_TEST(default);
 	RUN_MPTCP_TEST(first);
 	RUN_MPTCP_TEST(bkup);
-	if (test__start_subtest("rr"))
-		test_rr();
+	RUN_MPTCP_TEST(rr);
 	if (test__start_subtest("red"))
 		test_red();
 	if (test__start_subtest("burst"))
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
index 39b7e1cfbbd5..05621467fe48 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_rr.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /* Copyright (c) 2022, SUSE. */
+/* Copyright (c) 2024, Kylin Software */
 
 #include <linux/bpf.h>
 #include "bpf_tcp_helpers.h"
-- 
2.40.1


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

* [PATCH mptcp-next v7 8/9] Squash to "selftests/bpf: Add bpf_red scheduler & test"
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (6 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 7/9] Squash to "selftests/bpf: Add bpf_rr " Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:01 ` [PATCH mptcp-next v7 9/9] Squash to "selftests/bpf: Add bpf_burst " Geliang Tang
  2024-04-08  3:50 ` [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests MPTCP CI
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

After squashing into this change, the patch "selftests/bpf: Add bpf_red
test" can be merged into the patch "selftests/bpf: Add bpf_red scheduler"
appending the following lines into commit log:

'''
Using MPTCP_SCHED_TEST macro to add a new test for this bpf_red
scheduler, the arguments "1 1" means data has been sent on both
net devices. Run this test by RUN_MPTCP_TEST macro.
'''

And update the subject to "selftests/bpf: Add bpf_red scheduler & test".

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 39 +------------------
 .../selftests/bpf/progs/mptcp_bpf_red.c       |  1 +
 2 files changed, 3 insertions(+), 37 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index d7c6a0bec183..9f5c2297027c 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -531,41 +531,7 @@ skel_destroy:							\
 MPTCP_SCHED_TEST(first, WITH_DATA, WITHOUT_DATA);
 MPTCP_SCHED_TEST(bkup, WITH_DATA, WITHOUT_DATA);
 MPTCP_SCHED_TEST(rr, WITH_DATA, WITH_DATA);
-
-static void test_red(void)
-{
-	struct mptcp_bpf_red *red_skel;
-	int server_fd, client_fd;
-	struct nstoken *nstoken;
-	struct bpf_link *link;
-
-	red_skel = mptcp_bpf_red__open_and_load();
-	if (!ASSERT_OK_PTR(red_skel, "bpf_red__open_and_load"))
-		return;
-
-	link = bpf_map__attach_struct_ops(red_skel->maps.red);
-	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
-		mptcp_bpf_red__destroy(red_skel);
-		return;
-	}
-
-	nstoken = sched_init("subflow", "bpf_red");
-	if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_red"))
-		goto fail;
-	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
-	client_fd = connect_to_fd(server_fd, 0);
-
-	send_data(server_fd, client_fd, "bpf_red");
-	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
-	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-
-	close(client_fd);
-	close(server_fd);
-fail:
-	cleanup_netns(nstoken);
-	bpf_link__destroy(link);
-	mptcp_bpf_red__destroy(red_skel);
-}
+MPTCP_SCHED_TEST(red, WITH_DATA, WITH_DATA);
 
 static void test_burst(void)
 {
@@ -616,8 +582,7 @@ void test_mptcp(void)
 	RUN_MPTCP_TEST(first);
 	RUN_MPTCP_TEST(bkup);
 	RUN_MPTCP_TEST(rr);
-	if (test__start_subtest("red"))
-		test_red();
+	RUN_MPTCP_TEST(red);
 	if (test__start_subtest("burst"))
 		test_burst();
 }
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
index a3f3e5ca5278..62cba8f2d936 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_red.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /* Copyright (c) 2022, SUSE. */
+/* Copyright (c) 2024, Kylin Software */
 
 #include <linux/bpf.h>
 #include "bpf_tcp_helpers.h"
-- 
2.40.1


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

* [PATCH mptcp-next v7 9/9] Squash to "selftests/bpf: Add bpf_burst scheduler & test"
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (7 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 8/9] Squash to "selftests/bpf: Add bpf_red " Geliang Tang
@ 2024-04-08  3:01 ` Geliang Tang
  2024-04-08  3:50 ` [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests MPTCP CI
  9 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-08  3:01 UTC (permalink / raw)
  To: mptcp; +Cc: Geliang Tang

From: Geliang Tang <tanggeliang@kylinos.cn>

After squashing into this change, the patch "selftests/bpf: Add bpf_burst
test" can be merged into the patch "selftests/bpf: Add bpf_burst scheduler"
appending the following lines into commit log:

'''
Using MPTCP_SCHED_TEST macro to add a new test for this bpf_burst
scheduler, the arguments "1 1" means data has been sent on both net
devices. Run this test by RUN_MPTCP_TEST macro.
'''

And update the subject to "selftests/bpf: Add bpf_burst scheduler & test".

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 .../testing/selftests/bpf/prog_tests/mptcp.c  | 39 +------------------
 .../selftests/bpf/progs/mptcp_bpf_burst.c     |  1 +
 2 files changed, 3 insertions(+), 37 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 9f5c2297027c..e8e4b8486511 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -532,41 +532,7 @@ MPTCP_SCHED_TEST(first, WITH_DATA, WITHOUT_DATA);
 MPTCP_SCHED_TEST(bkup, WITH_DATA, WITHOUT_DATA);
 MPTCP_SCHED_TEST(rr, WITH_DATA, WITH_DATA);
 MPTCP_SCHED_TEST(red, WITH_DATA, WITH_DATA);
-
-static void test_burst(void)
-{
-	struct mptcp_bpf_burst *burst_skel;
-	int server_fd, client_fd;
-	struct nstoken *nstoken;
-	struct bpf_link *link;
-
-	burst_skel = mptcp_bpf_burst__open_and_load();
-	if (!ASSERT_OK_PTR(burst_skel, "bpf_burst__open_and_load"))
-		return;
-
-	link = bpf_map__attach_struct_ops(burst_skel->maps.burst);
-	if (!ASSERT_OK_PTR(link, "bpf_map__attach_struct_ops")) {
-		mptcp_bpf_burst__destroy(burst_skel);
-		return;
-	}
-
-	nstoken = sched_init("subflow", "bpf_burst");
-	if (!ASSERT_OK_PTR(nstoken, "sched_init:bpf_burst"))
-		goto fail;
-	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
-	client_fd = connect_to_fd(server_fd, 0);
-
-	send_data(server_fd, client_fd, "bpf_burst");
-	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
-	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
-
-	close(client_fd);
-	close(server_fd);
-fail:
-	cleanup_netns(nstoken);
-	bpf_link__destroy(link);
-	mptcp_bpf_burst__destroy(burst_skel);
-}
+MPTCP_SCHED_TEST(burst, WITH_DATA, WITH_DATA);
 
 #define RUN_MPTCP_TEST(suffix)					\
 do {								\
@@ -583,6 +549,5 @@ void test_mptcp(void)
 	RUN_MPTCP_TEST(bkup);
 	RUN_MPTCP_TEST(rr);
 	RUN_MPTCP_TEST(red);
-	if (test__start_subtest("burst"))
-		test_burst();
+	RUN_MPTCP_TEST(burst);
 }
diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
index b3c811564866..6b79267562f1 100644
--- a/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
+++ b/tools/testing/selftests/bpf/progs/mptcp_bpf_burst.c
@@ -1,5 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /* Copyright (c) 2023, SUSE. */
+/* Copyright (c) 2024, Kylin Software */
 
 #include <linux/bpf.h>
 #include <limits.h>
-- 
2.40.1


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

* Re: [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests
  2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
                   ` (8 preceding siblings ...)
  2024-04-08  3:01 ` [PATCH mptcp-next v7 9/9] Squash to "selftests/bpf: Add bpf_burst " Geliang Tang
@ 2024-04-08  3:50 ` MPTCP CI
  9 siblings, 0 replies; 15+ messages in thread
From: MPTCP CI @ 2024-04-08  3:50 UTC (permalink / raw)
  To: Geliang Tang; +Cc: mptcp

Hi Geliang,

Thank you for your modifications, that's great!

Our CI did some validations and here is its report:

- KVM Validation: normal: Success! ✅
- KVM Validation: debug: Unstable: 1 failed test(s): packetdrill_dss 🔴
- KVM Validation: btf (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/8594046045

Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/b4cc30b99d13
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=842249


If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:

    $ cd [kernel source code]
    $ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
        --pull always mptcp/mptcp-upstream-virtme-docker:latest \
        auto-normal

For more details:

    https://github.com/multipath-tcp/mptcp-upstream-virtme-docker


Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)

Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)

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

* Re: [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify
  2024-04-08  3:01 ` [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify Geliang Tang
@ 2024-04-08 19:58   ` Matthieu Baerts
  2024-04-09 12:42     ` Geliang Tang
  0 siblings, 1 reply; 15+ messages in thread
From: Matthieu Baerts @ 2024-04-08 19:58 UTC (permalink / raw)
  To: Geliang Tang, mptcp; +Cc: Geliang Tang

Hi Geliang,

On 08/04/2024 05:01, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
> 
> Add send_data_and_verify helper to avoid duplicated code.
> 
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
>  .../testing/selftests/bpf/prog_tests/mptcp.c  | 40 ++++++++++++++-----
>  1 file changed, 30 insertions(+), 10 deletions(-)
> 
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index c29c81239603..5080e680fbe0 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -457,23 +457,44 @@ static int has_bytes_sent(char *addr)
>  	return system(cmd);
>  }
>  
> -static void test_default(void)
> +static void send_data_and_verify(char *sched, char *addr1, char *addr2)
>  {
>  	int server_fd, client_fd;
> -	struct nstoken *nstoken;
>  
> -	nstoken = sched_init("subflow", "default");
> -	if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
> -		goto fail;
>  	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
> +	if (CHECK(server_fd < 0, sched, "start_mptcp_server: %d\n", errno))
> +		return;
> +
>  	client_fd = connect_to_fd(server_fd, 0);
> +	if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n", errno))
> +		goto close_server;
>  
> -	send_data(server_fd, client_fd, "default");
> -	ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
> -	ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
> +	send_data(server_fd, client_fd, sched);
> +
> +	if (!strcmp(addr1, "WITH_DATA"))

Out of curiosity, why did you use strings? Why not using booleans? (or a
bitmask)

  #define WITH_DATA true
  static void send_data_and_verify(char *sched, bool addr1_with_data,
                                   bool addr1_with_data)

  send_data_and_verify("...", WITH_DATA, !WITH_DATA);


I guess that's fine for the tests, just strange in C :)

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.


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

* Re: [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify
  2024-04-08 19:58   ` Matthieu Baerts
@ 2024-04-09 12:42     ` Geliang Tang
  2024-04-09 15:20       ` Matthieu Baerts
  0 siblings, 1 reply; 15+ messages in thread
From: Geliang Tang @ 2024-04-09 12:42 UTC (permalink / raw)
  To: Matthieu Baerts, mptcp

Hi Matt,

On Mon, 2024-04-08 at 21:58 +0200, Matthieu Baerts wrote:
> > Hi Geliang,
> > 
> > On 08/04/2024 05:01, Geliang Tang wrote:
> > > > From: Geliang Tang <tanggeliang@kylinos.cn>
> > > > 
> > > > Add send_data_and_verify helper to avoid duplicated code.
> > > > 
> > > > Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> > > > ---
> > > >  .../testing/selftests/bpf/prog_tests/mptcp.c  | 40
> > > > ++++++++++++++-----
> > > >  1 file changed, 30 insertions(+), 10 deletions(-)
> > > > 
> > > > diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > index c29c81239603..5080e680fbe0 100644
> > > > --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > @@ -457,23 +457,44 @@ static int has_bytes_sent(char *addr)
> > > >   return system(cmd);
> > > >  }
> > > >  
> > > > -static void test_default(void)
> > > > +static void send_data_and_verify(char *sched, char *addr1,
> > > > char
> > > > *addr2)
> > > >  {
> > > >   int server_fd, client_fd;
> > > > - struct nstoken *nstoken;
> > > >  
> > > > - nstoken = sched_init("subflow", "default");
> > > > - if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
> > > > - goto fail;
> > > >   server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
> > > > + if (CHECK(server_fd < 0, sched, "start_mptcp_server: %d\n",
> > > > errno))
> > > > + return;
> > > > +
> > > >   client_fd = connect_to_fd(server_fd, 0);
> > > > + if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n",
> > > > errno))
> > > > + goto close_server;
> > > >  
> > > > - send_data(server_fd, client_fd, "default");
> > > > - ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
> > > > - ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
> > > > + send_data(server_fd, client_fd, sched);
> > > > +
> > > > + if (!strcmp(addr1, "WITH_DATA"))
> > 
> > Out of curiosity, why did you use strings? Why not using booleans?
> > (or a
> > bitmask)
> > 

Since arguments addr1 and addr2 of macro MPTCP_SCHED_TEST are strings:

#define MPTCP_SCHED_TEST(sched, addr1, addr2)                   \
static void test_##sched(void)                                  \
{                                                               \
...
        send_data_and_verify(#sched, #addr1, #addr2);           \
...

It's sample to use string arguments for send_data_and_verify too.

Thanks,
-Geliang

> >   #define WITH_DATA true
> >   static void send_data_and_verify(char *sched, bool
> > addr1_with_data,
> >                                    bool addr1_with_data)
> > 
> >   send_data_and_verify("...", WITH_DATA, !WITH_DATA);
> > 
> > 
> > I guess that's fine for the tests, just strange in C :)
> > 
> > Cheers,
> > Matt


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

* Re: [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify
  2024-04-09 12:42     ` Geliang Tang
@ 2024-04-09 15:20       ` Matthieu Baerts
  2024-04-10  1:59         ` Geliang Tang
  0 siblings, 1 reply; 15+ messages in thread
From: Matthieu Baerts @ 2024-04-09 15:20 UTC (permalink / raw)
  To: Geliang Tang, mptcp

Hi Geliang,

On 09/04/2024 14:42, Geliang Tang wrote:
> Hi Matt,
> 
> On Mon, 2024-04-08 at 21:58 +0200, Matthieu Baerts wrote:
>>> Hi Geliang,
>>>
>>> On 08/04/2024 05:01, Geliang Tang wrote:
>>>>> From: Geliang Tang <tanggeliang@kylinos.cn>
>>>>>
>>>>> Add send_data_and_verify helper to avoid duplicated code.
>>>>>
>>>>> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
>>>>> ---
>>>>>  .../testing/selftests/bpf/prog_tests/mptcp.c  | 40
>>>>> ++++++++++++++-----
>>>>>  1 file changed, 30 insertions(+), 10 deletions(-)
>>>>>
>>>>> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c
>>>>> b/tools/testing/selftests/bpf/prog_tests/mptcp.c
>>>>> index c29c81239603..5080e680fbe0 100644
>>>>> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
>>>>> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
>>>>> @@ -457,23 +457,44 @@ static int has_bytes_sent(char *addr)
>>>>>   return system(cmd);
>>>>>  }
>>>>>  
>>>>> -static void test_default(void)
>>>>> +static void send_data_and_verify(char *sched, char *addr1,
>>>>> char
>>>>> *addr2)
>>>>>  {
>>>>>   int server_fd, client_fd;
>>>>> - struct nstoken *nstoken;
>>>>>  
>>>>> - nstoken = sched_init("subflow", "default");
>>>>> - if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
>>>>> - goto fail;
>>>>>   server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
>>>>> + if (CHECK(server_fd < 0, sched, "start_mptcp_server: %d\n",
>>>>> errno))
>>>>> + return;
>>>>> +
>>>>>   client_fd = connect_to_fd(server_fd, 0);
>>>>> + if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n",
>>>>> errno))
>>>>> + goto close_server;
>>>>>  
>>>>> - send_data(server_fd, client_fd, "default");
>>>>> - ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr_1");
>>>>> - ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr_2");
>>>>> + send_data(server_fd, client_fd, sched);
>>>>> +
>>>>> + if (!strcmp(addr1, "WITH_DATA"))
>>>
>>> Out of curiosity, why did you use strings? Why not using booleans?
>>> (or a
>>> bitmask)
>>>
> 
> Since arguments addr1 and addr2 of macro MPTCP_SCHED_TEST are strings:

They are strings because you asked the preprocessor to convert them as
string ...

> #define MPTCP_SCHED_TEST(sched, addr1, addr2)                   \
> static void test_##sched(void)                                  \
> {                                                               \
> ...
>         send_data_and_verify(#sched, #addr1, #addr2);           \

... here, by using "#addr1" and "#addr2".

Why not simply removing the "#" not to do any conversion?

e.g.

================================= 8< =================================
#include <stdio.h>
#include <stdbool.h>

static void send_data_and_verify(char *sched, bool addr1, bool addr2)
{
	printf("%s: %d %d\n", sched, addr1, addr2);
}

#define MPTCP_SCHED_TEST(sched, addr1, addr2)		\
static void test_##sched(void)				\
{							\
	send_data_and_verify(#sched, addr1, addr2);	\
}

#define WITH_DATA true
MPTCP_SCHED_TEST(first, WITH_DATA, !WITH_DATA);

int main()
{
	test_first();
}
================================= 8< =================================

This prints 'first: 1 0', what you want, no?

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.


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

* Re: [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify
  2024-04-09 15:20       ` Matthieu Baerts
@ 2024-04-10  1:59         ` Geliang Tang
  0 siblings, 0 replies; 15+ messages in thread
From: Geliang Tang @ 2024-04-10  1:59 UTC (permalink / raw)
  To: Matthieu Baerts, mptcp

Hi Matt,

On Tue, 2024-04-09 at 17:20 +0200, Matthieu Baerts wrote:
> Hi Geliang,
> 
> On 09/04/2024 14:42, Geliang Tang wrote:
> > Hi Matt,
> > 
> > On Mon, 2024-04-08 at 21:58 +0200, Matthieu Baerts wrote:
> > > > Hi Geliang,
> > > > 
> > > > On 08/04/2024 05:01, Geliang Tang wrote:
> > > > > > From: Geliang Tang <tanggeliang@kylinos.cn>
> > > > > > 
> > > > > > Add send_data_and_verify helper to avoid duplicated code.
> > > > > > 
> > > > > > Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> > > > > > ---
> > > > > >  .../testing/selftests/bpf/prog_tests/mptcp.c  | 40
> > > > > > ++++++++++++++-----
> > > > > >  1 file changed, 30 insertions(+), 10 deletions(-)
> > > > > > 
> > > > > > diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > > > b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > > > index c29c81239603..5080e680fbe0 100644
> > > > > > --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > > > +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> > > > > > @@ -457,23 +457,44 @@ static int has_bytes_sent(char *addr)
> > > > > >   return system(cmd);
> > > > > >  }
> > > > > >  
> > > > > > -static void test_default(void)
> > > > > > +static void send_data_and_verify(char *sched, char *addr1,
> > > > > > char
> > > > > > *addr2)
> > > > > >  {
> > > > > >   int server_fd, client_fd;
> > > > > > - struct nstoken *nstoken;
> > > > > >  
> > > > > > - nstoken = sched_init("subflow", "default");
> > > > > > - if (!ASSERT_OK_PTR(nstoken, "sched_init:default"))
> > > > > > - goto fail;
> > > > > >   server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1,
> > > > > > 0);
> > > > > > + if (CHECK(server_fd < 0, sched, "start_mptcp_server:
> > > > > > %d\n",
> > > > > > errno))
> > > > > > + return;
> > > > > > +
> > > > > >   client_fd = connect_to_fd(server_fd, 0);
> > > > > > + if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n",
> > > > > > errno))
> > > > > > + goto close_server;
> > > > > >  
> > > > > > - send_data(server_fd, client_fd, "default");
> > > > > > - ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent
> > > > > > addr_1");
> > > > > > - ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent
> > > > > > addr_2");
> > > > > > + send_data(server_fd, client_fd, sched);
> > > > > > +
> > > > > > + if (!strcmp(addr1, "WITH_DATA"))
> > > > 
> > > > Out of curiosity, why did you use strings? Why not using
> > > > booleans?
> > > > (or a
> > > > bitmask)
> > > > 
> > 
> > Since arguments addr1 and addr2 of macro MPTCP_SCHED_TEST are
> > strings:
> 
> They are strings because you asked the preprocessor to convert them
> as
> string ...
> 
> > #define MPTCP_SCHED_TEST(sched, addr1, addr2)                   \
> > static void test_##sched(void)                                  \
> > {                                                               \
> > ...
> >         send_data_and_verify(#sched, #addr1, #addr2);           \
> 
> ... here, by using "#addr1" and "#addr2".
> 
> Why not simply removing the "#" not to do any conversion?
> 
> e.g.
> 
> ================================= 8<
> =================================
> #include <stdio.h>
> #include <stdbool.h>
> 
> static void send_data_and_verify(char *sched, bool addr1, bool addr2)
> {
> 	printf("%s: %d %d\n", sched, addr1, addr2);
> }
> 
> #define MPTCP_SCHED_TEST(sched, addr1, addr2)		\
> static void test_##sched(void)				\
> {							\
> 	send_data_and_verify(#sched, addr1, addr2);	\
> }
> 
> #define WITH_DATA true
> MPTCP_SCHED_TEST(first, WITH_DATA, !WITH_DATA);
> 
> int main()
> {
> 	test_first();
> }
> ================================= 8<
> =================================
> 
> This prints 'first: 1 0', what you want, no?

Thank you for providing such a detailed example. I have updated it to
v8.

-Geliang

> 
> Cheers,
> Matt


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

end of thread, other threads:[~2024-04-10  1:59 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-08  3:01 [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 1/9] selftests/bpf: Add RUN_MPTCP_TEST macro Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 2/9] Squash to "selftests/bpf: Add bpf scheduler test" 1 verify Geliang Tang
2024-04-08 19:58   ` Matthieu Baerts
2024-04-09 12:42     ` Geliang Tang
2024-04-09 15:20       ` Matthieu Baerts
2024-04-10  1:59         ` Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 3/9] Squash to "selftests/bpf: Add bpf scheduler test" 2 time Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 4/9] Squash to "selftests/bpf: Add bpf scheduler test" 3 MPTCP_SCHED_TEST Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 5/9] Squash to "selftests/bpf: Add bpf_first scheduler & test" Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 6/9] Squash to "selftests/bpf: Add bpf_bkup " Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 7/9] Squash to "selftests/bpf: Add bpf_rr " Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 8/9] Squash to "selftests/bpf: Add bpf_red " Geliang Tang
2024-04-08  3:01 ` [PATCH mptcp-next v7 9/9] Squash to "selftests/bpf: Add bpf_burst " Geliang Tang
2024-04-08  3:50 ` [PATCH mptcp-next v7 0/9] refactor mptcp bpf tests MPTCP CI

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.