From nobody Fri May 17 07:47:04 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4F30535CF for ; Mon, 8 Apr 2024 10:27:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572021; cv=none; b=GrT6567vXA5+nQupCEW6s9JzFQF/89HB9PVzBNpAvCR9IVNUi2alXX2XbZrb3zovRtB9OEICbkepSALYck1SCsCC+ErtC302boCsMhCi4rHlsdmHSkdXTycmjoPEHvr3mE3E2dxVo97rv1Nlm2TBBzp9GiaFdKGij7ufoAYx/qU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572021; c=relaxed/simple; bh=/gp8CV9+6krH/otjOe76Jy8R8dlIiwlHiNzqUY/kYzY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OqsSnRbz+6Wzu8yNOf5uJaDfcY0Z5ee/r1e0eGTIfwExm0FdUKRi5x/axVk2sd8b3/+0vIXTVwW9acatxxgt4aXfzbSDFNh0JqdhjyBragTDxbcPdsq6FvdtklHneqhyY6n/56tb63dQtnEnAQH/ogpdyr9gIQU7rj3Clbzm4ZI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j9DFY5H6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="j9DFY5H6" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 010F7C43394; Mon, 8 Apr 2024 10:26:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712572021; bh=/gp8CV9+6krH/otjOe76Jy8R8dlIiwlHiNzqUY/kYzY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j9DFY5H6gEC/IbmA0LczqU8O3Y1ttAfFwg04ekgeDR2sAxThgoTyFUbPOkyZTrDap mXMCn6IzZJUHCHuQ8ilhtGpp27rJPEoQOY/sSORJDziOFGlUbaR+PYgh4ktBa82g2c 04Y4tX5uKE1e05/SMEwvdlv0Twt930Hq0exPtWCcty6scD9J0YXvhLYsoNuy0FXIux s3CvE6e7Qdk0mkJJGTZDyd1Ekif98rnqNKWPV3fWTlrh1DHzh4dv58kIE8DakuDMhN 5VcYmWEYmyPCrwOeyeN4SxdXCav3pDP7EP/5TmFy6tT/dygTH9881rpYTHwMbfyqf5 K3YRZil993f7Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 1/5] selftests/bpf: Add mptcp subflow example Date: Mon, 8 Apr 2024 18:26:48 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Move Nicolas's patch into bpf selftests directory. This example added a test that was adding a different mark (SO_MARK) on each subflow, and changing the TCP CC only on the first subflow. This example shows how it is possible to: Identify the parent msk of an MPTCP subflow. Put different sockopt for each subflow of a same MPTCP connection. Here especially, we implemented two different behaviours: A socket mark (SOL_SOCKET SO_MARK) is put on each subflow of a same MPTCP connection. The order of creation of the current subflow defines its mark. The TCP CC algorithm of the very first subflow of an MPTCP connection is set to "reno". Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/76 Signed-off-by: Geliang Tang --- .../selftests/bpf/progs/mptcp_subflow.c | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 tools/testing/selftests/bpf/progs/mptcp_subflow.c diff --git a/tools/testing/selftests/bpf/progs/mptcp_subflow.c b/tools/test= ing/selftests/bpf/progs/mptcp_subflow.c new file mode 100644 index 000000000000..9bdafc0930f1 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/mptcp_subflow.c @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2020, Tessares SA. */ +/* Copyright (c) 2024, Kylin Software */ +/* Author: Nicolas Rybowski */ + +#include // SOL_SOCKET, SO_MARK, ... +#include // TCP_CONGESTION +#include +#include +#include "bpf_tcp_helpers.h" + +char _license[] SEC("license") =3D "GPL"; + +#ifndef SOL_TCP +#define SOL_TCP 6 +#endif + +#ifndef TCP_CA_NAME_MAX +#define TCP_CA_NAME_MAX 16 +#endif + +char cc[TCP_CA_NAME_MAX] =3D "reno"; + +/* Associate a subflow counter to each token */ +struct { + __uint(type, BPF_MAP_TYPE_HASH); + __uint(key_size, sizeof(__u32)); + __uint(value_size, sizeof(__u32)); + __uint(max_entries, 100); +} mptcp_sf SEC(".maps"); + +SEC("sockops") +int mptcp_subflow(struct bpf_sock_ops *skops) +{ + __u32 init =3D 1, key, mark, *cnt; + struct mptcp_sock *msk; + struct bpf_sock *sk; + int err; + + if (skops->op !=3D BPF_SOCK_OPS_TCP_CONNECT_CB) + return 1; + + sk =3D skops->sk; + if (!sk) + return 1; + + msk =3D bpf_skc_to_mptcp_sock(sk); + if (!msk) + return 1; + + key =3D msk->token; + cnt =3D bpf_map_lookup_elem(&mptcp_sf, &key); + if (cnt) { + /* A new subflow is added to an existing MPTCP connection */ + __sync_fetch_and_add(cnt, 1); + mark =3D *cnt; + } else { + /* A new MPTCP connection is just initiated and this is its primary subf= low */ + bpf_map_update_elem(&mptcp_sf, &key, &init, BPF_ANY); + mark =3D init; + } + + /* Set the mark of the subflow's socket based on appearance order */ + err =3D bpf_setsockopt(skops, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)); + if (err < 0) + return 1; + if (mark =3D=3D 1) + err =3D bpf_setsockopt(skops, SOL_TCP, TCP_CONGESTION, cc, TCP_CA_NAME_M= AX); + + return 1; +} --=20 2.40.1 From nobody Fri May 17 07:47:04 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A7C18537E8 for ; Mon, 8 Apr 2024 10:27:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572023; cv=none; b=rMoPNSA4KlXNyKyGlU/c8LawaVCmJRA5c+Q6DD6RprsVZK+9AYs8XeehJiVLPR/C2hcQA+PlnuJ9le6Lz4CTG0jV7mpsnXQizvOdwos9xqqF0l6g9FmLOrDpD1CW2d2Tag7GvwtXGE1FGFdUQhV4qB9FQi7z0vKcb6e27Cwr0Sw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572023; c=relaxed/simple; bh=vOAxFH1bJADC2IqhAhz6QPC91chOGt/8Lkv6C4PokFw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=QX4L2XRvLL40n58yP/MhWaMOB9NQbmUm2AGBN9BebfF68+AviyjFxoRmCSk+Z4CT7l/XqojSEpN1RrGQiAFvHxHxvjjD/Rp31ExmCinycdQ2nlcaiBIXrrh1Ap+oEk/xdaz37yt7Ok9OoPPOwOOqRMl4dGlvrRHxaf0RYS7KO9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZEfYj7wc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZEfYj7wc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E8138C43390; Mon, 8 Apr 2024 10:27:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712572023; bh=vOAxFH1bJADC2IqhAhz6QPC91chOGt/8Lkv6C4PokFw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZEfYj7wcQosOXyzSS6v40XzDIpbapELQLrcUpHA+A+0OFdQJXrUupdHSMERV6ZUEY Np2sy3sk0P8iv5HF0yUwSvysTvGBbkAHBYTLRlpDUNsdNpu3Gj9oMLvHlbs1Ac6Slo uu6zbEMk7cQOG6gPgC17z4WJsITFCKEO4uxvCKMdzWtXPf4Mcopp/eGPYefJlBJN03 /a621a3U22Ng5XncCnUWQIbhRysitlWHvyUcXby1jEDXRYhNlY2Y73WZ0Nm4BVNtAN E/JtGEV8RhLvQtUD29uY+RESL3TyQn13kHUY6UcTe2IAcZmB87iZWaWC5q5phUbbfK NaNTbuxCAE0NA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 2/5] selftests/bpf: Support nonblock for send_recv_data Date: Mon, 8 Apr 2024 18:26:49 +0800 Message-Id: <395f742e39fabb601e6eb951776bfe98a93cdb65.1712571740.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Some tests, such as the MPTCP bpf tests, require send_recv_data helper to run in nonblock mode. This patch adds nonblock support for send_recv_data(). Check if it is currently in nonblock mode, and if so, ignore EWOULDBLOCK to continue sending and receiving. Also add a new helper set_nonblock() to set the given socket to nonblock mode. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/network_helpers.c | 19 ++++++++++++++++++- tools/testing/selftests/bpf/network_helpers.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/network_helpers.c b/tools/testing/= selftests/bpf/network_helpers.c index d0579bf1697b..dac40307b032 100644 --- a/tools/testing/selftests/bpf/network_helpers.c +++ b/tools/testing/selftests/bpf/network_helpers.c @@ -507,6 +507,7 @@ struct send_recv_arg { static void *send_recv_server(void *arg) { struct send_recv_arg *a =3D (struct send_recv_arg *)arg; + int flags =3D fcntl(a->fd, F_GETFL); ssize_t nr_sent =3D 0, bytes =3D 0; char batch[1500]; int err =3D 0, fd; @@ -530,6 +531,8 @@ static void *send_recv_server(void *arg) if (nr_sent =3D=3D -1 && errno =3D=3D EINTR) continue; if (nr_sent =3D=3D -1) { + if (flags & O_NONBLOCK && errno =3D=3D EWOULDBLOCK) + continue; err =3D -errno; break; } @@ -550,6 +553,7 @@ static void *send_recv_server(void *arg) =20 void send_recv_data(int lfd, int fd, uint32_t total_bytes) { + int flags =3D fcntl(lfd, F_GETFL); ssize_t nr_recv =3D 0, bytes =3D 0; struct send_recv_arg arg =3D { .fd =3D lfd, @@ -571,8 +575,11 @@ void send_recv_data(int lfd, int fd, uint32_t total_by= tes) MIN(total_bytes - bytes, sizeof(batch)), 0); if (nr_recv =3D=3D -1 && errno =3D=3D EINTR) continue; - if (nr_recv =3D=3D -1) + if (nr_recv =3D=3D -1) { + if (flags & O_NONBLOCK && errno =3D=3D EWOULDBLOCK) + continue; break; + } bytes +=3D nr_recv; } =20 @@ -582,3 +589,13 @@ void send_recv_data(int lfd, int fd, uint32_t total_by= tes) pthread_join(srv_thread, &thread_ret); ASSERT_OK(IS_ERR(thread_ret), "thread_ret"); } + +int set_nonblock(int fd) +{ + int flags =3D fcntl(fd, F_GETFL); + + if (flags =3D=3D -1) + return -1; + + return fcntl(fd, F_SETFL, flags | O_NONBLOCK); +} diff --git a/tools/testing/selftests/bpf/network_helpers.h b/tools/testing/= selftests/bpf/network_helpers.h index 06baa87549d1..6589cf2013ca 100644 --- a/tools/testing/selftests/bpf/network_helpers.h +++ b/tools/testing/selftests/bpf/network_helpers.h @@ -72,6 +72,7 @@ struct nstoken; struct nstoken *open_netns(const char *name); void close_netns(struct nstoken *token); void send_recv_data(int lfd, int fd, uint32_t total_bytes); +int set_nonblock(int fd); =20 static __u16 csum_fold(__u32 csum) { --=20 2.40.1 From nobody Fri May 17 07:47:04 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4ACA537E8 for ; Mon, 8 Apr 2024 10:27:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572024; cv=none; b=IqowbLILfWbz7S0+KkgRf/EFgBsDfG7S1pKBfbXl0l9o/mrnf164o7N09eVGD8zSrT0O38sO7QpbqNKuw0w4dgQSTPN4CU/RCWgVGXh+RzUrX4q3oJt1cNVtCt04jTUDsAXkl1domEcthU8p36atAfrpb48N8669bDfipsqeBEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572024; c=relaxed/simple; bh=8syfNYlroDnov/HT5iFE0VOvyYpI/Y1WvfASS/PQ26w=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=LDjNA88BQMRJlL+AFZcJoWXtRdk9QrHQvnigXsIhz30AuBuIEgMGKQvO1BFvGQGKj4DGZL2rQnxcapxG3TOwZuIKFSAQ/40cM1Cta81Kr7vn9NA6BGdK9MtrQsK9hG2T9SLyMOLm+h7PVhF/p4ac0NfuDglN1xXsR5AUJmqZ8wU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=O9Q+lfMJ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="O9Q+lfMJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id AC735C433C7; Mon, 8 Apr 2024 10:27:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712572024; bh=8syfNYlroDnov/HT5iFE0VOvyYpI/Y1WvfASS/PQ26w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=O9Q+lfMJUFnzPZh0rmTuAPVAgTqWTXfqJxsTyFbLW6rYPgAKLnbmKmd5cOm4M/HO6 hslrsphM3Y9joDqmaYBDz8C+aCTN1rLx1SoeTIGukfkgwZZOS4PNK7/07Zi0cHHdFZ rhYD+2y4e79UqwBGpI2eA2u+osXaOCuOvdzKqn2O2QJrvDXqtAfk7B1NJ8081WqTLU lEd5A7Wy6dg5vDg1qswEHUWBW09mPhGFUKixaM+ykyTHYRPuBlyqj0nRHVIqQ/7k9i 0ZPNuf+xI6rrSmzTdPQsYlBwXQuOyoSxp9XUJIMCcgepH8g7aEKMgsQqdoycYTVVbf n71QCSYKXCmPw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 3/5] selftests/bpf: Add mptcp subflow subtest Date: Mon, 8 Apr 2024 18:26:50 +0800 Message-Id: <4038e451a595b10c3bb8ca19b29b46f5b1ea87b0.1712571740.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang 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 --- .../testing/selftests/bpf/prog_tests/mptcp.c | 115 +++++++++++++++++- 1 file changed, 110 insertions(+), 5 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index e8e4b8486511..8e44ac8420e3 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" =20 #define NS_TEST "mptcp_ns" +#define ADDR_1 "10.0.1.1" +#define ADDR_2 "10.0.1.2" +#define PORT_1 10001 =20 #ifndef IPPROTO_MPTCP #define IPPROTO_MPTCP 262 @@ -38,6 +42,9 @@ #define TCP_CA_NAME_MAX 16 #endif =20 +static const unsigned int total_bytes =3D 10 * 1024 * 1024; +static int duration; + struct __mptcp_info { __u8 mptcpi_subflows; __u8 mptcpi_add_addr_signal; @@ -329,8 +336,7 @@ static void test_mptcpify(void) close(cgroup_fd); } =20 -static const unsigned int total_bytes =3D 10 * 1024 * 1024; -static int stop, duration; +static int stop; =20 static void *server(void *arg) { @@ -411,9 +417,107 @@ static void send_data(int lfd, int fd, char *msg) PTR_ERR(thread_ret)); } =20 -#define ADDR_1 "10.0.1.1" -#define ADDR_2 "10.0.1.2" -#define PORT_1 10001 +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); + 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 =3D sizeof(cc); + + server_fd =3D start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); + if (!ASSERT_GE(server_fd, 0, "start_mptcp_server")) + return; + + client_fd =3D connect_to_fd(server_fd, 0); + if (!ASSERT_GE(client_fd, 0, "connect to fd")) + goto close_server; + + if (set_nonblock(server_fd)) + goto close_server; + + err =3D getsockopt(server_fd, SOL_TCP, TCP_CONGESTION, cc, &len); + if (!ASSERT_OK(err, "getsockopt(srv_fd, TCP_CONGESTION)")) + goto close_server; + + send_recv_data(server_fd, client_fd, total_bytes); + + 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); +close_server: + close(server_fd); +} + +static void test_subflow(void) +{ + int cgroup_fd, prog_fd, err; + struct mptcp_subflow *skel; + struct nstoken *nstoken; + + cgroup_fd =3D test__join_cgroup("/mptcp_subflow"); + if (!ASSERT_GE(cgroup_fd, 0, "join_cgroup: mptcp_subflow")) + return; + + skel =3D mptcp_subflow__open_and_load(); + if (!ASSERT_OK_PTR(skel, "skel_open_load: mptcp_subflow")) + goto close_cgroup; + + err =3D mptcp_subflow__attach(skel); + if (!ASSERT_OK(err, "skel_attach: mptcp_subflow")) + goto skel_destroy; + + prog_fd =3D bpf_program__fd(skel->progs.mptcp_subflow); + err =3D bpf_prog_attach(prog_fd, cgroup_fd, BPF_CGROUP_SOCK_OPS, 0); + if (!ASSERT_OK(err, "prog_attach")) + goto skel_destroy; + + nstoken =3D 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); +} =20 static struct nstoken *sched_init(char *flags, char *sched) { @@ -544,6 +648,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); --=20 2.40.1 From nobody Fri May 17 07:47:04 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A557D535CF for ; Mon, 8 Apr 2024 10:27:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572026; cv=none; b=nwYgMWEFKvDFNuxr/eDPvJyZlZ+Av6cUK/7U895EvQnuOAYHTHP/fsxFfgMkcWcxnDN07DzejQZlLtesKXY8f1aN6WVkKDv/NYusE9V6TDsKyS7IN2f59vlox54oC1d4ViwCn+j8S89yhHI4/An3FXH/CgpbFdeehW1w688/o88= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572026; c=relaxed/simple; bh=zl2nXRT/LMtrPeqXAuWkUD4Fho/ITH+xADgeYk181Tg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=urkhBV0I1IDwjQgvI0i1jnCB+DXxvtf+PwjwDgZLaZIas8C6HxQ/JV9B8nXNwcHgJx3Pl8u3BFY2AOSpQdf5V2bl+VOORuJHC1sir1rT02W9mqrhtp/FfKUstTjnEcqJk7OVIcQ85nI0H0bGwcX8Hcm8NyhMoiPyfLJxfCPueYk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZUlZDA1p; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZUlZDA1p" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 37FC2C433C7; Mon, 8 Apr 2024 10:27:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712572026; bh=zl2nXRT/LMtrPeqXAuWkUD4Fho/ITH+xADgeYk181Tg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZUlZDA1pffuvZCBElCcFi6fWEruk9NhRNZCWj4AWecYTC2NhNoAAXJQCApxCyrOL5 XKo7ZpuHMy8Y6RWZYNG5dArqC1Mci0C9DXD89ybGZf2BpiqYFCDnyHt/emfouLQ0/c 0bZtpalDHazn/6oLBAPdYDfJ/b8BfRN+Nh3W2iZUYYUxfAxZdfSsF2+6aJ2wR91ZVd nX7Ag/BwY9RILH73Xn5R8ZVsGrCA5JXY9yro7Mf0HsPiQa22RXp/sLFS0XILtRu7hb mtpt/i3g75f1D9iFIchn9dB4/iTtLDAKdoJ9WTvVENgFNzAXnhtR5CrS13RwGZL0Bt WnN0kUjWUnZeA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 4/5] selftests/bpf: Handle SIGINT when creating netns Date: Mon, 8 Apr 2024 18:26:51 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang It's necessary to delete netns during the MPTCP bpf tests interrupt, otherwise the next tests run will fail due to unable to create netns. This patch adds a new SIGINT handle sig_int, and deletes NS_TEST in it. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index 8e44ac8420e3..e7e256a233db 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -76,11 +76,18 @@ struct mptcp_storage { char ca_name[TCP_CA_NAME_MAX]; }; =20 +static void sig_int(int sig) +{ + signal(sig, SIG_IGN); + SYS_NOFAIL("ip netns del %s", NS_TEST); +} + static struct nstoken *create_netns(void) { SYS(fail, "ip netns add %s", NS_TEST); SYS(fail, "ip -net %s link set dev lo up", NS_TEST); =20 + signal(SIGINT, sig_int); return open_netns(NS_TEST); fail: return NULL; --=20 2.40.1 From nobody Fri May 17 07:47:04 2024 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 64542535DC for ; Mon, 8 Apr 2024 10:27:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572028; cv=none; b=ZmJqBS6zbQ9tpjN+Ou13J9HhCsQxDb/Sstx1F7/WBLtrRz9BSp7/zIHSrWC2phdVOshXs2NQDkPthOpiyS6TY2ruIksejDIkpsMbxLrRkVqzHrC+mjn1fMJM2SyfBzFRIyBqeJSHHT0PXr5Ly7ODZx4Uz2xOV1NhTaY7FkRz4pU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712572028; c=relaxed/simple; bh=nkus8dnae1fNstJ4CzyCHAugs4wg39Y9hZ2fTlVjDFs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gB6Hd9XA/8gyhxgVEigP22OK5IPH7OSGgEKE5njODfV34QVYuCraYWyVtmdO/TTLS7PHV0ssqBW6oOAbPlP/xJ2k6quz9hZM7cWQcHrAhlsFdd6OBDL+padWGA8kUtjJdOR0zEydcj6K9MM9V02l+A+IC2vViuK3aXkFVU8BzZY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kB47S4AY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="kB47S4AY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD9C3C433F1; Mon, 8 Apr 2024 10:27:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1712572027; bh=nkus8dnae1fNstJ4CzyCHAugs4wg39Y9hZ2fTlVjDFs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kB47S4AYQ++vpo7Zrrw25WacQIhy08E2XkAQMRgfK7opF4ndbprnyXXo3s9krXCZj 81ugzw0eYoz3TyAUwsrIy3K+Fz66WabgNEB6Z2uqQZj6iXZCUabafE3SzpAnQj+Og0 y+Qga9aV8FLLWp0dlP7tpYEFHXwZMvaHKdOmG6DI6lSaQjRrykPtPaxWng0r0urGvZ SfrKt+Vo9mFabW39KkGn7XVmZnXv+OrG2OLk4cRx5xoXOy0kDSYF8FoFNHiBQPonNg 3lZd8Age1aN7RSR4wJVS0uuqwMptjm73WXP8uoy9mLTgOfNwDKu+To2U2iA/7fqSdQ SVfnS0wZ8yOfw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 5/5] Squash to "selftests/bpf: Add bpf scheduler test" 4 Date: Mon, 8 Apr 2024 18:26:52 +0800 Message-Id: <25c8e149eadba2b1cb9bdee282bd12a52da6ad8b.1712571740.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Use endpoint_init, _ss_search, set_nonblock and send_recv_data, drop send_data. Signed-off-by: Geliang Tang --- .../testing/selftests/bpf/prog_tests/mptcp.c | 104 ++---------------- 1 file changed, 10 insertions(+), 94 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index e7e256a233db..319531ffc500 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -343,87 +343,6 @@ static void test_mptcpify(void) close(cgroup_fd); } =20 -static int stop; - -static void *server(void *arg) -{ - int lfd =3D (int)(long)arg, err =3D 0, fd; - ssize_t nr_sent =3D 0, bytes =3D 0; - char batch[1500]; - - fd =3D accept(lfd, NULL, NULL); - while (fd =3D=3D -1) { - if (errno =3D=3D EINTR) - continue; - err =3D -errno; - goto done; - } - - if (settimeo(fd, 0)) { - err =3D -errno; - goto done; - } - - while (bytes < total_bytes && !READ_ONCE(stop)) { - nr_sent =3D send(fd, &batch, - MIN(total_bytes - bytes, sizeof(batch)), 0); - if (nr_sent =3D=3D -1 && errno =3D=3D EINTR) - continue; - if (nr_sent =3D=3D -1) { - err =3D -errno; - break; - } - bytes +=3D nr_sent; - } - - CHECK(bytes !=3D total_bytes, "send", "%zd !=3D %u nr_sent:%zd errno:%d\n= ", - bytes, total_bytes, nr_sent, errno); - -done: - if (fd >=3D 0) - close(fd); - if (err) { - WRITE_ONCE(stop, 1); - return ERR_PTR(err); - } - return NULL; -} - -static void send_data(int lfd, int fd, char *msg) -{ - ssize_t nr_recv =3D 0, bytes =3D 0; - pthread_t srv_thread; - void *thread_ret; - char batch[1500]; - int err; - - WRITE_ONCE(stop, 0); - - err =3D pthread_create(&srv_thread, NULL, server, (void *)(long)lfd); - if (CHECK(err !=3D 0, "pthread_create", "err:%d errno:%d\n", err, errno)) - return; - - /* recv total_bytes */ - while (bytes < total_bytes && !READ_ONCE(stop)) { - nr_recv =3D recv(fd, &batch, - MIN(total_bytes - bytes, sizeof(batch)), 0); - if (nr_recv =3D=3D -1 && errno =3D=3D EINTR) - continue; - if (nr_recv =3D=3D -1) - break; - bytes +=3D nr_recv; - } - - CHECK(bytes !=3D total_bytes, "recv", "%zd !=3D %u nr_recv:%zd errno:%d\n= ", - bytes, total_bytes, nr_recv, errno); - - WRITE_ONCE(stop, 1); - - pthread_join(srv_thread, &thread_ret); - CHECK(IS_ERR(thread_ret), "pthread_join", "thread_ret:%ld", - PTR_ERR(thread_ret)); -} - static int endpoint_init(char *flags) { SYS(fail, "ip -net %s link add veth1 type veth peer name veth2", NS_TEST); @@ -532,28 +451,22 @@ static struct nstoken *sched_init(char *flags, char *= sched) =20 nstoken =3D create_netns(); if (!ASSERT_OK_PTR(nstoken, "create_netns")) + return NULL; + + if (!ASSERT_OK(endpoint_init("subflow"), "endpoint_init")) goto fail; =20 - 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=3D%s", NS_TEST= , sched); =20 return nstoken; fail: + cleanup_netns(nstoken); return NULL; } =20 -static int has_bytes_sent(char *addr) +static int has_bytes_sent(char *dst) { - char cmd[128]; - - snprintf(cmd, sizeof(cmd), "ip netns exec %s ss -it src %s sport %d dst %= s | %s", - NS_TEST, ADDR_1, PORT_1, addr, "grep -q bytes_sent:"); - return system(cmd); + return _ss_search(ADDR_1, dst, "sport", "bytes_sent:"); } =20 static void send_data_and_verify(char *sched, char *addr1, char *addr2) @@ -570,10 +483,13 @@ static void send_data_and_verify(char *sched, char *a= ddr1, char *addr2) if (CHECK(client_fd < 0, sched, "connect_to_fd: %d\n", errno)) goto close_server; =20 + if (set_nonblock(server_fd)) + goto close_server; + if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) goto close_server; =20 - send_data(server_fd, client_fd, sched); + send_recv_data(server_fd, client_fd, total_bytes); =20 if (clock_gettime(CLOCK_MONOTONIC, &end) < 0) goto close_server; --=20 2.40.1