From nobody Sun Dec 14 02:01:23 2025 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 05A6A19D8BE for ; Fri, 30 May 2025 08:03:56 +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=1748592237; cv=none; b=RRv6wfxQolMpXbCD4LKZZs/O5txK/wTg8BdhBdpSr/C8k8K7yw+12a4WgmBVKDS8Hg49oyZDDgaOGPrK7+Fx8gAvPBbIKRnvqSymNZ4hwsN3Yz7c+9Qm+weybrxApcJEBKbZDLuKgjyd/+ulMlV5BGxeiiw08XckRIo0pjzfBRo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748592237; c=relaxed/simple; bh=R7OcBtNr9GD56pS0bOUU1qz3Te3ubEJ5YHSKFmUb33k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TwHWty5iF7mBgej+uY8ypSU4OC5u5yDdKBIhQK9KA/FnOk1rKqT0k0aoO25+QNC4WStRVh9yCVTwHci0so4I9/8/n0+2eKqTZko9UQ0eMizGKRPzrF3vhr9nRQUJWamCxFt4kNo6019/IgnJ/1qVsMshZ68x+NpoK48VLTbxGEg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pYgUYWyC; 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="pYgUYWyC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 40CA0C4CEEB; Fri, 30 May 2025 08:03:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748592236; bh=R7OcBtNr9GD56pS0bOUU1qz3Te3ubEJ5YHSKFmUb33k=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pYgUYWyCZzdlvZPZHJtCB/6NxFWgCx4V6lXb7oFnK1nTQUaaQV0eBMITtRqK8R8VE j5gPAfwV0TENEoMvHzEpxSFZTKPFHJoIvg4H05TAJLofRR9w4HNfrlTOOaZ1aKExRN 6qgNtMtsCcqVFJ8jECtt3o/zoVg6cnLXweVJcz8fxcojggY19Mi6aOPE6m7kLx8dZv SSFVmJxOvtOKgPKSJvA5hFHsuJ/Yp+et8guw0LpexZBe/RVr4Pu/VV2OYjvijVqCVy 4svFlomYlb2cAK6LX6fNvSr4MlSQ1aUwnsBbkdevnfIR+F8IFKuDKDvgsX9rAKCDbr 2zv2yKwh3kZDg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 1/3] Squash to "bpf: Register mptcp common kfunc set" Date: Fri, 30 May 2025 16:03:45 +0800 Message-ID: <645521eb435c9bb11f2ebb488391e98b245c500a.1748592117.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 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 Define .filter as Martin suggested. Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 2b0cfb57df8c..113aad086b37 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -317,9 +317,25 @@ BTF_ID_FLAGS(func, bpf_mptcp_subflow_queues_empty) BTF_ID_FLAGS(func, mptcp_pm_subflow_chk_stale, KF_SLEEPABLE) BTF_KFUNCS_END(bpf_mptcp_common_kfunc_ids) =20 +static int bpf_mptcp_common_kfunc_filter(const struct bpf_prog *prog, u32 = kfunc_id) +{ + if (!btf_id_set8_contains(&bpf_mptcp_common_kfunc_ids, kfunc_id)) + return 0; + + if (prog->type !=3D BPF_PROG_TYPE_STRUCT_OPS) + return -EACCES; + +#ifdef CONFIG_BPF_JIT + if (prog->aux->st_ops =3D=3D &bpf_mptcp_sched_ops) + return 0; +#endif + return -EACCES; +} + static const struct btf_kfunc_id_set bpf_mptcp_common_kfunc_set =3D { .owner =3D THIS_MODULE, .set =3D &bpf_mptcp_common_kfunc_ids, + .filter =3D bpf_mptcp_common_kfunc_filter, }; =20 static int __init bpf_mptcp_kfunc_init(void) @@ -327,8 +343,6 @@ static int __init bpf_mptcp_kfunc_init(void) int ret; =20 ret =3D register_btf_fmodret_id_set(&bpf_mptcp_fmodret_set); - ret =3D ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_CGROUP_SOCKOPT, - &bpf_mptcp_common_kfunc_set); ret =3D ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS, &bpf_mptcp_common_kfunc_set); #ifdef CONFIG_BPF_JIT --=20 2.43.0 From nobody Sun Dec 14 02:01:23 2025 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 DC64319D8BE for ; Fri, 30 May 2025 08:03:58 +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=1748592238; cv=none; b=lt3qReYG8zr+89kKcmyGcGqSoWo/EVoZfieRzBj47bFmQZy5qtpzaRsAj7fSj//90l8CHxiJgfjuQSgssKppoXS9wq4J7wurj6gc1JqqOoxaJmksnlGJyapI+N5cT3Ne57a3imvEnWSS9qxhtlxqbrITOJJsXulEYR9EzkNpgS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748592238; c=relaxed/simple; bh=Ny6PyKWOwcmzdbiONiwseNXId6pHr0PyiKHYxRMbKko=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A6s4FOot0Ji97CmD7WaWE6ZvaXyT6AlRlbYpZvqqb6C5P6u2VjuUonBfEoRCevQmxfb/EyxEz35kEZTxa7787N22Uq9iODEHZtrCyUGqzbMIWOBDGhLoTENC7/TR71XOYtd1tnrJ7xn4K9/G8vy2mEtlIyJ0Ie359ooGD4o92w8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iD6Mk6NA; 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="iD6Mk6NA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3483DC4CEE9; Fri, 30 May 2025 08:03:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748592238; bh=Ny6PyKWOwcmzdbiONiwseNXId6pHr0PyiKHYxRMbKko=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iD6Mk6NAwevfYBtta//9P0QYeV8rVgprrZ50NfIKPguSEvlVPnWrQ4Oyk+vm0ymzv 6SB/l9xRRqyoEFuqCOmmFuaF4/MA3V9kg9ep/m5/Ix3Q5w9o6bb66J8EaYbpXe4ql1 n5tp94LEDHa40UzoVMYcHNRbW72K5gJ8bsuyy1mufCMPXK6hXSJIyjBI+CA2ou/5ej orxeGsdCRiteizZjvRQHqMiFlY9E5yDQ3GdSZHNJj38aRtMC1yveEXbfhqDdCx5jgm T4DTh/Ndhj+iYCCB7Z6JGfRFoqTPXmlhOKqCM4UrWjekmgovR2Ogukqy3iwXs2grSQ 3W+aDwklTGH8Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 2/3] Squash to "bpf: Add mptcp_subflow bpf_iter" Date: Fri, 30 May 2025 16:03:46 +0800 Message-ID: <844a8399d77722ad06eb11751c468c7f46d3f3cd.1748592117.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.43.0 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 Define .filter as Martin suggested. Signed-off-by: Geliang Tang --- net/mptcp/bpf.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/net/mptcp/bpf.c b/net/mptcp/bpf.c index 113aad086b37..e52821bae49c 100644 --- a/net/mptcp/bpf.c +++ b/net/mptcp/bpf.c @@ -305,9 +305,6 @@ __bpf_kfunc_end_defs(); BTF_KFUNCS_START(bpf_mptcp_common_kfunc_ids) BTF_ID_FLAGS(func, bpf_mptcp_subflow_ctx, KF_RET_NULL) BTF_ID_FLAGS(func, bpf_mptcp_subflow_tcp_sock, KF_RET_NULL) -BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_new, KF_ITER_NEW | KF_TRUSTED_AR= GS) -BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_next, KF_ITER_NEXT | KF_RET_NULL) -BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_destroy, KF_ITER_DESTROY) BTF_ID_FLAGS(func, mptcp_subflow_set_scheduled) BTF_ID_FLAGS(func, mptcp_subflow_active) BTF_ID_FLAGS(func, mptcp_set_timeout) @@ -338,6 +335,31 @@ static const struct btf_kfunc_id_set bpf_mptcp_common_= kfunc_set =3D { .filter =3D bpf_mptcp_common_kfunc_filter, }; =20 +/* .filter is called sometimes before prog->aux->st_ops is set, + * then prog->aux->st_ops is NULL. If return -EACCES in this case, + * an error occur: + * bug: bad parent state for iter next call + */ +BTF_KFUNCS_START(bpf_mptcp_iter_kfunc_ids) +BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_new, KF_ITER_NEW | KF_TRUSTED_AR= GS) +BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_next, KF_ITER_NEXT | KF_RET_NULL) +BTF_ID_FLAGS(func, bpf_iter_mptcp_subflow_destroy, KF_ITER_DESTROY) +BTF_KFUNCS_END(bpf_mptcp_iter_kfunc_ids) + +static int bpf_mptcp_iter_kfunc_filter(const struct bpf_prog *prog, u32 kf= unc_id) +{ + if (btf_id_set8_contains(&bpf_mptcp_iter_kfunc_ids, kfunc_id) && + prog->type !=3D BPF_PROG_TYPE_STRUCT_OPS) + return -EACCES; + return 0; +} + +static const struct btf_kfunc_id_set bpf_mptcp_iter_kfunc_set =3D { + .owner =3D THIS_MODULE, + .set =3D &bpf_mptcp_iter_kfunc_ids, + .filter =3D bpf_mptcp_iter_kfunc_filter, +}; + static int __init bpf_mptcp_kfunc_init(void) { int ret; @@ -345,6 +367,8 @@ static int __init bpf_mptcp_kfunc_init(void) ret =3D register_btf_fmodret_id_set(&bpf_mptcp_fmodret_set); ret =3D ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS, &bpf_mptcp_common_kfunc_set); + ret =3D ret ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_STRUCT_OPS, + &bpf_mptcp_iter_kfunc_set); #ifdef CONFIG_BPF_JIT ret =3D ret ?: register_bpf_struct_ops(&bpf_mptcp_sched_ops, mptcp_sched_= ops); #endif --=20 2.43.0 From nobody Sun Dec 14 02:01:23 2025 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 B673019D8BE for ; Fri, 30 May 2025 08:04:00 +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=1748592240; cv=none; b=BjB5h7kYzgRbN+bGH1irwol1vRAhl7xCuC3Le2jU2NUNPTAVMeOdZOHUeFwp2HkbWt+pzjNFNy+45k1mWpPn6A75cuB2XKIkNysfTJ+dwrw9a6MXFUiW2U4A7s31rnxgl2U+fPjSBwx+Om4h20nGlPDOIAdcUsfLoFHEnmAovEU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748592240; c=relaxed/simple; bh=qfJqsmVsgdLm6qWdPXmBpkv7iQ5c1rfYlKGUuJXyJS8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ec87YMAMsdN+GVHxyceBPrPUx8o4Qqt8XVO7Gl2yEqfj86nuKaeWPWOQBKmyziuOZodXectRsbnULp05lVUo+Rv6bgSQPyagrmGe8pohAc0mVBoUKAQO/G0o22NedpPriskHThg+PyzTde3pwHZfFcOGVSzhpFYb7eCML2PbTm4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LPaoCczs; 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="LPaoCczs" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 25FCEC4CEE9; Fri, 30 May 2025 08:03:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748592240; bh=qfJqsmVsgdLm6qWdPXmBpkv7iQ5c1rfYlKGUuJXyJS8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LPaoCczstT/wCveb6Z1FPXkOm4Mho2YbTOFUILcNdJErf/CpeEEpSbab7fRhIEt3C quEwCAu4yUiGaZMXU7MPyeC3k7A0QHRjwdWx89YKW4ov7l8hfYq5Nj1Ec5lQ6w6oZc 5WbAGpSmPLdIbHJ4Re7TAGPYb9G8f5Gi1qAUMQ6Y9Pf+DzWKqHv+/4dgfEVbKBhDVg OKTA9uGZ27+ZLtOJUG261J0F1y9Y27rfPCsFj5GkuLAwUeEqcCfbB1tegLlI5fe6Wv yinu5ls0c4jzdza4kYWUXW9mN0Nq1ZU1VdVKIeq52Y3hwtItzxadXviV8+FHCb6lzR 1nuISSWNrmFEw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v3 3/3] Revert "selftests/bpf: Add mptcp_subflow bpf_iter subtest" Date: Fri, 30 May 2025 16:03:47 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 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 Drop this patch as Martin suggested. Signed-off-by: Geliang Tang --- .../testing/selftests/bpf/bpf_experimental.h | 8 -- .../testing/selftests/bpf/prog_tests/mptcp.c | 73 ------------------- .../selftests/bpf/progs/mptcp_bpf_iters.c | 59 --------------- 3 files changed, 140 deletions(-) delete mode 100644 tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing= /selftests/bpf/bpf_experimental.h index c68827293cb9..5e512a1d09d1 100644 --- a/tools/testing/selftests/bpf/bpf_experimental.h +++ b/tools/testing/selftests/bpf/bpf_experimental.h @@ -578,14 +578,6 @@ extern int bpf_iter_css_new(struct bpf_iter_css *it, extern struct cgroup_subsys_state *bpf_iter_css_next(struct bpf_iter_css *= it) __weak __ksym; extern void bpf_iter_css_destroy(struct bpf_iter_css *it) __weak __ksym; =20 -struct bpf_iter_mptcp_subflow; -extern int bpf_iter_mptcp_subflow_new(struct bpf_iter_mptcp_subflow *it, - struct sock *sk) __weak __ksym; -extern struct mptcp_subflow_context * -bpf_iter_mptcp_subflow_next(struct bpf_iter_mptcp_subflow *it) __weak __ks= ym; -extern void -bpf_iter_mptcp_subflow_destroy(struct bpf_iter_mptcp_subflow *it) __weak _= _ksym; - extern int bpf_wq_init(struct bpf_wq *wq, void *p__map, unsigned int flags= ) __weak __ksym; extern int bpf_wq_start(struct bpf_wq *wq, unsigned int flags) __weak __ks= ym; extern int bpf_wq_set_callback_impl(struct bpf_wq *wq, diff --git a/tools/testing/selftests/bpf/prog_tests/mptcp.c b/tools/testing= /selftests/bpf/prog_tests/mptcp.c index 7c51250e7161..d75b402c7706 100644 --- a/tools/testing/selftests/bpf/prog_tests/mptcp.c +++ b/tools/testing/selftests/bpf/prog_tests/mptcp.c @@ -11,7 +11,6 @@ #include "mptcp_sock.skel.h" #include "mptcpify.skel.h" #include "mptcp_subflow.skel.h" -#include "mptcp_bpf_iters.skel.h" #include "mptcp_bpf_first.skel.h" #include "mptcp_bpf_bkup.skel.h" #include "mptcp_bpf_rr.skel.h" @@ -41,9 +40,6 @@ #ifndef MPTCP_INFO #define MPTCP_INFO 1 #endif -#ifndef TCP_IS_MPTCP -#define TCP_IS_MPTCP 43 /* Is MPTCP being used? */ -#endif #ifndef MPTCP_INFO_FLAG_FALLBACK #define MPTCP_INFO_FLAG_FALLBACK _BITUL(0) #endif @@ -495,73 +491,6 @@ static void test_subflow(void) close(cgroup_fd); } =20 -static void run_iters_subflow(void) -{ - int server_fd, client_fd; - int is_mptcp, err; - socklen_t len; - - server_fd =3D start_mptcp_server(AF_INET, ADDR_1, PORT_1, 0); - if (!ASSERT_OK_FD(server_fd, "start_mptcp_server")) - return; - - client_fd =3D connect_to_fd(server_fd, 0); - if (!ASSERT_OK_FD(client_fd, "connect_to_fd")) - goto close_server; - - send_byte(client_fd); - wait_for_new_subflows(client_fd); - - len =3D sizeof(is_mptcp); - /* mainly to trigger the BPF program */ - err =3D getsockopt(client_fd, SOL_TCP, TCP_IS_MPTCP, &is_mptcp, &len); - if (ASSERT_OK(err, "getsockopt(client_fd, TCP_IS_MPTCP)")) - ASSERT_EQ(is_mptcp, 1, "is_mptcp"); - - close(client_fd); -close_server: - close(server_fd); -} - -static void test_iters_subflow(void) -{ - struct mptcp_bpf_iters *skel; - struct netns_obj *netns; - int cgroup_fd; - - cgroup_fd =3D test__join_cgroup("/iters_subflow"); - if (!ASSERT_OK_FD(cgroup_fd, "join_cgroup: iters_subflow")) - return; - - skel =3D mptcp_bpf_iters__open_and_load(); - if (!ASSERT_OK_PTR(skel, "skel_open_load: iters_subflow")) - goto close_cgroup; - - skel->links.iters_subflow =3D bpf_program__attach_cgroup(skel->progs.iter= s_subflow, - cgroup_fd); - if (!ASSERT_OK_PTR(skel->links.iters_subflow, "attach getsockopt")) - goto skel_destroy; - - netns =3D netns_new(NS_TEST, true); - if (!ASSERT_OK_PTR(netns, "netns_new: iters_subflow")) - goto skel_destroy; - - if (endpoint_init("subflow", 4) < 0) - goto close_netns; - - run_iters_subflow(); - - /* 1 + 2 + 3 + 4 =3D 10 */ - ASSERT_EQ(skel->bss->ids, 10, "subflow ids"); - -close_netns: - netns_free(netns); -skel_destroy: - mptcp_bpf_iters__destroy(skel); -close_cgroup: - close(cgroup_fd); -} - static int sched_init(char *flags, char *sched) { if (endpoint_init(flags, 2) < 0) @@ -754,8 +683,6 @@ void test_mptcp(void) test_mptcpify(); if (test__start_subtest("subflow")) test_subflow(); - if (test__start_subtest("iters_subflow")) - test_iters_subflow(); if (test__start_subtest("default")) test_default(); if (test__start_subtest("first")) diff --git a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c b/tools/te= sting/selftests/bpf/progs/mptcp_bpf_iters.c deleted file mode 100644 index a1d8f9b20259..000000000000 --- a/tools/testing/selftests/bpf/progs/mptcp_bpf_iters.c +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* Copyright (c) 2024, Kylin Software */ - -/* vmlinux.h, bpf_helpers.h and other 'define' */ -#include "bpf_tracing_net.h" -#include "mptcp_bpf.h" - -char _license[] SEC("license") =3D "GPL"; -int ids; - -#ifndef TCP_IS_MPTCP -#define TCP_IS_MPTCP 43 /* Is MPTCP being used? */ -#endif - -SEC("cgroup/getsockopt") -int iters_subflow(struct bpf_sockopt *ctx) -{ - struct mptcp_subflow_context *subflow; - struct bpf_sock *sk =3D ctx->sk; - struct sock *ssk =3D NULL; - struct mptcp_sock *msk; - int local_ids =3D 0; - - if (ctx->level !=3D SOL_TCP || ctx->optname !=3D TCP_IS_MPTCP) - return 1; - - msk =3D bpf_core_cast(sk, struct mptcp_sock); - if (!msk || msk->pm.server_side || !msk->pm.subflows) - return 1; - - bpf_for_each(mptcp_subflow, subflow, (struct sock *)sk) { - /* Here MPTCP-specific packet scheduler kfunc can be called: - * this test is not doing anything really useful, only to - * verify the iteration works. - */ - - local_ids +=3D subflow->subflow_id; - - /* only to check the following helper works */ - ssk =3D mptcp_subflow_tcp_sock(subflow); - } - - if (!ssk) - goto out; - - /* assert: if not OK, something wrong on the kernel side */ - if (ssk->sk_dport !=3D ((struct sock *)msk)->sk_dport) - goto out; - - /* only to check the following kfunc works */ - subflow =3D bpf_mptcp_subflow_ctx(ssk); - if (!subflow || subflow->token !=3D msk->token) - goto out; - - ids =3D local_ids; - -out: - return 1; -} --=20 2.43.0