Hi Matt,
On Fri, 2025-04-11 at 13:04 +0200, Matthieu Baerts (NGI0) wrote:
From: Geliang Tang geliang@kernel.org
Please update my email as "Geliang Tang tanggeliang@kylinos.cn" here and in patch 7, otherwise, CI will complain that the email address after "From: " is different from that after "Signed-off-by: ".
Thanks, -Geliang
A new interface .validate has been added in struct bpf_struct_ops recently. This patch prepares a future struct_ops support by implementing it as a new helper mptcp_validate_scheduler() for struct mptcp_sched_ops.
In this helper, check whether the required ops "get_subflow" of struct mptcp_sched_ops has been implemented.
Signed-off-by: Geliang Tang tanggeliang@kylinos.cn Reviewed-by: Mat Martineau martineau@kernel.org Signed-off-by: Matthieu Baerts (NGI0) matttbe@kernel.org
net/mptcp/protocol.h | 1 + net/mptcp/sched.c | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d409586b5977f93bff14fffd83b1d3020d57353b..7aa38d74fef6b5f00d97a114d74 b711014d0a52d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -744,6 +744,7 @@ void mptcp_info2sockaddr(const struct mptcp_addr_info *info, struct sockaddr_storage *addr, unsigned short family); struct mptcp_sched_ops *mptcp_sched_find(const char *name); +int mptcp_validate_scheduler(struct mptcp_sched_ops *sched); int mptcp_register_scheduler(struct mptcp_sched_ops *sched); void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched); void mptcp_sched_init(void); diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index f09f7eb1d63f86b9899c72b5c2fd36c8445898a8..1e59072d478c9b52c7f7b60431b 589f6ca3abe65 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -82,10 +82,23 @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen) rcu_read_unlock(); } +int mptcp_validate_scheduler(struct mptcp_sched_ops *sched) +{
- if (!sched->get_send) {
pr_err("%s does not implement required ops\n",
sched->name);
return -EINVAL;
- }
- return 0;
+}
int mptcp_register_scheduler(struct mptcp_sched_ops *sched) {
- if (!sched->get_send)
return -EINVAL;
- int ret;
- ret = mptcp_validate_scheduler(sched);
- if (ret)
return ret;
spin_lock(&mptcp_sched_list_lock); if (mptcp_sched_find(sched->name)) {