All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Mat Martineau <martineau@kernel.org>
To: Geliang Tang <geliang@kernel.org>
Cc: mptcp@lists.linux.dev, Geliang Tang <tanggeliang@kylinos.cn>
Subject: Re: [PATCH mptcp-next v8 2/4] selftests/bpf: Add mptcp subflow subtest
Date: Tue, 23 Apr 2024 13:58:17 -0700 (PDT)	[thread overview]
Message-ID: <fe31493a-c21a-9535-36a8-8d49981f3d19@kernel.org> (raw)
In-Reply-To: <c479600e938723857db1bba00c98c100c3852aca.1713612119.git.tanggeliang@kylinos.cn>

On Sat, 20 Apr 2024, Geliang Tang wrote:

> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> This patch adds a subtest named test_subflow to load and verify the newly
> added mptcp subflow example in test_mptcp. Add a helper endpoint_init()
> to add a new subflow endpoint. Add another helper ss_search() to verify the
> fwmark and congestion values set by mptcp_subflow prog using setsockopts.
>
> Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/76
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
> .../testing/selftests/bpf/prog_tests/mptcp.c  | 114 +++++++++++++++++-
> 1 file changed, 108 insertions(+), 6 deletions(-)
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> index d3cc3541dd4f..0b0da4556d91 100644
> --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c
> +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c
> @@ -9,6 +9,7 @@
> #include "network_helpers.h"
> #include "mptcp_sock.skel.h"
> #include "mptcpify.skel.h"
> +#include "mptcp_subflow.skel.h"
> #include "mptcp_bpf_first.skel.h"
> #include "mptcp_bpf_bkup.skel.h"
> #include "mptcp_bpf_rr.skel.h"
> @@ -16,6 +17,9 @@
> #include "mptcp_bpf_burst.skel.h"
>
> #define NS_TEST "mptcp_ns"
> +#define ADDR_1	"10.0.1.1"
> +#define ADDR_2	"10.0.1.2"
> +#define PORT_1	10001
> #define WITH_DATA	true
> #define WITHOUT_DATA	false
>
> @@ -41,6 +45,9 @@
> #endif
> #define MPTCP_SCHED_NAME_MAX	16
>
> +static const unsigned int total_bytes = 10 * 1024 * 1024;
> +static int duration;
> +
> struct __mptcp_info {
> 	__u8	mptcpi_subflows;
> 	__u8	mptcpi_add_addr_signal;
> @@ -332,8 +339,106 @@ static void test_mptcpify(void)
> 	close(cgroup_fd);
> }
>
> -static const unsigned int total_bytes = 10 * 1024 * 1024;
> -static int stop, duration;
> +static int endpoint_init(char *flags)
> +{
> +	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);
> +
> +	return 0;
> +fail:
> +	return -1;
> +}
> +
> +static int _ss_search(char *src, char *dst, char *port, char *keyword)
> +{
> +	char cmd[128];
> +
> +	snprintf(cmd, sizeof(cmd),
> +		 "ip netns exec %s ss -Menita src %s dst %s %s %d | grep -q '%s'",
> +		 NS_TEST, src, dst, port, PORT_1, keyword);

Hi Geliang -

Sorry I missed this before, can you validate the return value of 
snprintf() before executing the command? I see that wasn't included in the 
old has_bytes_sent() code that this is similar to, but it would be good to 
fix it now.

Thanks,
Mat

> +	return system(cmd);
> +}
> +
> +static int ss_search(char *src, char *keyword)
> +{
> +	return _ss_search(src, ADDR_1, "dport", keyword);
> +}
> +
> +static void run_subflow(char *new)
> +{
> +	int server_fd, client_fd, err;
> +	char cc[TCP_CA_NAME_MAX];
> +	socklen_t len = sizeof(cc);
> +
> +	server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0);
> +	if (!ASSERT_GE(server_fd, 0, "start_mptcp_server"))
> +		return;
> +
> +	client_fd = connect_to_fd(server_fd, 0);
> +	if (!ASSERT_GE(client_fd, 0, "connect to fd"))
> +		goto fail;
> +
> +	err = getsockopt(server_fd, SOL_TCP, TCP_CONGESTION, cc, &len);
> +	if (!ASSERT_OK(err, "getsockopt(srv_fd, TCP_CONGESTION)"))
> +		goto fail;
> +
> +	send_byte(client_fd);
> +
> +	ASSERT_OK(ss_search(ADDR_1, "fwmark:0x1"), "ss_search fwmark:0x1");
> +	ASSERT_OK(ss_search(ADDR_2, "fwmark:0x2"), "ss_search fwmark:0x2");
> +	ASSERT_OK(ss_search(ADDR_1, new), "ss_search new cc");
> +	ASSERT_OK(ss_search(ADDR_2, cc), "ss_search default cc");
> +
> +	close(client_fd);
> +fail:
> +	close(server_fd);
> +}
> +
> +static void test_subflow(void)
> +{
> +	int cgroup_fd, prog_fd, err;
> +	struct mptcp_subflow *skel;
> +	struct nstoken *nstoken;
> +
> +	cgroup_fd = test__join_cgroup("/mptcp_subflow");
> +	if (!ASSERT_GE(cgroup_fd, 0, "join_cgroup: mptcp_subflow"))
> +		return;
> +
> +	skel = mptcp_subflow__open_and_load();
> +	if (!ASSERT_OK_PTR(skel, "skel_open_load: mptcp_subflow"))
> +		goto close_cgroup;
> +
> +	err = mptcp_subflow__attach(skel);
> +	if (!ASSERT_OK(err, "skel_attach: mptcp_subflow"))
> +		goto skel_destroy;
> +
> +	prog_fd = bpf_program__fd(skel->progs.mptcp_subflow);
> +	err = bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_SOCK_OPS, 0);
> +	if (!ASSERT_OK(err, "prog_attach"))
> +		goto skel_destroy;
> +
> +	nstoken = create_netns();
> +	if (!ASSERT_OK_PTR(nstoken, "create_netns: mptcp_subflow"))
> +		goto skel_destroy;
> +
> +	if (!ASSERT_OK(endpoint_init("subflow"), "endpoint_init"))
> +		goto close_netns;
> +
> +	run_subflow(skel->data->cc);
> +
> +close_netns:
> +	cleanup_netns(nstoken);
> +skel_destroy:
> +	mptcp_subflow__destroy(skel);
> +close_cgroup:
> +	close(cgroup_fd);
> +}
> +
> +static int stop;
>
> static void *server(void *arg)
> {
> @@ -414,10 +519,6 @@ static void send_data(int lfd, int fd, char *msg)
> 	      PTR_ERR(thread_ret));
> }
>
> -#define ADDR_1	"10.0.1.1"
> -#define ADDR_2	"10.0.1.2"
> -#define PORT_1	10001
> -
> static struct nstoken *sched_init(char *flags, char *sched)
> {
> 	struct nstoken *nstoken;
> @@ -558,6 +659,7 @@ void test_mptcp(void)
> {
> 	RUN_MPTCP_TEST(base);
> 	RUN_MPTCP_TEST(mptcpify);
> +	RUN_MPTCP_TEST(subflow);
> 	RUN_MPTCP_TEST(default);
> 	RUN_MPTCP_TEST(first);
> 	RUN_MPTCP_TEST(bkup);
> -- 
> 2.40.1
>
>
>

  reply	other threads:[~2024-04-23 20:58 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-20 11:23 [PATCH mptcp-next v8 0/4] setsockopt per subflow: BPF Geliang Tang
2024-04-20 11:23 ` [PATCH mptcp-next v8 1/4] selftests/bpf: Add mptcp subflow example Geliang Tang
2024-04-20 11:23 ` [PATCH mptcp-next v8 2/4] selftests/bpf: Add mptcp subflow subtest Geliang Tang
2024-04-23 20:58   ` Mat Martineau [this message]
2024-04-20 11:23 ` [PATCH mptcp-next v8 3/4] selftests/bpf: Handle SIGINT when creating netns Geliang Tang
2024-04-20 11:23 ` [PATCH mptcp-next v8 4/4] Squash to "selftests/bpf: Add bpf scheduler test" Geliang Tang
2024-04-20 12:17 ` [PATCH mptcp-next v8 0/4] setsockopt per subflow: BPF MPTCP CI

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=fe31493a-c21a-9535-36a8-8d49981f3d19@kernel.org \
    --to=martineau@kernel.org \
    --cc=geliang@kernel.org \
    --cc=mptcp@lists.linux.dev \
    --cc=tanggeliang@kylinos.cn \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.