This patch adds the bpf_first scheduler test: test_first(). Use sysctl to
set net.mptcp.scheduler 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 ADDR_2 to PM netlink. Send data and check bytes_sent
of 'ss' output after it to make sure the data has been only sent on the
first subflow ADDR_1.
Note: This commit should be merged behind the commit "selftests/bpf: Add
bpf_first scheduler":
selftests/bpf: add two mptcp netns helpers
selftests/bpf: Add bpf scheduler test
selftests/bpf: Add bpf_first scheduler
selftests/bpf: Add bpf_first test
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 38 +++++++++++++++++++
1 file changed, 38 insertions(+)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 39d95c6a18e3..21b7ac6d72fd 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -7,6 +7,7 @@
#include "cgroup_helpers.h"
#include "network_helpers.h"
#include "mptcp_sock.skel.h"
+#include "mptcp_bpf_first.skel.h"
#include "mptcp_bpf_bkup.skel.h"
#include "mptcp_bpf_rr.skel.h"
#include "mptcp_bpf_red.skel.h"
@@ -347,6 +348,41 @@ static void test_default(void)
cleanup_netns(nstoken);
}
+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, 0, 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);
+}
+
static void test_bkup(void)
{
struct mptcp_bpf_bkup *bkup_skel;
@@ -458,6 +494,8 @@ void test_mptcp(void)
test_base();
if (test__start_subtest("default"))
test_default();
+ if (test__start_subtest("first"))
+ test_first();
if (test__start_subtest("bkup"))
test_bkup();
if (test__start_subtest("rr"))
--
2.35.3