From patchwork Wed Jul 3 18:57:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthieu Baerts \(NGI0\)" X-Patchwork-Id: 809595 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 A917B187570; Wed, 3 Jul 2024 18:58:22 +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=1720033102; cv=none; b=prjKePaHqyrJLLLq5zTHxJzKM7WC0eJv54iKwGKLb4uDLeBbNRM++rnZvJtQ3sg8mbXAECPGFgUfHqupjdjMg0JlpWRqrD9euHxpq7MfwS+RK28OiuEYKG1A2Invfm33vqk6+DKnh0IE2nCSX0CcwMzT+oCtHOshvm/TroM7qc4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720033102; c=relaxed/simple; bh=VoE1ILimCqHk/YEb77HzYZmafHMCPkpjf277zBCgqn4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aRZPt7TvIzsbt+e043hAmBJRf2w6ZryIut/K1dOxWUy8Lck0aonMfr5gUkAOFnlC778sylAleEkWIPMLKicFXdZt1iMQFvitVoLwtH5qu/JrKr3NIOm8Kao5eoMgDWYuYTYhAJ68wtQ0lB5V+n9RT49yN0tnnS0+2xXshF4GYyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=njRdy4Yj; 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="njRdy4Yj" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 302A2C4AF0A; Wed, 3 Jul 2024 18:58:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1720033102; bh=VoE1ILimCqHk/YEb77HzYZmafHMCPkpjf277zBCgqn4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=njRdy4YjVI9U+jv7lJefsam78iojDnr0G80PZ2qjWXnSSyQUur7KMnLJpRu+gwgDx TTErMXS61l6+2dndZBdvph8UMXNKH3IIWYecF9AN32Fj8GeRuzj211lO4rrrNf7554 COp3mNM0DIce+ZZEcpasFtakCc9CY4adM0fn2qnYakyrZQhiK9AaRCWeEDqf33+REB 0W3qweQUKLIr/b/W2istHXjTkpKRnv+OOT2rsZ3d6SZKIAsgV+tMcYmBD2jykZYcUd TgJdzAVhepdGDhs/v+GELmPfSvpz4HXAt3XjQ8BnC8acltc1VvwITzi4ELkkALJmFq WJdOo72sj4SSw== From: "Matthieu Baerts (NGI0)" Date: Wed, 03 Jul 2024 20:57:33 +0200 Subject: [PATCH bpf-next v3 2/3] selftests/bpf: Add mptcp pm_nl_ctl link Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240703-upstream-bpf-next-20240506-mptcp-subflow-test-v3-2-ebdc2d494049@kernel.org> References: <20240703-upstream-bpf-next-20240506-mptcp-subflow-test-v3-0-ebdc2d494049@kernel.org> In-Reply-To: <20240703-upstream-bpf-next-20240506-mptcp-subflow-test-v3-0-ebdc2d494049@kernel.org> To: mptcp@lists.linux.dev, Mat Martineau , Geliang Tang , Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , "David S. Miller" , Jakub Kicinski , Jesper Dangaard Brouer Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" , Geliang Tang X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2481; i=matttbe@kernel.org; h=from:subject:message-id; bh=DrossgVs4wFMMCErNvKxWMQ2m+UYYVayQgbZBaY+EqY=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmhZ89PjoNh4U76dfEkvQVWWraM1scfYPvEllIG 12Gw2KLEOqJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZoWfPQAKCRD2t4JPQmmg c26RD/9JDCtmw3uszrPvUgqQNbBiZk1dkLb4j4Mm4R6u2oK5aGjx2NjiU0zvN8Me2Yhblq9pdG7 dpmL2dr+kUuZt9go/aauQV0TOhx9UaL0GXGkj4sALZLyjctLYZRAuvjGJ7YIkebv68ApzHaQsp1 UPZSY4YKtX9QCajnETOsCkeoyFWHmY9UOZlhjJowVuulv6LpnuRZQoMEqGouKnH9BvAQ+uDhwRG 4iF4VvgRl1RYJcCfJvwDnlRIsnOmlZNUjmXDFIwb3hpy8b5AxBdgJS7FGB+uFBWzxBNZKZJGMN3 2PzkLeua01nUFjULDRe+aK13NIwmUoJRmeKigkTQtubOEmu//22rBwFsivszzJjWSGloFrt3PFm vnMdAV2wOdJm7N6lT/cWwAs2YdSM3+PzXBXRI7PV2uMcgnH9kFJU9NQISNvD5oIPap4fDY4gLnM 9rkSE+ai+6ptPWK+AE191jxfaLpmxf4XCEgfiWZz1/+JjLUAlezcK6Wx1wb7cfVvI4zrVeVl+7k 7EK56UDFC1qbiXmXo3ZdVCKFurtXQAtLMpEkixTgaCnY6srvCYm4Lv1dQroS/nzmyGX/rEqE66z 0VJr8kKLPkRxodcRFF/NWiEkhLslto9NA63ueavi/xkIid81JxGz95bKMUuPF5dgxIM5oEDSUSm aKeN6HDlYY+hN0Q== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 From: Geliang Tang This patch adds a symlink to MPTCP's pm_nl_ctl tool into bpf selftests, and updates Makefile to compile it. This is useful to run MPTCP BPF selftests on systems with an old version of IPRoute2. This tool can be used as an alternative to 'ip mptcp'. MAINTAINERS needs to be updated since a new file is added in a non covered place. Signed-off-by: Geliang Tang Reviewed-by: Matthieu Baerts (NGI0) Signed-off-by: Matthieu Baerts (NGI0) --- MAINTAINERS | 1 + tools/testing/selftests/bpf/Makefile | 3 ++- tools/testing/selftests/bpf/mptcp_pm_nl_ctl.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/MAINTAINERS b/MAINTAINERS index cd3277a98cfe..4ea5db496698 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15756,6 +15756,7 @@ F: include/trace/events/mptcp.h F: include/uapi/linux/mptcp*.h F: net/mptcp/ F: tools/testing/selftests/bpf/*/*mptcp*.c +F: tools/testing/selftests/bpf/*mptcp*.c F: tools/testing/selftests/net/mptcp/ NETWORKING [TCP] diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index e0b3887b3d2d..204269d0b5b8 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -144,7 +144,7 @@ TEST_GEN_PROGS_EXTENDED = test_skb_cgroup_id_user \ flow_dissector_load test_flow_dissector test_tcp_check_syncookie_user \ test_lirc_mode2_user xdping test_cpp runqslower bench bpf_testmod.ko \ xskxceiver xdp_redirect_multi xdp_synproxy veristat xdp_hw_metadata \ - xdp_features bpf_test_no_cfi.ko + xdp_features bpf_test_no_cfi.ko mptcp_pm_nl_ctl TEST_GEN_FILES += liburandom_read.so urandom_read sign-file uprobe_multi @@ -645,6 +645,7 @@ TRUNNER_EXTRA_FILES := $(OUTPUT)/urandom_read $(OUTPUT)/bpf_testmod.ko \ $(OUTPUT)/xdp_synproxy \ $(OUTPUT)/sign-file \ $(OUTPUT)/uprobe_multi \ + $(OUTPUT)/mptcp_pm_nl_ctl \ ima_setup.sh \ verify_sig_setup.sh \ $(wildcard progs/btf_dump_test_case_*.c) \ diff --git a/tools/testing/selftests/bpf/mptcp_pm_nl_ctl.c b/tools/testing/selftests/bpf/mptcp_pm_nl_ctl.c new file mode 120000 index 000000000000..5a08c255b278 --- /dev/null +++ b/tools/testing/selftests/bpf/mptcp_pm_nl_ctl.c @@ -0,0 +1 @@ +../net/mptcp/pm_nl_ctl.c \ No newline at end of file From patchwork Wed Jul 3 18:57:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Matthieu Baerts \(NGI0\)" X-Patchwork-Id: 810549 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 6359B18754A; Wed, 3 Jul 2024 18:58:28 +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=1720033108; cv=none; b=FO333DNa8+atFFxPeVtct9ljkO6rHcZlbJCl3NP/7bn47f3VSxNiBmInye2B6jPEDA2ADdBKN3amvPhOPHhFV6dpifuNVCiS0pspB58r5O7IGKWE1np83heyl6wZMlsiw+VKFSmgVXBTXeGGED+u3CC2isZ9D9+VkOgrUWFp0II= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1720033108; c=relaxed/simple; bh=6QPk+srK9z43lFM/ESJev1DJPcxAMk78tLELME0IaFI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pqwWvxZDJlavdFYHkx/I07oHZgnh0yy0bUe6gLgDfVLQbubP9OFcd16VTeklh5Dmi1l+hY5nDBf6PTyIfyO6vTSijajbEWSaCtiIq1Rqdn2F3iE+09cF+fN9KIgzT02Yjn/EauIn0H55KsU/f/kCWxvVk4tJJhEQlzNCDfNSbWI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eiC0l/TR; 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="eiC0l/TR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BFB95C2BD10; Wed, 3 Jul 2024 18:58:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1720033107; bh=6QPk+srK9z43lFM/ESJev1DJPcxAMk78tLELME0IaFI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=eiC0l/TRpCMRBrtvfOeDi3p/8cDj2nWflAsx4JX8ddL97LeQqjYhvmfvIkiM8rZ4A u23JM6kkPpeY1DeCk5FAe86p7OKlyxaw5KD++tZSSk2S1zeAEi7TQ6jYQUuLOkGOTz gVPVnuY86cVKYINzGH1jWbLUddV7+86Dv2PPnV0iOQtYCCk3OhTiZN2kdfoMS4RwjI x815awVZThzfwuwg/r7SooS5uFXgrCnQ1p+Nd8cx3isyl7uqzHBZfjP/ERmO9d2q3p lsbSN677l5nCoGl04JxBymBxPLGInNA2+ZL0ezlI+qVVuvyazjdQO+hh50+HaysDbu TQZ5qdIxKcQLA== From: "Matthieu Baerts (NGI0)" Date: Wed, 03 Jul 2024 20:57:34 +0200 Subject: [PATCH bpf-next v3 3/3] selftests/bpf: Add mptcp subflow subtest Precedence: bulk X-Mailing-List: linux-kselftest@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20240703-upstream-bpf-next-20240506-mptcp-subflow-test-v3-3-ebdc2d494049@kernel.org> References: <20240703-upstream-bpf-next-20240506-mptcp-subflow-test-v3-0-ebdc2d494049@kernel.org> In-Reply-To: <20240703-upstream-bpf-next-20240506-mptcp-subflow-test-v3-0-ebdc2d494049@kernel.org> To: mptcp@lists.linux.dev, Mat Martineau , Geliang Tang , Andrii Nakryiko , Eduard Zingerman , Mykola Lysenko , Alexei Starovoitov , Daniel Borkmann , Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , "David S. Miller" , Jakub Kicinski , Jesper Dangaard Brouer Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, "Matthieu Baerts (NGI0)" , Geliang Tang X-Mailer: b4 0.14.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=4683; i=matttbe@kernel.org; h=from:subject:message-id; bh=dH35MZ5rm45k9pWY9PE4QpIU29g4nqtSyv2YEmWbywA=; b=owEBbQKS/ZANAwAIAfa3gk9CaaBzAcsmYgBmhZ89U47GykCQSwKXwLX/QpFcuJdORLCQz6qKV yEcqwneMUeJAjMEAAEIAB0WIQToy4X3aHcFem4n93r2t4JPQmmgcwUCZoWfPQAKCRD2t4JPQmmg c3/GD/41hNnel2jqoiVyS8jZ7d7rRIkls5m3Ozj9tjOdYWR+Axw4/VqYLvAMcWcpBaDGK9d+710 JPQSosre3iRyDZAx6WFvUI8D7BcUnZQsk6hkG8qPdTj2okrrOhFHTR68ITFVysjAxa1BYAcavtd 7QeWa6pY/TdrXUrsx9U1ijdZBjLN5dWmoJo8oO3RgijwJd0LWcDyoxS5pJAiWvOn2dLbeT06+SO 34MQsPIg0w8zo4suz66cS4U4T3QaKPzezBG6OYb0+qPRBXCkxM5EmSDInDlY7bD7ObJpw0Ki8FJ ke7KCVwvQ504F6pHgNIT7mluc91mnKUBbgbqJ0c50uC1GhJWSL7drMJ+K555AZEifTgEvUkY29Y mF5PPSW1p79OoiG03kWmS0l3W6vBqN60ZuJzM53FqVIRkSNA+/cKJbLH8KcHxFnIplobwPtwjwD p/pZ5aSjg5f2QdnnvPrrGts6ySTal2lqiOVBSgXw75MOnLe/ylkKepYEG5rbhRF+GzXK9HnuW+a 6/WGxkykfkH3Edz4ar32WR0AOXJhiZjQC+pgseEcErkmQKEoAH/VREAWej16eaE4D361mq9Ne71 qFKgCZ8T1GkGxoLlFUqyENuT0UcHJo+wjK4LS53PbqhDywLBWIz1XuKts3PyvmxvCYeUAvWZP2D Rys1JXaavlxRLaw== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 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 Reviewed-by: Mat Martineau Signed-off-by: Matthieu Baerts (NGI0) --- Notes: - v2 -> v3: - Use './mptcp_pm_nl_ctl' instead of 'ip mptcp', not supported by the BPF CI running IPRoute 5.5.0. - Use SYS_NOFAIL() in _ss_search() instead of calling system() --- tools/testing/selftests/bpf/prog_tests/mptcp.c | 104 +++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing/selftests/bpf/prog_tests/mptcp.c index d2ca32fa3b21..975427b3c66e 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -9,8 +9,12 @@ #include "network_helpers.h" #include "mptcp_sock.skel.h" #include "mptcpify.skel.h" +#include "mptcp_subflow.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 #ifndef IPPROTO_MPTCP #define IPPROTO_MPTCP 262 @@ -335,10 +339,110 @@ static void test_mptcpify(void) close(cgroup_fd); } +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); + /* It would be better to use "ip -net %s mptcp endpoint add %s %s", + * but the BPF CI is using an old version of IPRoute (5.5.0). + */ + SYS(fail, "ip netns exec %s ./mptcp_pm_nl_ctl add %s flags %s", NS_TEST, ADDR_2, flags); + + return 0; +fail: + return -1; +} + +static int _ss_search(char *src, char *dst, char *port, char *keyword) +{ + return SYS_NOFAIL("ip netns exec %s ss -enita src %s dst %s %s %d | grep -q '%s'", + NS_TEST, src, dst, port, PORT_1, keyword); +} + +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); +} + void test_mptcp(void) { if (test__start_subtest("base")) test_base(); if (test__start_subtest("mptcpify")) test_mptcpify(); + if (test__start_subtest("subflow")) + test_subflow(); }