From: Martin KaFai Lau <martin.lau@linux.dev>
To: Matthieu Baerts <matttbe@kernel.org>
Cc: mptcp@lists.linux.dev, Mat Martineau <martineau@kernel.org>,
Geliang Tang <geliang@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Andrii Nakryiko <andrii@kernel.org>,
Eduard Zingerman <eddyz87@gmail.com>, Song Liu <song@kernel.org>,
Yonghong Song <yonghong.song@linux.dev>,
John Fastabend <john.fastabend@gmail.com>,
KP Singh <kpsingh@kernel.org>,
Stanislav Fomichev <sdf@fomichev.me>, Hao Luo <haoluo@google.com>,
Jiri Olsa <jolsa@kernel.org>, Mykola Lysenko <mykolal@fb.com>,
Shuah Khan <shuah@kernel.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: Re: [PATCH bpf-next/net v3 4/5] selftests/bpf: Add mptcp_subflow bpf_iter subtest
Date: Tue, 20 May 2025 15:18:52 -0700 [thread overview]
Message-ID: <0364f8d2-9aa5-4dc0-b7f6-1c8572932814@linux.dev> (raw)
In-Reply-To: <1621611c-8cf1-4281-986f-cfd8cc0e70f0@kernel.org>
On 5/19/25 3:04 AM, Matthieu Baerts wrote:
>>> +SEC("cgroup/getsockopt")
>>> +int iters_subflow(struct bpf_sockopt *ctx)
>>> +{
>>> + struct mptcp_subflow_context *subflow;
>>> + struct bpf_sock *sk = ctx->sk;
>>> + struct sock *ssk = NULL;
>>> + struct mptcp_sock *msk;
>>> + int local_ids = 0;
>>> +
>>> + if (ctx->level != SOL_TCP || ctx->optname != TCP_IS_MPTCP)
>>> + return 1;
>>> +
>>> + msk = 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
>>
>> Lets fold the bpf_iter_mptcp_subflow addition into the future
>> "mptcp_sched_ops" set (the github link that you mentioned in patch 2).
>> Post them as one set to have a more practical example.
>
> Thank you for this suggestion. We can delay that if needed.
>
> Note that we have two struct_ops in preparation: mptcp_sched_ops and
> mptcp_pm_ops. We don't know which one will be ready first. They are both
> "blocked" by internal API modifications we would like to do to ease the
> maintenance later before "exposing" such API's via BPF. That's why we
> suggested to upstream this common part first as it is ready. But we can
> of course wait if you prefer.
This set is useful for discussing the questions you raised in patch 2.
I still don't see it useful to upstream patch 2 alone. The existing
selftests/bpf/progs/mptcp_subflow.c has already shown a way to do similar
iteration in SEC("cgroup/getsockopt") without patch 2.
I would prefer to wait for a fuller picture on the main struct_ops use case
first to ensure that we didn't overlook things. iiuc, improving the iteration in
SEC("cgroup/getsockopt") is not the main objective.
>
>>> + * verify the iteration works.
>>> + */
>>> +
>>> + local_ids += subflow->subflow_id;
>>> +
>>> + /* only to check the following helper works */
>>> + ssk = mptcp_subflow_tcp_sock(subflow);
>>> + }
>>> +
>>> + if (!ssk)
>>> + goto out;
>>> +
>>> + /* assert: if not OK, something wrong on the kernel side */
>>> + if (ssk->sk_dport != ((struct sock *)msk)->sk_dport)
>>> + goto out;
>>> +
>>> + /* only to check the following kfunc works */
>>> + subflow = bpf_mptcp_subflow_ctx(ssk);
>>
>> bpf_core_cast should be as good instead of adding a new
>> bpf_mptcp_subflow_ctx() kfunc, so patch 1 should not be needed.
>
> OK, indeed, in this series we don't need it. We will need it later to
> modify some fields from the "subflow" structure directly. We can do the
The "ssk" here is not a trusted pointer. Note that in patch 1, the kfunc
bpf_mptcp_subflow_ctx() does not specify KF_TRUSTED_ARGS. I suspect it should be
KF_TRUSTED_ARGS based on what you described here.
next prev parent reply other threads:[~2025-05-20 22:19 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-20 17:48 [PATCH bpf-next/net v3 0/5] bpf: Add mptcp_subflow bpf_iter support Matthieu Baerts (NGI0)
2025-03-20 17:48 ` [PATCH bpf-next/net v3 1/5] bpf: Register mptcp common kfunc set Matthieu Baerts (NGI0)
2025-03-20 17:48 ` [PATCH bpf-next/net v3 2/5] bpf: Add mptcp_subflow bpf_iter Matthieu Baerts (NGI0)
2025-05-16 22:34 ` Martin KaFai Lau
2025-05-19 10:05 ` Matthieu Baerts
2025-03-20 17:48 ` [PATCH bpf-next/net v3 3/5] selftests/bpf: More endpoints for endpoint_init Matthieu Baerts (NGI0)
2025-03-20 17:48 ` [PATCH bpf-next/net v3 4/5] selftests/bpf: Add mptcp_subflow bpf_iter subtest Matthieu Baerts (NGI0)
2025-05-16 22:48 ` Martin KaFai Lau
2025-05-19 10:04 ` Matthieu Baerts
2025-05-20 22:18 ` Martin KaFai Lau [this message]
2025-05-23 11:07 ` Matthieu Baerts
2025-03-20 17:48 ` [PATCH bpf-next/net v3 5/5] selftests/bpf: Drop cgroup_fd of run_mptcpify Matthieu Baerts (NGI0)
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=0364f8d2-9aa5-4dc0-b7f6-1c8572932814@linux.dev \
--to=martin.lau@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=geliang@kernel.org \
--cc=haoluo@google.com \
--cc=horms@kernel.org \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martineau@kernel.org \
--cc=matttbe@kernel.org \
--cc=mptcp@lists.linux.dev \
--cc=mykolal@fb.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=yonghong.song@linux.dev \
/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.