[PATCH mptcp-next v7 06/11] mptcp: pm: userspace: register mptcp_userspace_pm

Geliang Tang posted 11 patches 11 months, 1 week ago
There is a newer version of this series
[PATCH mptcp-next v7 06/11] mptcp: pm: userspace: register mptcp_userspace_pm
Posted by Geliang Tang 11 months, 1 week ago
From: Geliang Tang <tanggeliang@kylinos.cn>

This patch defines the original userspace path manager as a new
struct mptcp_pm_ops named "mptcp_userspace_pm", and register it
in mptcp_pm_data_init().

Only get_local_id(), get_priority() and release() interfaces are
implemented here. mptcp_userspace_pm_is_release() is a wrapper of
mptcp_userspace_pm_free_local_addr_list().

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm.c           |  1 +
 net/mptcp/pm_userspace.c | 18 ++++++++++++++++++
 net/mptcp/protocol.h     |  1 +
 3 files changed, 20 insertions(+)

diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index e648cb522320..98f81221786f 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -1028,6 +1028,7 @@ void mptcp_pm_data_init(struct mptcp_sock *msk)
 void __init mptcp_pm_init(void)
 {
 	mptcp_pm_nl_init();
+	mptcp_userspace_pm_init();
 }
 
 /* Must be called with rcu read lock held */
diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 8f9e749e9b1a..d53f44df9641 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -683,3 +683,21 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr,
 	sock_put(sk);
 	return ret;
 }
+
+static void mptcp_userspace_pm_release(struct mptcp_sock *msk)
+{
+	mptcp_userspace_pm_free_local_addr_list(msk);
+}
+
+static struct mptcp_pm_ops mptcp_userspace_pm = {
+	.get_local_id		= mptcp_userspace_pm_get_local_id,
+	.get_priority		= mptcp_userspace_pm_is_backup,
+	.release		= mptcp_userspace_pm_release,
+	.name			= "userspace",
+	.owner			= THIS_MODULE,
+};
+
+void __init mptcp_userspace_pm_init(void)
+{
+	mptcp_pm_register(&mptcp_userspace_pm);
+}
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 56d3a7457f80..979ee8762fd4 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -1162,6 +1162,7 @@ static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflo
 }
 
 void __init mptcp_pm_nl_init(void);
+void __init mptcp_userspace_pm_init(void);
 void mptcp_pm_worker(struct mptcp_sock *msk);
 void __mptcp_pm_kernel_worker(struct mptcp_sock *msk);
 unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk);
-- 
2.43.0
Re: [PATCH mptcp-next v7 06/11] mptcp: pm: userspace: register mptcp_userspace_pm
Posted by Matthieu Baerts 11 months, 1 week ago

On 03/03/2025 05:22, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
> 
> This patch defines the original userspace path manager as a new
> struct mptcp_pm_ops named "mptcp_userspace_pm", and register it
> in mptcp_pm_data_init().
> 
> Only get_local_id(), get_priority() and release() interfaces are
> implemented here. mptcp_userspace_pm_is_release() is a wrapper of
> mptcp_userspace_pm_free_local_addr_list().
> 
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
>  net/mptcp/pm.c           |  1 +
>  net/mptcp/pm_userspace.c | 18 ++++++++++++++++++
>  net/mptcp/protocol.h     |  1 +
>  3 files changed, 20 insertions(+)
> 
> diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
> index e648cb522320..98f81221786f 100644
> --- a/net/mptcp/pm.c
> +++ b/net/mptcp/pm.c
> @@ -1028,6 +1028,7 @@ void mptcp_pm_data_init(struct mptcp_sock *msk)
>  void __init mptcp_pm_init(void)
>  {
>  	mptcp_pm_nl_init();
> +	mptcp_userspace_pm_init();

Detail: maybe better to call it mptcp_pm_userspace_init(). So all the
remaining exposed userspace PM helpers will have the same mptcp_pm_
prefix as the rest?

Also, maybe clearer with mptcp_pm_userspace_register()?

BTW, I think we should also rename mptcp_pm_nl_init to
mptcp_pm_kernel_register() later ; or do that as part of patch 5/11?
"While at it, rename the init function to avoid confusions?" WDYT? Or I
do the rename as part of the "code reorganisation"?

Cheers,
Matt
-- 
Sponsored by the NGI0 Core fund.