From: Geliang Tang <tanggeliang@kylinos.cn>
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 856e06ad3246..d6653ce1fc36 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -496,6 +496,36 @@ static void test_default(void)
cleanup_netns(nstoken);
}
+#define MPTCP_SCHED_TEST(name, addr1, addr2) \
+static void test_##name(void) \
+{ \
+ struct mptcp_bpf_##name *skel; \
+ struct nstoken *nstoken; \
+ struct bpf_link *link; \
+ struct bpf_map *map; \
+ \
+ skel = mptcp_bpf_##name##__open_and_load(); \
+ if (!ASSERT_OK_PTR(skel, "open_and_load:" #name)) \
+ return; \
+ \
+ map = bpf_object__find_map_by_name(skel->obj, #name); \
+ link = bpf_map__attach_struct_ops(map); \
+ if (!ASSERT_OK_PTR(link, "attach_struct_ops:" #name)) \
+ goto fail; \
+ \
+ nstoken = sched_init("subflow", "bpf_" #name); \
+ if (!ASSERT_OK_PTR(nstoken, "sched_init:" #name)) \
+ goto out; \
+ \
+ send_data_and_verify(#name, atoi(#addr1), atoi(#addr2));\
+ \
+ cleanup_netns(nstoken); \
+out: \
+ bpf_link__destroy(link); \
+fail: \
+ mptcp_bpf_##name##__destroy(skel); \
+}
+
static void test_first(void)
{
struct mptcp_bpf_first *first_skel;
--
2.40.1