:p
atchew
Login
Run mptcp sched tests in a dedicated netns. Geliang Tang (4): Squash to "selftests/bpf: Add bpf_first test" Squash to "selftests/bpf: Add bpf_bkup test" Squash to "selftests/bpf: Add bpf_rr test" Squash to "selftests/bpf: Add bpf_red test" .../testing/selftests/bpf/prog_tests/mptcp.c | 88 ++++++++++++++----- 1 file changed, 67 insertions(+), 21 deletions(-) -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- .../testing/selftests/bpf/prog_tests/mptcp.c | 61 ++++++++++++++----- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ static void send_data(int lfd, int fd) #define ADDR_1 "10.0.1.1" #define ADDR_2 "10.0.1.2" -static void sched_init(char *flags, char *sched) +static struct nstoken *sched_init(char *flags, char *sched) { + struct nstoken *nstoken = NULL; char cmd[64]; - system("ip link add veth1 type veth peer name veth2"); - snprintf(cmd, sizeof(cmd), "ip addr add %s/24 dev veth1", ADDR_1); + SYS(fail, "ip netns add %s", NS_TEST); + SYS(fail, "ip -net %s link set dev lo up", NS_TEST); + + nstoken = open_netns(NS_TEST); + if (!ASSERT_OK_PTR(nstoken, "open_netns")) + goto fail; + + snprintf(cmd, sizeof(cmd), "ip -net %s link add veth1 type veth peer name veth2", NS_TEST); + system(cmd); + snprintf(cmd, sizeof(cmd), "ip -net %s addr add %s/24 dev veth1", NS_TEST, ADDR_1); + system(cmd); + snprintf(cmd, sizeof(cmd), "ip -net %s link set veth1 up", NS_TEST); + system(cmd); + snprintf(cmd, sizeof(cmd), "ip -net %s addr add %s/24 dev veth2", NS_TEST, ADDR_2); system(cmd); - system("ip link set veth1 up"); - snprintf(cmd, sizeof(cmd), "ip addr add %s/24 dev veth2", ADDR_2); + snprintf(cmd, sizeof(cmd), "ip -net %s link set veth2 up", NS_TEST); system(cmd); - system("ip link set veth2 up"); - snprintf(cmd, sizeof(cmd), "ip mptcp endpoint add %s %s", ADDR_2, flags); + snprintf(cmd, sizeof(cmd), "ip -net %s mptcp endpoint add %s %s", NS_TEST, ADDR_2, flags); system(cmd); - snprintf(cmd, sizeof(cmd), "sysctl -qw net.mptcp.scheduler=%s", sched); + snprintf(cmd, sizeof(cmd), "ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", + NS_TEST, sched); system(cmd); + +fail: + return nstoken; } -static void sched_cleanup(void) +static void sched_cleanup(struct nstoken *nstoken) { - system("sysctl -qw net.mptcp.scheduler=default"); - system("ip mptcp endpoint flush"); - system("ip link del veth1"); + char cmd[64]; + + snprintf(cmd, sizeof(cmd), "ip netns exec %s sysctl -qw net.mptcp.scheduler=default", + NS_TEST); + system(cmd); + snprintf(cmd, sizeof(cmd), "ip -net %s mptcp endpoint flush", NS_TEST); + system(cmd); + snprintf(cmd, sizeof(cmd), "ip -net %s link del veth1", NS_TEST); + system(cmd); + + if (nstoken) + close_netns(nstoken); + SYS_NOFAIL("ip netns del " NS_TEST " &> /dev/null"); } static int has_bytes_sent(char *addr) { char cmd[64]; - snprintf(cmd, sizeof(cmd), "ss -it dst %s | grep -q 'bytes_sent:'", addr); + snprintf(cmd, sizeof(cmd), "ip netns exec %s ss -it dst %s | grep -q bytes_sent:", + NS_TEST, addr); return system(cmd); } static void test_first(void) { struct mptcp_bpf_first *first_skel; + struct nstoken *nstoken = NULL; int server_fd, client_fd; struct bpf_link *link; @@ -XXX,XX +XXX,XX @@ static void test_first(void) return; } - sched_init("subflow", "bpf_first"); + nstoken = sched_init("subflow", "bpf_first"); + if (!ASSERT_OK_PTR(nstoken, "sched_init")) + goto fail; + server_fd = start_mptcp_server(AF_INET, ADDR_1, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_first(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + sched_cleanup(nstoken); bpf_link__destroy(link); mptcp_bpf_first__destroy(first_skel); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ static void test_first(void) static void test_bkup(void) { struct mptcp_bpf_bkup *bkup_skel; + struct nstoken *nstoken = NULL; int server_fd, client_fd; struct bpf_link *link; @@ -XXX,XX +XXX,XX @@ static void test_bkup(void) return; } - sched_init("subflow backup", "bpf_bkup"); + nstoken = sched_init("subflow backup", "bpf_bkup"); + if (!ASSERT_OK_PTR(nstoken, "sched_init")) + goto fail; + server_fd = start_mptcp_server(AF_INET, ADDR_1, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_bkup(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + sched_cleanup(nstoken); bpf_link__destroy(link); mptcp_bpf_bkup__destroy(bkup_skel); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ static void test_bkup(void) static void test_rr(void) { + struct nstoken *nstoken = NULL; struct mptcp_bpf_rr *rr_skel; int server_fd, client_fd; struct bpf_link *link; @@ -XXX,XX +XXX,XX @@ static void test_rr(void) return; } - sched_init("subflow", "bpf_rr"); + nstoken = sched_init("subflow", "bpf_rr"); + if (!ASSERT_OK_PTR(nstoken, "sched_init")) + goto fail; + server_fd = start_mptcp_server(AF_INET, ADDR_1, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_rr(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + sched_cleanup(nstoken); bpf_link__destroy(link); mptcp_bpf_rr__destroy(rr_skel); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ static void test_rr(void) static void test_red(void) { struct mptcp_bpf_red *red_skel; + struct nstoken *nstoken = NULL; int server_fd, client_fd; struct bpf_link *link; @@ -XXX,XX +XXX,XX @@ static void test_red(void) return; } - sched_init("subflow", "bpf_red"); + nstoken = sched_init("subflow", "bpf_red"); + if (!ASSERT_OK_PTR(nstoken, "sched_init")) + goto fail; + server_fd = start_mptcp_server(AF_INET, ADDR_1, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_red(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + sched_cleanup(nstoken); bpf_link__destroy(link); mptcp_bpf_red__destroy(red_skel); } -- 2.35.3
v4: - patch #1 could be merged before "mptcp: refactor push_pending logic" as a single fix. - patch #2 should be merged between "selftests/bpf: Add mptcp sched structs" and "selftests/bpf: Add bpf_first scheduler". v3: - add two helpers. - drop sched_cleanup(). Geliang Tang (6): selftests/bpf: use random netns name for mptcp selftests/bpf: add two mptcp netns helpers Squash to "selftests/bpf: Add bpf_first test" Squash to "selftests/bpf: Add bpf_bkup test" Squash to "selftests/bpf: Add bpf_rr test" Squash to "selftests/bpf: Add bpf_red test" .../testing/selftests/bpf/prog_tests/mptcp.c | 109 +++++++++++------- 1 file changed, 68 insertions(+), 41 deletions(-) -- 2.35.3
Use rand() to generate a random netns name instead of using the fixed name "mptcp_ns" for every test. Fixes: 02d6a057c7be ("selftests/bpf: run mptcp in a dedicated netns") Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ #include "mptcp_bpf_rr.skel.h" #include "mptcp_bpf_red.skel.h" -#define NS_TEST "mptcp_ns" +char NS_TEST[32]; #ifndef TCP_CA_NAME_MAX #define TCP_CA_NAME_MAX 16 @@ -XXX,XX +XXX,XX @@ static void test_base(void) if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup")) return; + srand(time(NULL)); + snprintf(NS_TEST, sizeof(NS_TEST), "mptcp_ns_%d", rand()); SYS(fail, "ip netns add %s", NS_TEST); SYS(fail, "ip -net %s link set dev lo up", NS_TEST); -- 2.35.3
Add two netns helpers for mptcp tests: create_netns() and cleanup_netns(). Use them in test_base(). Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- .../testing/selftests/bpf/prog_tests/mptcp.c | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ static int run_test(int cgroup_fd, int server_fd, bool is_mptcp) return err; } +static struct nstoken *create_netns(void) +{ + srand(time(NULL)); + snprintf(NS_TEST, sizeof(NS_TEST), "mptcp_ns_%d", rand()); + SYS(fail, "ip netns add %s", NS_TEST); + SYS(fail, "ip -net %s link set dev lo up", NS_TEST); + + return open_netns(NS_TEST); +fail: + return NULL; +} + +static void cleanup_netns(struct nstoken *nstoken) +{ + if (nstoken) + close_netns(nstoken); + + SYS_NOFAIL("ip netns del %s &> /dev/null", NS_TEST); +} + static void test_base(void) { struct nstoken *nstoken = NULL; @@ -XXX,XX +XXX,XX @@ static void test_base(void) if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup")) return; - srand(time(NULL)); - snprintf(NS_TEST, sizeof(NS_TEST), "mptcp_ns_%d", rand()); - SYS(fail, "ip netns add %s", NS_TEST); - SYS(fail, "ip -net %s link set dev lo up", NS_TEST); - - nstoken = open_netns(NS_TEST); - if (!ASSERT_OK_PTR(nstoken, "open_netns")) + nstoken = create_netns(); + if (!ASSERT_OK_PTR(nstoken, "create_netns")) goto fail; /* without MPTCP */ @@ -XXX,XX +XXX,XX @@ static void test_base(void) close(server_fd); fail: - if (nstoken) - close_netns(nstoken); - - SYS_NOFAIL("ip netns del " NS_TEST " &> /dev/null"); + cleanup_netns(nstoken); close(cgroup_fd); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- .../testing/selftests/bpf/prog_tests/mptcp.c | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ static void send_data(int lfd, int fd) #define ADDR_1 "10.0.1.1" #define ADDR_2 "10.0.1.2" -static void sched_init(char *flags, char *sched) +static struct nstoken *sched_init(char *flags, char *sched) { - char cmd[64]; - - system("ip link add veth1 type veth peer name veth2"); - snprintf(cmd, sizeof(cmd), "ip addr add %s/24 dev veth1", ADDR_1); - system(cmd); - system("ip link set veth1 up"); - snprintf(cmd, sizeof(cmd), "ip addr add %s/24 dev veth2", ADDR_2); - system(cmd); - system("ip link set veth2 up"); - - snprintf(cmd, sizeof(cmd), "ip mptcp endpoint add %s %s", ADDR_2, flags); - system(cmd); - snprintf(cmd, sizeof(cmd), "sysctl -qw net.mptcp.scheduler=%s", sched); - system(cmd); -} + struct nstoken *nstoken; -static void sched_cleanup(void) -{ - system("sysctl -qw net.mptcp.scheduler=default"); - system("ip mptcp endpoint flush"); - system("ip link del veth1"); + nstoken = create_netns(); + if (!ASSERT_OK_PTR(nstoken, "create_netns")) + goto fail; + + SYS(fail, "ip -net %s link add veth1 type veth peer name veth2", NS_TEST); + SYS(fail, "ip -net %s addr add %s/24 dev veth1", NS_TEST, ADDR_1); + SYS(fail, "ip -net %s link set dev veth1 up", NS_TEST); + SYS(fail, "ip -net %s addr add %s/24 dev veth2", NS_TEST, ADDR_2); + SYS(fail, "ip -net %s link set dev veth2 up", NS_TEST); + SYS(fail, "ip -net %s mptcp endpoint add %s %s", NS_TEST, ADDR_2, flags); + SYS(fail, "ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", NS_TEST, sched); + + return nstoken; +fail: + return NULL; } static int has_bytes_sent(char *addr) { - char cmd[64]; + char cmd[128]; - snprintf(cmd, sizeof(cmd), "ss -it dst %s | grep -q 'bytes_sent:'", addr); + snprintf(cmd, sizeof(cmd), "ip netns exec %s ss -it dst %s | grep -q bytes_sent:", + NS_TEST, addr); return system(cmd); } @@ -XXX,XX +XXX,XX @@ 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(); @@ -XXX,XX +XXX,XX @@ static void test_first(void) return; } - sched_init("subflow", "bpf_first"); + 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); @@ -XXX,XX +XXX,XX @@ static void test_first(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + cleanup_netns(nstoken); bpf_link__destroy(link); mptcp_bpf_first__destroy(first_skel); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ 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(); @@ -XXX,XX +XXX,XX @@ static void test_bkup(void) return; } - sched_init("subflow backup", "bpf_bkup"); + 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, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_bkup(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + cleanup_netns(nstoken); bpf_link__destroy(link); mptcp_bpf_bkup__destroy(bkup_skel); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ 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(); @@ -XXX,XX +XXX,XX @@ static void test_rr(void) return; } - sched_init("subflow", "bpf_rr"); + 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, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_rr(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + cleanup_netns(nstoken); bpf_link__destroy(link); mptcp_bpf_rr__destroy(rr_skel); } -- 2.35.3
Run mptcp sched test in a dedicated netns. Signed-off-by: Geliang Tang <geliang.tang@suse.com> --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index XXXXXXX..XXXXXXX 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -XXX,XX +XXX,XX @@ 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(); @@ -XXX,XX +XXX,XX @@ static void test_red(void) return; } - sched_init("subflow", "bpf_red"); + 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, 0, 0); client_fd = connect_to_fd(server_fd, 0); @@ -XXX,XX +XXX,XX @@ static void test_red(void) close(client_fd); close(server_fd); - sched_cleanup(); +fail: + cleanup_netns(nstoken); bpf_link__destroy(link); mptcp_bpf_red__destroy(red_skel); } -- 2.35.3