.../testing/selftests/bpf/prog_tests/mptcp.c | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-)
This patch moves the netns operations code from subtest function
test_base() to the main test function test_mptcp(), then this dedicated
test netns can be used for all the subtests. Other subtests will be
added later.
Use rand() to generate a random netns name instead of using the fixed
name "mptcp_ns" for every test.
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
This patch should be merged before the commit "mptcp: refactor push_pending logic".
---
.../testing/selftests/bpf/prog_tests/mptcp.c | 32 ++++++++++---------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index cd0c42fff7c0..d989613c821d 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -7,8 +7,6 @@
#include "network_helpers.h"
#include "mptcp_sock.skel.h"
-#define NS_TEST "mptcp_ns"
-
#ifndef TCP_CA_NAME_MAX
#define TCP_CA_NAME_MAX 16
#endif
@@ -140,20 +138,12 @@ static int run_test(int cgroup_fd, int server_fd, bool is_mptcp)
static void test_base(void)
{
- struct nstoken *nstoken = NULL;
int server_fd, cgroup_fd;
cgroup_fd = test__join_cgroup("/mptcp");
if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup"))
return;
- 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;
-
/* without MPTCP */
server_fd = start_server(AF_INET, SOCK_STREAM, NULL, 0, 0);
if (!ASSERT_GE(server_fd, 0, "start_server"))
@@ -174,16 +164,28 @@ static void test_base(void)
close(server_fd);
fail:
- if (nstoken)
- close_netns(nstoken);
-
- SYS_NOFAIL("ip netns del " NS_TEST " &> /dev/null");
-
close(cgroup_fd);
}
void test_mptcp(void)
{
+ struct nstoken *nstoken = NULL;
+ char NS_TEST[32] = { 0 };
+
+ 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"))
+ goto fail;
+
if (test__start_subtest("base"))
test_base();
+
+ if (nstoken)
+ close_netns(nstoken);
+fail:
+ SYS_NOFAIL("ip netns del %s &> /dev/null", NS_TEST);
}
--
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 | 50 ++++++++-----------
1 file changed, 22 insertions(+), 28 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 77a6997fc82f..bea9c799a531 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -253,40 +253,34 @@ 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 void sched_init(char *ns, 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);
+ SYS_NOFAIL("ip -net %s link add veth1 type veth peer name veth2", ns);
+ SYS_NOFAIL("ip -net %s addr add %s/24 dev veth1", ns, ADDR_1);
+ SYS_NOFAIL("ip -net %s link set dev veth1 up", ns);
+ SYS_NOFAIL("ip -net %s addr add %s/24 dev veth2", ns, ADDR_2);
+ SYS_NOFAIL("ip -net %s link set dev veth2 up", ns);
+ SYS_NOFAIL("ip -net %s mptcp endpoint add %s %s", ns, ADDR_2, flags);
+ SYS_NOFAIL("ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", ns, sched);
}
-static void sched_cleanup(void)
+static void sched_cleanup(char *ns)
{
- system("sysctl -qw net.mptcp.scheduler=default");
- system("ip mptcp endpoint flush");
- system("ip link del veth1");
+ SYS_NOFAIL("ip netns exec %s sysctl -qw net.mptcp.scheduler=default", ns);
+ SYS_NOFAIL("ip -net %s mptcp endpoint flush", ns);
+ SYS_NOFAIL("ip -net %s link del veth1", ns);
}
-static int has_bytes_sent(char *addr)
+static int has_bytes_sent(char *ns, 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, addr);
return system(cmd);
}
-static void test_first(void)
+static void test_first(char *ns)
{
struct mptcp_bpf_first *first_skel;
int server_fd, client_fd;
@@ -302,17 +296,17 @@ static void test_first(void)
return;
}
- sched_init("subflow", "bpf_first");
+ sched_init(ns, "subflow", "bpf_first");
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);
- 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");
+ ASSERT_OK(has_bytes_sent(ns, ADDR_1), "has_bytes_sent addr_1");
+ ASSERT_GT(has_bytes_sent(ns, ADDR_2), 0, "has_bytes_sent addr_2");
close(client_fd);
close(server_fd);
- sched_cleanup();
+ sched_cleanup(ns);
bpf_link__destroy(link);
mptcp_bpf_first__destroy(first_skel);
}
@@ -334,7 +328,7 @@ void test_mptcp(void)
if (test__start_subtest("base"))
test_base();
if (test__start_subtest("first"))
- test_first();
+ test_first(NS_TEST);
if (nstoken)
close_netns(nstoken);
--
2.35.3
Hi Geliang,
On 17/05/2023 10:40, Geliang Tang wrote:
> Run mptcp sched test in a dedicated netns.
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> .../testing/selftests/bpf/prog_tests/mptcp.c | 50 ++++++++-----------
> 1 file changed, 22 insertions(+), 28 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index 77a6997fc82f..bea9c799a531 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -253,40 +253,34 @@ 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 void sched_init(char *ns, char *flags, char *sched)
I think it is cleaner to use a new netns for each test: by doing that,
we are sure to start from a fresh and controlled environment just in
case something wrong happened with the previous test. No?
So in the sched_init(), the netns is created and in sched_cleanup(), the
netns is destroyed (and no need to do anything else I guess).
I guess you can also simply use a helper to create the netns and set
NS_TEST which would be a "global" variable. WDYT?
> {
> - 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);
> + SYS_NOFAIL("ip -net %s link add veth1 type veth peer name veth2", ns);
> + SYS_NOFAIL("ip -net %s addr add %s/24 dev veth1", ns, ADDR_1);
> + SYS_NOFAIL("ip -net %s link set dev veth1 up", ns);
> + SYS_NOFAIL("ip -net %s addr add %s/24 dev veth2", ns, ADDR_2);
> + SYS_NOFAIL("ip -net %s link set dev veth2 up", ns);
> + SYS_NOFAIL("ip -net %s mptcp endpoint add %s %s", ns, ADDR_2, flags);
> + SYS_NOFAIL("ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", ns, sched);
Why not using SYS() instead? By doing that, the test will be marked as
failed if one of these commands fails.
You just need to add:
fail:
return;
at the end I guess.
> }
>
> -static void sched_cleanup(void)
> +static void sched_cleanup(char *ns)> {
> - system("sysctl -qw net.mptcp.scheduler=default");
> - system("ip mptcp endpoint flush");
> - system("ip link del veth1");
> + SYS_NOFAIL("ip netns exec %s sysctl -qw net.mptcp.scheduler=default", ns);
> + SYS_NOFAIL("ip -net %s mptcp endpoint flush", ns);
> + SYS_NOFAIL("ip -net %s link del veth1", ns);
Same here with SYS() to catch unexpected behaviours.
(but see above, maybe enough to just close nstoken and delete the netns)
Cheers,
Matt
--
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net
From: Matthieu Baerts <matthieu.baerts@tessares.net>
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 | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index f0f9aa517ec1..83af690facef 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -376,7 +376,7 @@ static void test_rr(char *ns)
mptcp_bpf_rr__destroy(rr_skel);
}
-static void test_red(void)
+static void test_red(char *ns)
{
struct mptcp_bpf_red *red_skel;
int server_fd, client_fd;
@@ -392,17 +392,17 @@ static void test_red(void)
return;
}
- sched_init("subflow", "bpf_red");
+ sched_init(ns, "subflow", "bpf_red");
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);
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
- ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
+ ASSERT_OK(has_bytes_sent(ns, ADDR_1), "has_bytes_sent addr 1");
+ ASSERT_OK(has_bytes_sent(ns, ADDR_2), "has_bytes_sent addr 2");
close(client_fd);
close(server_fd);
- sched_cleanup();
+ sched_cleanup(ns);
bpf_link__destroy(link);
mptcp_bpf_red__destroy(red_skel);
}
@@ -430,7 +430,7 @@ void test_mptcp(void)
if (test__start_subtest("rr"))
test_rr(NS_TEST);
if (test__start_subtest("red"))
- test_red();
+ test_red(NS_TEST);
if (nstoken)
close_netns(nstoken);
--
2.35.3
Geliang Tang <geliang.tang@suse.com> 于2023年5月17日周三 16:41写道:
>
> From: Matthieu Baerts <matthieu.baerts@tessares.net>
Sorry, my bad. This line shouldn't be here:)
>
> 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 | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index f0f9aa517ec1..83af690facef 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -376,7 +376,7 @@ static void test_rr(char *ns)
> mptcp_bpf_rr__destroy(rr_skel);
> }
>
> -static void test_red(void)
> +static void test_red(char *ns)
> {
> struct mptcp_bpf_red *red_skel;
> int server_fd, client_fd;
> @@ -392,17 +392,17 @@ static void test_red(void)
> return;
> }
>
> - sched_init("subflow", "bpf_red");
> + sched_init(ns, "subflow", "bpf_red");
> 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);
> - ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
> - ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
> + ASSERT_OK(has_bytes_sent(ns, ADDR_1), "has_bytes_sent addr 1");
> + ASSERT_OK(has_bytes_sent(ns, ADDR_2), "has_bytes_sent addr 2");
>
> close(client_fd);
> close(server_fd);
> - sched_cleanup();
> + sched_cleanup(ns);
> bpf_link__destroy(link);
> mptcp_bpf_red__destroy(red_skel);
> }
> @@ -430,7 +430,7 @@ void test_mptcp(void)
> if (test__start_subtest("rr"))
> test_rr(NS_TEST);
> if (test__start_subtest("red"))
> - test_red();
> + test_red(NS_TEST);
>
> if (nstoken)
> close_netns(nstoken);
> --
> 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 | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 6f69abcadebb..f318aba9e410 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -312,7 +312,7 @@ static void test_first(char *ns)
mptcp_bpf_first__destroy(first_skel);
}
-static void test_bkup(void)
+static void test_bkup(char *ns)
{
struct mptcp_bpf_bkup *bkup_skel;
int server_fd, client_fd;
@@ -328,17 +328,17 @@ static void test_bkup(void)
return;
}
- sched_init("subflow backup", "bpf_bkup");
+ sched_init(ns, "subflow backup", "bpf_bkup");
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);
- 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");
+ ASSERT_OK(has_bytes_sent(ns, ADDR_1), "has_bytes_sent addr_1");
+ ASSERT_GT(has_bytes_sent(ns, ADDR_2), 0, "has_bytes_sent addr_2");
close(client_fd);
close(server_fd);
- sched_cleanup();
+ sched_cleanup(ns);
bpf_link__destroy(link);
mptcp_bpf_bkup__destroy(bkup_skel);
}
@@ -362,7 +362,7 @@ void test_mptcp(void)
if (test__start_subtest("first"))
test_first(NS_TEST);
if (test__start_subtest("bkup"))
- test_bkup();
+ test_bkup(NS_TEST);
if (nstoken)
close_netns(nstoken);
--
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 | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
index 6d728edce349..ad1c46b35715 100644
--- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
+++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
@@ -344,7 +344,7 @@ static void test_bkup(char *ns)
mptcp_bpf_bkup__destroy(bkup_skel);
}
-static void test_rr(void)
+static void test_rr(char *ns)
{
struct mptcp_bpf_rr *rr_skel;
int server_fd, client_fd;
@@ -360,17 +360,17 @@ static void test_rr(void)
return;
}
- sched_init("subflow", "bpf_rr");
+ sched_init(ns, "subflow", "bpf_rr");
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);
- ASSERT_OK(has_bytes_sent(ADDR_1), "has_bytes_sent addr 1");
- ASSERT_OK(has_bytes_sent(ADDR_2), "has_bytes_sent addr 2");
+ ASSERT_OK(has_bytes_sent(ns, ADDR_1), "has_bytes_sent addr 1");
+ ASSERT_OK(has_bytes_sent(ns, ADDR_2), "has_bytes_sent addr 2");
close(client_fd);
close(server_fd);
- sched_cleanup();
+ sched_cleanup(ns);
bpf_link__destroy(link);
mptcp_bpf_rr__destroy(rr_skel);
}
@@ -396,7 +396,7 @@ void test_mptcp(void)
if (test__start_subtest("bkup"))
test_bkup(NS_TEST);
if (test__start_subtest("rr"))
- test_rr();
+ test_rr(NS_TEST);
if (nstoken)
close_netns(nstoken);
--
2.35.3
© 2016 - 2026 Red Hat, Inc.