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