From patchwork Sun Mar 24 16:01:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13600855 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 332EE18638 for ; Sun, 24 Mar 2024 16:02:07 +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=1711296128; cv=none; b=dT1ox9GK+Ffr31CJ7XGit7hgo62vn7v7s6Lj3lqloLhYyYYrSsWN/j0L2SxU3OYUejuqrh/s6g/G24Nq1V2pNgDwffm1RWyRXVEhvE7+Ype8pRELEMh972JJfl4DQg51W6W1ETNyqC6t75PeBqxhxTp18/jhnp/sWQ3oSQAIY+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711296128; c=relaxed/simple; bh=nYOWAU7sfzIVHuhCPmcHon1XQI6uRYZDP32k3/YsPdQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Bqsh+i8Vfgrxgx4qTm3NNFw54NDtlF/6dBHUKJ0aJcliBP53V6Je2+UsPwoeOUaFiRqqletlTl97wq4MnIJcE7ZiprspD8lmFOeqgNwiNkBtqWzX+tJ81pzzsmaGbE72gt9gUNGAwCec7L/y2K1NRttfCdncZSC/EKhAtmlichw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hTeOm+Aw; 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="hTeOm+Aw" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 633EAC43390; Sun, 24 Mar 2024 16:02:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711296127; bh=nYOWAU7sfzIVHuhCPmcHon1XQI6uRYZDP32k3/YsPdQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hTeOm+Aws61sPh8zivc2imA1dVzOQA8PuE+0UplPBsizMpK0YOOZkvv+eemTdQIiP NeZdNKLrJl9QWxUwT95f9GZINabCCkfhq2awXkBG/nIn+lLna2/p16toKLob5Tm3sW YFF4K98XZ5c/PMrQQjYsM2BxeElwSg9fBS4mCJGTTC4ROpPXZK4KnG+EgXdUuB69eW oy+y8dFO9RdRU0h08F/h6e/aJL9PXb63VEClPGvtIwsKK/EzF2LvDBpy9v9kGHQQdM H2PEWT3TCDs6QUzC4+zXBOo8qbGiJAj7Du+Umz7iRi6WPAYGoGUWs3b2rBhu11am+4 oxv9O3RmnHA8g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 1/4] Squash to "selftests/bpf: Add bpf scheduler test" fix Date: Mon, 25 Mar 2024 00:01:14 +0800 Message-Id: <311e074a3ca0465bdc5e4c2283e334bae5ccd306.1711296000.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 From: Geliang Tang BPF tests fail sometimes with "bytes != total_bytes" errors: # test_default:PASS:sched_init:default 0 nsec # send_data:PASS:pthread_create 0 nsec # send_data:FAIL:recv 936000 != 10485760 nr_recv:-1 errno:11 # default: 3041 ms # server:FAIL:send 7579500 != 10485760 nr_sent:-1 errno:11 # send_data:FAIL:pthread_join thread_ret:-11 \ test_default:PASS:has_bytes_sent addr_1 0 nsec # test_default:PASS:has_bytes_sent addr_2 0 nsec # close_netns:PASS:setns 0 nsec Here errno 11 is EAGAIN, sending should continue in this case, not break. This patch makes BPF tests stable. Signed-off-by: Geliang Tang --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index 6e28215d7404..7fec91ab19cf 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -353,7 +353,7 @@ static void *server(void *arg) while (bytes < total_bytes && !READ_ONCE(stop)) { nr_sent = send(fd, &batch, MIN(total_bytes - bytes, sizeof(batch)), 0); - if (nr_sent == -1 && errno == EINTR) + if (nr_sent == -1 && (errno == EINTR || errno == EAGAIN)) continue; if (nr_sent == -1) { err = -errno; @@ -397,7 +397,7 @@ static void send_data(int lfd, int fd, char *msg) while (bytes < total_bytes && !READ_ONCE(stop)) { nr_recv = recv(fd, &batch, MIN(total_bytes - bytes, sizeof(batch)), 0); - if (nr_recv == -1 && errno == EINTR) + if (nr_recv == -1 && (errno == EINTR || errno == EAGAIN)) continue; if (nr_recv == -1) break; From patchwork Sun Mar 24 16:01:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13600856 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 05DD718638 for ; Sun, 24 Mar 2024 16:02:09 +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=1711296130; cv=none; b=AwleRSreRf1pUy2YFVxf7n4PT1cPvdiXDZQXYoQTZDv9xW7f3ZCo6VAiXLvJEzPdmUSZVROBAtrOb+AYQAd2AbyHHyOZAEdFvedMQ6Ns0TBQ4EEU7PlfNwFIPmmzctvarjujQkJ3Cna8NIWL3ylVYDoHivS1ZwPcvBIsUATj3Ik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711296130; c=relaxed/simple; bh=S0+kctrHQgktXLmfRi63oj2s6hctBrghW6AsPgATIqs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=srBZ/L5CWatx5omeEooAPjzKDQJbiCI5tAcXwe4ei2uMOtfU9WK4NPV1m0kiUzLD1CoDJ/hD3Lrm2qdVBnqDr85r7kkTzWR/kw63/gzVoqgCVlEKnksDKbKmVh0psXCCFA9eE4CiC6Y3nonEanCQr/+a6d8BvZEPfZ7u5/vFlFQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k7V4WotI; 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="k7V4WotI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 55A73C433C7; Sun, 24 Mar 2024 16:02:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711296129; bh=S0+kctrHQgktXLmfRi63oj2s6hctBrghW6AsPgATIqs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k7V4WotIPL9rRxFtY/SsKg1zY3WyQ3bxMIMU1jPGXDNTpKDViHR3tCCloK2exVV3m N1vgdOFAbhBJs2LlZKQhtfhuI15kne4NzDW0u5ixCR0GnGOi1/tyD6OVnB9HAbiwA2 EHDWBPkx1Z9RrAwREFwNtDTAMP5FAXbs9v7NX0X49FMqDxtdTSBRIOVjPloJrzuiVO Nd2/eU/5yFJU3rovAdWDEUBBsNPrb6N6URRFVOxIxjMvJncq3cxlznNvRppWgYeaD4 Zl+43bCphrTj1CW3K0mXRcMzi4SGFooqOuNEe6MD/V1CNIEVt1zoKdUtRKuECNXrmU N/GB2q0DNvMJA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 2/4] selftests/bpf: Add mptcp subflow example Date: Mon, 25 Mar 2024 00:01:15 +0800 Message-Id: <4c1e2173c4890caeb2353dfb19fc1f281c0f303f.1711296000.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 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 | 73 +++++++++++++++++++ 1 file changed, 73 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/testing/selftests/bpf/progs/mptcp_subflow.c new file mode 100644 index 000000000000..9553099ffd5f --- /dev/null +++ b/tools/testing/selftests/bpf/progs/mptcp_subflow.c @@ -0,0 +1,73 @@ +// 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") = "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] = "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 = 1, key, mark, *cnt; + struct mptcp_sock *msk; + struct bpf_sock *sk; + int err; + + if (skops->op != BPF_SOCK_OPS_TCP_CONNECT_CB) + return 1; + + sk = skops->sk; + if (!sk) + return 1; + + msk = bpf_skc_to_mptcp_sock(sk); + if (!msk) + return 1; + + key = msk->token; + cnt = 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 = *cnt; + } else { + /* A new MPTCP connection is just initiated and this is its primary + * subflow + */ + bpf_map_update_elem(&mptcp_sf, &key, &init, BPF_ANY); + mark = init; + } + + /* Set the mark of the subflow's socket to its apparition order */ + err = bpf_setsockopt(skops, SOL_SOCKET, SO_MARK, &mark, sizeof(mark)); + if (err < 0) + return 1; + if (mark == 1) + err = bpf_setsockopt(skops, SOL_TCP, TCP_CONGESTION, cc, TCP_CA_NAME_MAX); + + return 1; +} From patchwork Sun Mar 24 16:01:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13600857 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 1D1E0182DD for ; Sun, 24 Mar 2024 16:02:11 +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=1711296132; cv=none; b=PvMpb8sTQqyMy/XFdct5K14Dz8/S40ihJoys8r+73tM22jkNyq337k4iJ2AV53lQSNnDEHWaa8lhbJiq+X9vDRFO5FSuLBYXRL6ZW2G/WlwyAASeNkxuYrfaCdl31GZJliGYPPGNLiDBonJP7t59YOiKgUdlBTFR6tb9w7YljCQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711296132; c=relaxed/simple; bh=P4v83NjbHKFWMQokx1xYbIn7v0jXPHosMxGDkvXcw04=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=C7OKv1v5WAIHPPcwdxGNEeCFrapjU79GKEGty5Ag5974GvZ03x1AjIhpuN896tPDSf+oF78RZvp31QW1OziWol0fXZHr0h62MEyAiF3X/qQLDzLYJOmjsnQmfsQiUIpCCD894Yfc3zmCqI7FbxCnQb/0v8kEOUKSGBEZaImIQyo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QxaJw5+v; 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="QxaJw5+v" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 488A8C433C7; Sun, 24 Mar 2024 16:02:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711296131; bh=P4v83NjbHKFWMQokx1xYbIn7v0jXPHosMxGDkvXcw04=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QxaJw5+vtHC2yiwRG0yQRrXq36M3VltItaWYF8KX97UHJOAtPYS3w/U/JY52dIbm8 ioxkLgM8U2b1ORvDzi5VlK8JtCs2F9+jtyiRCrgPBBo/RZ/HuCoIe3pX9XlUqJsEJj U/iz4JNZfX4TrkcfrA2m3s1N52pTd0X0BXsRmoMTexIZc3bYQfNSpY58Xg3HtrHwuI FFL1lidQhUXoJ0jyZdPMeL2RhAeiM5PO4RJ+UodoQreAsKSNRCdo1tafMLrSw1p+5A 0uAhqV4OTo26apTHhzXOVh13zYg6qMz3wX7ddbuvGrEJNlYrjhm/9jhEwJi2UZNknr TTiH0TGdzcUcA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 3/4] selftests/bpf: Add mptcp subflow subtest Date: Mon, 25 Mar 2024 00:01:16 +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 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 has_in_subflow() 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 | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index 7fec91ab19cf..7f3cd8baae25 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -10,6 +10,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" @@ -328,6 +329,98 @@ static void test_mptcpify(void) close(cgroup_fd); } +#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_test_subflow(int cgroup_fd) +{ + int server_fd, client_fd, prog_fd, err; + struct mptcp_subflow *skel; + + skel = mptcp_subflow__open_and_load(); + if (!ASSERT_OK_PTR(skel, "skel_load")) + goto cleanup; + + 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, "bpf_prog_attach")) + goto cleanup; + + server_fd = start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); + if (!ASSERT_GE(server_fd, 0, "start_mptcp_server")) + goto cleanup; + + client_fd = connect_to_fd(server_fd, 0); + if (!ASSERT_GE(client_fd, 0, "connect to fd")) + goto close_server; + + 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, "reno"), "ss_search reno"); + ASSERT_OK(ss_search(ADDR_2, "cubic"), "ss_search cubic"); + + close(client_fd); +close_server: + close(server_fd); +cleanup: + mptcp_subflow__destroy(skel); +} + +void test_subflow(void) +{ + struct nstoken *nstoken = NULL; + int cgroup_fd; + + cgroup_fd = test__join_cgroup("/mptcp_subflow"); + if (!ASSERT_GE(cgroup_fd, 0, "test__join_cgroup")) + return; + + nstoken = create_netns(); + if (!ASSERT_OK_PTR(nstoken, "create_netns")) + goto fail; + + if (!ASSERT_OK(endpoint_init("subflow"), "endpoint_init")) + goto fail; + + run_test_subflow(cgroup_fd); + +fail: + cleanup_netns(nstoken); + close(cgroup_fd); +} + static const unsigned int total_bytes = 10 * 1024 * 1024; static int stop, duration; @@ -657,6 +750,8 @@ void test_mptcp(void) test_base(); if (test__start_subtest("mptcpify")) test_mptcpify(); + if (test__start_subtest("subflow")) + test_subflow(); if (test__start_subtest("default")) test_default(); if (test__start_subtest("first")) From patchwork Sun Mar 24 16:01:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13600858 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 C788E182DD for ; Sun, 24 Mar 2024 16:02:13 +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=1711296133; cv=none; b=IPE2tyWrSNdDGyEQAMpglkz2rSjNGVN1gWCPgcM3bpeDdwOEhBFl1Wq5wph3MNcywNaY7ERKC+sD+DWFetSOPlQimkVmfdI7tKQMJf6uM0pTCWdzYAuveOXeX+daj4oiBBnglPxwfyo2DFHhtTTXN5Ib8/ImIJR54TXpbHkTwtw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1711296133; c=relaxed/simple; bh=QSKAu6WB0FhEaszRe4DjpARP4sWiXtUCBoRCJ/hQClQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=dZhqKIl3uWILnUBYY3YTzzUIGTaOdDg4Qrzfq+4JKfp30Z2MeZAx40pFL5DIf5Jiv67GNWF3Yuo0fVNJ75BWcPh7ecL98W63aIBY7eJxlU1dOBpcseSM+v9s52J3Z4i4s3MnmjJ6QARO0HoJdf+NlHv6TTxdwsVUYLSVTusQjtY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Ezdb4fJz; 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="Ezdb4fJz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 571BCC43390; Sun, 24 Mar 2024 16:02:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1711296133; bh=QSKAu6WB0FhEaszRe4DjpARP4sWiXtUCBoRCJ/hQClQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Ezdb4fJzHCYOGDw5ve0J0FTOdyaKyFOiyWKiL4TIiSCaBfj5J90STETkq9HEo33jm UroZ+1lTq3IVv4geeRxec7Mj61SufQm5n09JaXLuIL3NXEtMjVCZSTZ5I5gCy0hMO+ tvNFYIUIGhrrWA5Zez0seSFgLisZT2PlP1m+4NT7a3IHWjfJ8Vg/+Gve7P6R/+rBL2 4DYLWSJcmx0vxfDKZi5vzbJW5Bhv0yLujZqrGCFk95Vty3yViaOv4/7kprRtmuZB5t 0ryJ2yqY3GGZGieifVpdMMaMaiCz9VfWYQ7FAn2WHl9xRMdEb1exHa9OtWe8+OJrxD 9TI4aSNj08sAQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 4/4] Squash to "selftests/bpf: Add bpf scheduler test" Date: Mon, 25 Mar 2024 00:01:17 +0800 Message-Id: <79386fb1f182cf31f950940f7593c97cf9f01272.1711296000.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 From: Geliang Tang Some cleanups. Use ASSERT_EQ and ASSERT_OK like below commit: b0e2a0395312 selftests/bpf: Replaces the usage of CHECK calls for ASSERTs in bpf_tcp_ca Use newly added endpoint_init and _ss_search helpers. Signed-off-by: Geliang Tang --- .../testing/selftests/bpf/prog_tests/mptcp.c | 39 ++++++------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index 7f3cd8baae25..21308b9e776f 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -422,7 +422,7 @@ void test_subflow(void) } static const unsigned int total_bytes = 10 * 1024 * 1024; -static int stop, duration; +static int stop; static void *server(void *arg) { @@ -455,8 +455,7 @@ static void *server(void *arg) bytes += nr_sent; } - CHECK(bytes != total_bytes, "send", "%zd != %u nr_sent:%zd errno:%d\n", - bytes, total_bytes, nr_sent, errno); + ASSERT_EQ(bytes, total_bytes, "send"); done: if (fd >= 0) @@ -479,11 +478,12 @@ static void send_data(int lfd, int fd, char *msg) int err; WRITE_ONCE(stop, 0); + if (clock_gettime(CLOCK_MONOTONIC, &start) < 0) return; err = pthread_create(&srv_thread, NULL, server, (void *)(long)lfd); - if (CHECK(err != 0, "pthread_create", "err:%d errno:%d\n", err, errno)) + if (!ASSERT_OK(err, "pthread_create")) return; /* recv total_bytes */ @@ -501,23 +501,15 @@ static void send_data(int lfd, int fd, char *msg) return; delta_ms = (end.tv_sec - start.tv_sec) * 1000 + (end.tv_nsec - start.tv_nsec) / 1000000; - - CHECK(bytes != total_bytes, "recv", "%zd != %u nr_recv:%zd errno:%d\n", - bytes, total_bytes, nr_recv, errno); - printf("%s: %u ms\n", msg, delta_ms); - WRITE_ONCE(stop, 1); + ASSERT_EQ(bytes, total_bytes, "recv"); + WRITE_ONCE(stop, 1); pthread_join(srv_thread, &thread_ret); - CHECK(IS_ERR(thread_ret), "pthread_join", "thread_ret:%ld", - PTR_ERR(thread_ret)); + ASSERT_OK(IS_ERR(thread_ret), "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; @@ -526,12 +518,9 @@ static struct nstoken *sched_init(char *flags, char *sched) 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); + if (!ASSERT_OK(endpoint_init("subflow"), "endpoint_init")) + goto fail; + SYS(fail, "ip netns exec %s sysctl -qw net.mptcp.scheduler=%s", NS_TEST, sched); return nstoken; @@ -539,13 +528,9 @@ static struct nstoken *sched_init(char *flags, char *sched) return NULL; } -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:"); } static void test_default(void)