From patchwork Thu Mar 6 11:01:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004221 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 355A31FECB8 for ; Thu, 6 Mar 2025 11:01:54 +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=1741258915; cv=none; b=bgLJePWIkOTGCIDV+aqhR+rbcTqPyn0BRvhECmnpPi8G6GigkeTiR3/GVQb5Qeflxww7jzLS5BGMx4z0A4VFaOalARyipjTW1zrk6KjvgqCK0UNTnEiWuKzbV7dpe5xhjxRROwMm6reYXwO0C1+/fnCfKNY/6S/yLB54UeGK27I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258915; c=relaxed/simple; bh=aptOxRU4sHVclwEhwzfyW8h2D9ps2xm8wTK4603DRjQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=laGPPNJa/dA5QwBOvvu7oylrAUGVF3YNXe34vwP+XZVnhE+CJ8mdL4UScPOayGnAPJu+rrFkoFFu9lP1RfeSnKv2hI8ojeI+QaQOlkmYvigM6Am2V0tk37QKC6cn+61Ov25tik9fNWDajtbMFRyKwNWe7l+FvQpeLwgIu/MF3Vc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Oom4Vl4g; 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="Oom4Vl4g" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 84BB9C4CEE2; Thu, 6 Mar 2025 11:01:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258914; bh=aptOxRU4sHVclwEhwzfyW8h2D9ps2xm8wTK4603DRjQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Oom4Vl4gNiGAGu5VP5TU6qGeLS63u74nsq+su6HdbVe1sKTbBlDj4d5aW0W5X7Kjr vpzL5xUBj9Jk9sW/eJLfJi3yWY0dlvyFAVLqgmfx0dVF5KBKdzE0bpJJeOcxic5S+h QeF6554fSlbG9x9fqCLORfzfHvNaai87kHVeinTsis91n4zyM8c9TSGe2p2Bsyh38D 33cpthduOjW9f3yrAByXhMg4UVmBSEqsCMQZxWqh7tasmB/+yoA4lVGubY4UvZNSrc fgkfAP8703xCdZ4i7KyKJpuGO8u4mJg6V9jwUffO/Hn4Zbpa5+sSV5KMZgl2RQ4it2 MkoMGmNA5QsSA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 01/12] mptcp: pm: define struct mptcp_pm_ops Date: Thu, 6 Mar 2025 19:01:36 +0800 Message-ID: <47180d967e11e89e565f17dee0844d6bf98dd553.1741258415.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 From: Geliang Tang In order to allow users to develop their own BPF-based path manager, this patch defines a struct ops "mptcp_pm_ops" for an MPTCP path manager, which contains a set of interfaces. Currently only init() and release() interfaces are included, subsequent patches will add others step by step. Add a set of functions to register, unregister and find a given path manager struct ops. "list" is used to add this path manager to mptcp_pm_list list when it is registered. "name" is used to identify this path manager. mptcp_pm_find() uses "name" to find a path manager on the list. mptcp_pm_unregister is not used in this set, but will be invoked in .unreg of struct bpf_struct_ops. Signed-off-by: Geliang Tang --- include/net/mptcp.h | 12 ++++++++++++ net/mptcp/pm.c | 39 +++++++++++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 4 ++++ 3 files changed, 55 insertions(+) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index e9832a8f981e..69f7b35e57c3 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -14,6 +14,7 @@ struct mptcp_info; struct mptcp_sock; +struct mptcp_pm_addr_entry; struct seq_file; /* MPTCP sk_buff extension data */ @@ -112,6 +113,17 @@ struct mptcp_sched_ops { void (*release)(struct mptcp_sock *msk); } ____cacheline_aligned_in_smp; +#define MPTCP_PM_NAME_MAX 16 + +struct mptcp_pm_ops { + char name[MPTCP_PM_NAME_MAX]; + struct module *owner; + struct list_head list; + + void (*init)(struct mptcp_sock *msk); + void (*release)(struct mptcp_sock *msk); +} ____cacheline_aligned_in_smp; + #ifdef CONFIG_MPTCP void mptcp_init(void); diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 04a156395aad..5ea5048dfd9b 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -5,6 +5,8 @@ */ #define pr_fmt(fmt) "MPTCP: " fmt +#include +#include #include "protocol.h" #include "mib.h" @@ -18,6 +20,9 @@ struct mptcp_pm_add_entry { struct mptcp_sock *sock; }; +static DEFINE_SPINLOCK(mptcp_pm_list_lock); +static LIST_HEAD(mptcp_pm_list); + /* path manager helpers */ /* if sk is ipv4 or ipv6_only allows only same-family local and remote addresses, @@ -1025,3 +1030,37 @@ void __init mptcp_pm_init(void) mptcp_pm_kernel_register(); mptcp_pm_nl_init(); } + +/* Must be called with rcu read lock held */ +struct mptcp_pm_ops *mptcp_pm_find(const char *name) +{ + struct mptcp_pm_ops *pm_ops; + + list_for_each_entry_rcu(pm_ops, &mptcp_pm_list, list) { + if (!strcmp(pm_ops->name, name)) + return pm_ops; + } + + return NULL; +} + +int mptcp_pm_register(struct mptcp_pm_ops *pm_ops) +{ + spin_lock(&mptcp_pm_list_lock); + if (mptcp_pm_find(pm_ops->name)) { + spin_unlock(&mptcp_pm_list_lock); + return -EEXIST; + } + list_add_tail_rcu(&pm_ops->list, &mptcp_pm_list); + spin_unlock(&mptcp_pm_list_lock); + + pr_debug("%s registered\n", pm_ops->name); + return 0; +} + +void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops) +{ + spin_lock(&mptcp_pm_list_lock); + list_del_rcu(&pm_ops->list); + spin_unlock(&mptcp_pm_list_lock); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 3492b256ecba..dfb981a83f31 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1047,6 +1047,10 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, struct mptcp_pm_addr_entry *entry); +struct mptcp_pm_ops *mptcp_pm_find(const char *name); +int mptcp_pm_register(struct mptcp_pm_ops *pm_ops); +void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops); + void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk); void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk, From patchwork Thu Mar 6 11:01:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004222 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 C7890204F60 for ; Thu, 6 Mar 2025 11:01: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=1741258916; cv=none; b=KPPmfPb1cA9M0cMUAcRQsxCrhfsCJbl+YXDmVEtB4TvStbmf7OCNA2PZpbBmdOptRzSKgDm+15r8tE/ave8pVrwtQ+mswmYl29HWC1EwzrgmiTlqfAwNE4R5Hg2nMRoQfOxP8jYTEVv7KF+oPSHllXFljPNvyO4gMUy3BGrePdM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258916; c=relaxed/simple; bh=XhgJT+bbhZy92wMKsJvboYTtpb5tayygQ0+UiNTfjlA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MEs6v8GyJTj4dMJXBdpun1jayZUSzra3n4EtfeNxeBQkBFgF6QcxWeSXqB49WSlukONq6nKpWvNOvhaRmRGJkVPYmRQd76f2dHrr8XlXhsgNKcC1aS0qxmGekDGEh+X3ukuUrPiRhX5M869hidGZryeAysbBUBIcvIqwJ+tIJkk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GlDiCRse; 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="GlDiCRse" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 38E55C4CEE0; Thu, 6 Mar 2025 11:01:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258916; bh=XhgJT+bbhZy92wMKsJvboYTtpb5tayygQ0+UiNTfjlA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GlDiCRseTfoQYEl1IVvb4To1rwZeewS2YOe10L4dDWch+bhBtHfNdUOzYOIWMgWI4 fNBlubMaSjDcsAgk2IlYVspsACjqPlaj6/ZsXqhakSyt5tKrJ9tmjzleaB92u76lsQ RPkkwbWNS7ZunWzT6+r2nPZySJRS1vEtac5PqKhsSlzd+oDVJ8K9vrITYlm9aTFgTS gkcNpxjMDSU/M9Fb7oGEd5Ry+IZ6aJUS5PJNEYVC4BuTNm2caxBCi7MdrUFI0tFFgl olMKKFrGftg1Y6wyL8UXXKe5+pXS+nsBHClZy3bCBKNA7ejp1KcPxEDK0z08rRwjYY Fts3/+fkcMc9g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 02/12] mptcp: pm: register in-kernel and userspace PM Date: Thu, 6 Mar 2025 19:01:37 +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 From: Geliang Tang This patch defines the original in-kernel netlink path manager as a new struct mptcp_pm_ops named "mptcp_pm_kernel", and register it in mptcp_pm_kernel_register(). Also define the userspace path manager as a new struct mptcp_pm_ops named "mptcp_pm_userspace", and register it in mptcp_pm_init(). To ensure that there's always a valid path manager available, the default path manager "mptcp_pm_kernel" will be skipped in mptcp_pm_unregister(). Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 5 +++++ net/mptcp/pm_kernel.c | 7 +++++++ net/mptcp/pm_userspace.c | 10 ++++++++++ net/mptcp/protocol.h | 4 ++++ 4 files changed, 26 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 5ea5048dfd9b..eefed554dcc9 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_kernel_register(); + mptcp_pm_userspace_register(); mptcp_pm_nl_init(); } @@ -1060,6 +1061,10 @@ int mptcp_pm_register(struct mptcp_pm_ops *pm_ops) void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops) { + /* skip unregistering the default path manager */ + if (WARN_ON_ONCE(pm_ops == &mptcp_pm_kernel)) + return; + spin_lock(&mptcp_pm_list_lock); list_del_rcu(&pm_ops->list); spin_unlock(&mptcp_pm_list_lock); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 806a9b5b3c07..d39e7c178460 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -1398,8 +1398,15 @@ static struct pernet_operations mptcp_pm_pernet_ops = { .size = sizeof(struct pm_nl_pernet), }; +struct mptcp_pm_ops mptcp_pm_kernel = { + .name = "kernel", + .owner = THIS_MODULE, +}; + void __init mptcp_pm_kernel_register(void) { if (register_pernet_subsys(&mptcp_pm_pernet_ops) < 0) panic("Failed to register MPTCP PM pernet subsystem.\n"); + + mptcp_pm_register(&mptcp_pm_kernel); } diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 13856df22673..2cb62f026b1f 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -682,3 +682,13 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr, sock_put(sk); return ret; } + +static struct mptcp_pm_ops mptcp_pm_userspace = { + .name = "userspace", + .owner = THIS_MODULE, +}; + +void __init mptcp_pm_userspace_register(void) +{ + mptcp_pm_register(&mptcp_pm_userspace); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index dfb981a83f31..3f820a9e453f 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1047,6 +1047,9 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, struct mptcp_pm_addr_entry *entry); +/* the default path manager, used in mptcp_pm_unregister */ +extern struct mptcp_pm_ops mptcp_pm_kernel; + struct mptcp_pm_ops *mptcp_pm_find(const char *name); int mptcp_pm_register(struct mptcp_pm_ops *pm_ops); void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops); @@ -1154,6 +1157,7 @@ static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflo } void __init mptcp_pm_kernel_register(void); +void __init mptcp_pm_userspace_register(void); void __init mptcp_pm_nl_init(void); void mptcp_pm_worker(struct mptcp_sock *msk); void __mptcp_pm_kernel_worker(struct mptcp_sock *msk); From patchwork Thu Mar 6 11:01:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004223 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 8540F1FECB8 for ; Thu, 6 Mar 2025 11:01: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=1741258918; cv=none; b=txgP2BBQPqH3IddeSkDdnuiXC7Q5dPqwPqEClqBi90vh7jbNOPZuANyQ5+Nnftmo3vb4yRB9r77Jx23UPJTIy/fiYnqk43Kj3GzfpwEmP0zZ860X6ouMpsIDrSWCQtVHiNaY3cUs9DHKx+egdiH+dwXfk31qHTctkRIVyeii/ps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258918; c=relaxed/simple; bh=bQZEKIurEns2cSfeBYOv2AQqUU0vruYP+h0ciwq6YsY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PsGCzDwZGkXIR4J1EVA7nNq85DuC/o9ww9RY1BsDs26j6rCdroXrvClO6M5jbdRC1cG4NDVNKQN/muwQSetEPJpX0DPgSamqGDNJUn8ztCr625bspSjupWG2Oh8bRTe6XnRhk9VIdk8ucZGTlraJPtU3i20TOJg9GTcLCwyvaYU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=q4VzD/Yh; 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="q4VzD/Yh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E17FCC4CEE2; Thu, 6 Mar 2025 11:01:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258918; bh=bQZEKIurEns2cSfeBYOv2AQqUU0vruYP+h0ciwq6YsY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q4VzD/Yhdh8G3dBzgZwrU5FQlcFJ+vJWsp75Oc+CirtDV9d6eRUR/hYJZ288NoLJg /ISBD4m+a8cXmgUlSp6Wzirzc9ku+D4MlBXBautNImr8xlQBFJM1sPrmPtw10Nd42S c+dttT4VWqemM774AZ8BTYbeDqcjLtFsHNqeq7Coh90/EJIWmXpBNvIKFgaUFd59cw ZDo5dElkdwtEs6ta82VX4EfOZxNio1MXGqktpV1MGQkrdsgC8fkc+VJ7+kDcse6SxV UzKVxgWjq1zcj7umK2PZEEJ5n1sjkSUI4oTkXkcadbFBsnhCVV/Hw4H2QF5BDpLjSy XZDOO6UzSRk/A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 03/12] mptcp: sysctl: set path manager by name Date: Thu, 6 Mar 2025 19:01:38 +0800 Message-ID: <3b6949a2eda46c8aed7164e7a66516772a6d512e.1741258415.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 From: Geliang Tang A new net.mptcp.path_manager sysctl is added to determine which path manager will be used by each newly-created MPTCP socket by setting the name of it. This sysctl makes the old one "pm_type" deprecated. Signed-off-by: Geliang Tang --- Documentation/networking/mptcp-sysctl.rst | 19 +++++++++ net/mptcp/ctrl.c | 50 +++++++++++++++++++++++ net/mptcp/protocol.h | 1 + 3 files changed, 70 insertions(+) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst index 03e1d3610333..b78a2254d452 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -72,6 +72,23 @@ enabled - BOOLEAN Default: 1 (enabled) +path_manager - STRING + Set the default path manager name to use for each new MPTCP + socket. In-kernel path management will control subflow + connections and address advertisements according to + per-namespace values configured over the MPTCP netlink + API. Userspace path management puts per-MPTCP-connection subflow + connection decisions and address advertisements under control of + a privileged userspace program, at the cost of more netlink + traffic to propagate all of the related events and commands. + + This is a per-namespace sysctl. + + * "kernel" - In-kernel path manager + * "userspace" - Userspace path manager + + Default: "kernel" + pm_type - INTEGER Set the default path manager type to use for each new MPTCP socket. In-kernel path management will control subflow @@ -84,6 +101,8 @@ pm_type - INTEGER This is a per-namespace sysctl. + Deprecated since v6.15, use path_manager instead. + * 0 - In-kernel path manager * 1 - Userspace path manager diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index be6c0237e10b..1f405be6bc00 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -39,6 +39,7 @@ struct mptcp_pernet { u8 allow_join_initial_addr_port; u8 pm_type; char scheduler[MPTCP_SCHED_NAME_MAX]; + char path_manager[MPTCP_PM_NAME_MAX]; }; static struct mptcp_pernet *mptcp_get_pernet(const struct net *net) @@ -83,6 +84,11 @@ int mptcp_get_pm_type(const struct net *net) return mptcp_get_pernet(net)->pm_type; } +const char *mptcp_get_path_manager(const struct net *net) +{ + return mptcp_get_pernet(net)->path_manager; +} + const char *mptcp_get_scheduler(const struct net *net) { return mptcp_get_pernet(net)->scheduler; @@ -101,6 +107,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) pernet->stale_loss_cnt = 4; pernet->pm_type = MPTCP_PM_TYPE_KERNEL; strscpy(pernet->scheduler, "default", sizeof(pernet->scheduler)); + strscpy(pernet->path_manager, "kernel", sizeof(pernet->path_manager)); } #ifdef CONFIG_SYSCTL @@ -174,6 +181,42 @@ static int proc_blackhole_detect_timeout(const struct ctl_table *table, return ret; } +static int mptcp_set_path_manager(char *path_manager, const char *name) +{ + struct mptcp_pm_ops *pm; + int ret = 0; + + rcu_read_lock(); + pm = mptcp_pm_find(name); + if (pm) + strscpy(path_manager, name, MPTCP_PM_NAME_MAX); + else + ret = -ENOENT; + rcu_read_unlock(); + + return ret; +} + +static int proc_path_manager(const struct ctl_table *ctl, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + char (*path_manager)[MPTCP_PM_NAME_MAX] = ctl->data; + char pm_name[MPTCP_PM_NAME_MAX]; + const struct ctl_table tbl = { + .data = pm_name, + .maxlen = MPTCP_PM_NAME_MAX, + }; + int ret; + + strscpy(pm_name, *path_manager, MPTCP_PM_NAME_MAX); + + ret = proc_dostring(&tbl, write, buffer, lenp, ppos); + if (write && ret == 0) + ret = mptcp_set_path_manager(*path_manager, pm_name); + + return ret; +} + static struct ctl_table mptcp_sysctl_table[] = { { .procname = "enabled", @@ -253,6 +296,12 @@ static struct ctl_table mptcp_sysctl_table[] = { .mode = 0644, .proc_handler = proc_dou8vec_minmax, }, + { + .procname = "path_manager", + .maxlen = MPTCP_PM_NAME_MAX, + .mode = 0644, + .proc_handler = proc_path_manager, + }, }; static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet) @@ -278,6 +327,7 @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet) table[8].data = &pernet->close_timeout; table[9].data = &pernet->blackhole_timeout; table[10].data = &pernet->syn_retrans_before_tcp_fallback; + table[11].data = &pernet->path_manager; hdr = register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table, ARRAY_SIZE(mptcp_sysctl_table)); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 3f820a9e453f..0ef758d233b7 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -694,6 +694,7 @@ int mptcp_allow_join_id0(const struct net *net); unsigned int mptcp_stale_loss_cnt(const struct net *net); unsigned int mptcp_close_timeout(const struct sock *sk); int mptcp_get_pm_type(const struct net *net); +const char *mptcp_get_path_manager(const struct net *net); const char *mptcp_get_scheduler(const struct net *net); void mptcp_active_disable(struct sock *sk); From patchwork Thu Mar 6 11:01:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004224 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 9C500204F60 for ; Thu, 6 Mar 2025 11:02: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=1741258920; cv=none; b=TJtdX7h4WhYcnYk7Bg/S5TDJBpqk2tVDyyx4lOrm8Vfc6LqQz2B5Yk/pXk/Xus2F8J15BmHWL21QC4Iqqxby1lr3BIytKq2vTvPs8HdWKeO4TZykHwdai5usacr9sJK+K/d4JkwTN+h4yx7fHA6VwoJD+H2vfOqvc4XNTwXZuWI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258920; c=relaxed/simple; bh=t0XDHq24HksxSEVNEZxv/WPy0tqXUiPJ/OjxrpGT8Ic=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VNgFvFrnx9Ay/KQVR4hqr5h3OzWqDioUSU52P//QgxV0HOVE3piRF923Cbm/YYVKsusskklj1d/uW/DPS6t8fZy/j+C1Gw6zgJylNBqvhzgToUoL+fUJ58TVWcoj47FbbRDR34RzogISnjgnajSXmuxtlhP404Q2kWVR6GhOmt8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XzvSc+vh; 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="XzvSc+vh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A21ECC4CEE0; Thu, 6 Mar 2025 11:01:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258920; bh=t0XDHq24HksxSEVNEZxv/WPy0tqXUiPJ/OjxrpGT8Ic=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XzvSc+vhQYH7Bora1R0Io2dN0wDpMrMsCGxMKJprtTTZaioCk+4HLkKQwMfpUCab/ 3c1ZK0Box1vlLUKJtMO5LgpnF/N29jfnUYJpvfSeZsmRry2dfbkcEOra3TCMIonXE1 FKfBdCE3UtU53+kMdnDPUyiXoJmkWJRpEIdFKupX6miPxDY4xTfP11cGm4wzn3ynzs 0ORUEUz5oQJY+mKiem5OgpJM35Ltl7w2tu1TK8iY8SNIa8jM14fk+6TNCperA5AEkG GUw8xbRmRnicc3ASPVN7FwxCFxCjsQy7PBO09tzakFsEo8gbCMgP5QXySQpNev6jDh lKYov8CrxH9dw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang , Matthieu Baerts Subject: [PATCH mptcp-next v10 04/12] mptcp: add struct_group in mptcp_pm_data Date: Thu, 6 Mar 2025 19:01:39 +0800 Message-ID: <9133981edb83438ee10e6da9ef4e5cc6bf7f188b.1741258415.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 From: Geliang Tang This patch adds a "struct_group(reset, ...)" in struct mptcp_pm_data to simplify the reset, and make sure we don't miss any. Suggested-by: Matthieu Baerts Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 14 +------------- net/mptcp/protocol.h | 4 ++++ 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index eefed554dcc9..1400bfed4b0d 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -983,12 +983,7 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk)); struct mptcp_pm_data *pm = &msk->pm; - pm->add_addr_signaled = 0; - pm->add_addr_accepted = 0; - pm->local_addr_used = 0; - pm->subflows = 0; - pm->rm_list_tx.nr = 0; - pm->rm_list_rx.nr = 0; + memset(&pm->reset, 0, sizeof(pm->reset)); WRITE_ONCE(pm->pm_type, pm_type); if (pm_type == MPTCP_PM_TYPE_KERNEL) { @@ -1005,15 +1000,8 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) !!mptcp_pm_get_add_addr_accept_max(msk) && subflows_allowed); WRITE_ONCE(pm->accept_subflow, subflows_allowed); - } else { - WRITE_ONCE(pm->work_pending, 0); - WRITE_ONCE(pm->accept_addr, 0); - WRITE_ONCE(pm->accept_subflow, 0); } - WRITE_ONCE(pm->addr_signal, 0); - WRITE_ONCE(pm->remote_deny_join_id0, false); - pm->status = 0; bitmap_fill(pm->id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); } diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 0ef758d233b7..47710db243f4 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -223,6 +223,8 @@ struct mptcp_pm_data { spinlock_t lock; /*protects the whole PM data */ + struct_group(reset, + u8 addr_signal; bool server_side; bool work_pending; @@ -238,6 +240,8 @@ struct mptcp_pm_data { DECLARE_BITMAP(id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); struct mptcp_rm_list rm_list_tx; struct mptcp_rm_list rm_list_rx; + + ); }; struct mptcp_pm_local { From patchwork Thu Mar 6 11:01:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004225 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 6B389204F60 for ; Thu, 6 Mar 2025 11:02:02 +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=1741258922; cv=none; b=JbCBXn9DGlXF7WNhyxquim9Zp1b++vwQ7sNGB/TNmUtc6HHyTlJT5/+tW3avMaFHKyAQ/l480R2lbNky2N5PWqJF4TBdjjMwHiInNPZPWdpxiX5tZHrVVxHWctM2lBEnKx/zBqe1mGjnZN/axBuwXdG8Q1iPERhZfFv/rKTOAQE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258922; c=relaxed/simple; bh=hMgZt8POX1f28Bm6MsdYaB6PFVPalRi0PBpws+J8yCM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Lcx2e1ccTo4rKCyE4qCCiN2QLMkFe0qBC0yFJVUy4hckNDHqgb1nnXWKYjfprjy/FEa/3orTTtVwR1WmBX0PRHsiVdfiXSXoCXCmHVsoGpO+/oVSKS0Qlud7pXLFHDhAcwtth5iuzs6MTzyZ//e9lLiNh8mttPjpdx76JQm3X5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a3axl4Le; 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="a3axl4Le" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ADDF4C4CEE2; Thu, 6 Mar 2025 11:02:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258921; bh=hMgZt8POX1f28Bm6MsdYaB6PFVPalRi0PBpws+J8yCM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a3axl4Le2wNcPaQik9VcEtnYPQcC+bR1uN/iC61ElRsvB6XIpXt8DR7EVhgR9Bhwi x0QAcZHIZtDnZOSrXp8cq7sWfF6QMqNRYDmHme8ZRqt3iQVOvXa52To3P+5ZtqGedL iow6Rr15ZY0BUlDxTMNpTw2HTVgyulL7CWH4s3mbFMbPR5MtYFeFurHtxZluf8Nwi2 8m5AzIDZUJx3+EIBpK3rPPkx5c3WUnveFlPtmc33eXm9RxKXOA1QBgqXRwsRAt4djN kj0m5ZwpOrE9VN2Hir9YmE8oRv7I8hei4QwKkk9eVYudEluYGZtK5t3riU+6X7ZxoA wy/4USoVRfUjQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 05/12] mptcp: pm: init and release mptcp_pm_ops Date: Thu, 6 Mar 2025 19:01:40 +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 From: Geliang Tang Add a struct mptcp_pm_ops pointer "ops" in struct mptcp_pm_data, and two helpers mptcp_pm_ops_init() and mptcp_pm_ops_release(), to set and release this pointer. mptcp_pm_ops_init() is invoked in mptcp_pm_data_reset(), while mptcp_pm_ops_release() is invoked in mptcp_pm_destroy(). mptcp_pm_kernel_init() is defined as init() interface of the in-kernel PM, which sets work_pending, accept_addr and accept_subflow. mptcp_pm_userspace_is_release() is defined as release() interface of the userspace PM, which is a wrapper of userspace_pm_free_local_addr_list(). Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 55 ++++++++++++++++++++++++++-------------- net/mptcp/pm_kernel.c | 19 ++++++++++++++ net/mptcp/pm_userspace.c | 6 +++++ net/mptcp/protocol.h | 1 + 4 files changed, 62 insertions(+), 19 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1400bfed4b0d..1a2f1715871c 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -970,37 +970,54 @@ void mptcp_pm_worker(struct mptcp_sock *msk) spin_unlock_bh(&msk->pm.lock); } +static void mptcp_pm_ops_init(struct mptcp_sock *msk, + struct mptcp_pm_ops *pm_ops) +{ + if (!pm_ops || !bpf_try_module_get(pm_ops, pm_ops->owner)) { + pr_warn_once("pm %s fails, fallback to default pm", + pm_ops->name); + pm_ops = &mptcp_pm_kernel; + } + + msk->pm.ops = pm_ops; + if (msk->pm.ops->init) + msk->pm.ops->init(msk); + + pr_debug("pm %s initialized\n", pm_ops->name); +} + +static void mptcp_pm_ops_release(struct mptcp_sock *msk) +{ + struct mptcp_pm_ops *pm_ops = msk->pm.ops; + + msk->pm.ops = NULL; + if (pm_ops->release) + pm_ops->release(msk); + + bpf_module_put(pm_ops, pm_ops->owner); + + pr_debug("pm %s released\n", pm_ops->name); +} + void mptcp_pm_destroy(struct mptcp_sock *msk) { mptcp_pm_free_anno_list(msk); - - if (mptcp_pm_is_userspace(msk)) - mptcp_userspace_pm_free_local_addr_list(msk); + mptcp_pm_ops_release(msk); } void mptcp_pm_data_reset(struct mptcp_sock *msk) { - u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk)); + const struct net *net = sock_net((struct sock *)msk); + const char *pm_name = mptcp_get_path_manager(net); + u8 pm_type = mptcp_get_pm_type(net); struct mptcp_pm_data *pm = &msk->pm; memset(&pm->reset, 0, sizeof(pm->reset)); WRITE_ONCE(pm->pm_type, pm_type); - if (pm_type == MPTCP_PM_TYPE_KERNEL) { - bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk); - - /* pm->work_pending must be only be set to 'true' when - * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL - */ - WRITE_ONCE(pm->work_pending, - (!!mptcp_pm_get_local_addr_max(msk) && - subflows_allowed) || - !!mptcp_pm_get_add_addr_signal_max(msk)); - WRITE_ONCE(pm->accept_addr, - !!mptcp_pm_get_add_addr_accept_max(msk) && - subflows_allowed); - WRITE_ONCE(pm->accept_subflow, subflows_allowed); - } + rcu_read_lock(); + mptcp_pm_ops_init(msk, mptcp_pm_find(pm_name)); + rcu_read_unlock(); bitmap_fill(pm->id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); } diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index d39e7c178460..03c4584cca7a 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -1398,7 +1398,26 @@ static struct pernet_operations mptcp_pm_pernet_ops = { .size = sizeof(struct pm_nl_pernet), }; +static void mptcp_pm_kernel_init(struct mptcp_sock *msk) +{ + bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk); + struct mptcp_pm_data *pm = &msk->pm; + + /* pm->work_pending must be only be set to 'true' when + * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL + */ + WRITE_ONCE(pm->work_pending, + (!!mptcp_pm_get_local_addr_max(msk) && + subflows_allowed) || + !!mptcp_pm_get_add_addr_signal_max(msk)); + WRITE_ONCE(pm->accept_addr, + !!mptcp_pm_get_add_addr_accept_max(msk) && + subflows_allowed); + WRITE_ONCE(pm->accept_subflow, subflows_allowed); +} + struct mptcp_pm_ops mptcp_pm_kernel = { + .init = mptcp_pm_kernel_init, .name = "kernel", .owner = THIS_MODULE, }; diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 2cb62f026b1f..6afab631580f 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -683,7 +683,13 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr, return ret; } +static void mptcp_pm_userspace_release(struct mptcp_sock *msk) +{ + mptcp_userspace_pm_free_local_addr_list(msk); +} + static struct mptcp_pm_ops mptcp_pm_userspace = { + .release = mptcp_pm_userspace_release, .name = "userspace", .owner = THIS_MODULE, }; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 47710db243f4..fa9bb385feb9 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -220,6 +220,7 @@ struct mptcp_pm_data { struct mptcp_addr_info remote; struct list_head anno_list; struct list_head userspace_pm_local_addr_list; + struct mptcp_pm_ops *ops; spinlock_t lock; /*protects the whole PM data */ From patchwork Thu Mar 6 11:01:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004226 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 7DCD92045AE for ; Thu, 6 Mar 2025 11:02:03 +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=1741258923; cv=none; b=oFkKdKSRkx6Cd44VJoqrphj4w1GkJEfnor8MKl0WwdBR5MsDlBmJYtUWbZgVMmx5pI/r2kUJ9VUjEak/KIcaFSrklVhKk316XTz0JlwoBSgNLycryYsTtBU1Obu8xXBaPqXLV8vRjhdmjKuWQrqT/oIaGuPielgfOHsV1dAuB+A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258923; c=relaxed/simple; bh=pqPgFO6bggwblTnNyi2ZioI4yeR4qWTz0V8A/V5rwrE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EvfWNJxWU6jFBwEkLWWnPv+XXzsyGvlVKl+LULA9ydpUn2hHJzVekHimbIDYw8UFkRdMPpj/7wtRNmQVoBRcv77PJyd9ckLputC58KppXZnjCTtIb6NhuFB6GXPyH4X1ddOK+17XOqYIa8cD/xajY1h+MHOrMA5JTom8ZKQz0Pg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=WjwNL0XQ; 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="WjwNL0XQ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F452C4CEE0; Thu, 6 Mar 2025 11:02:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258923; bh=pqPgFO6bggwblTnNyi2ZioI4yeR4qWTz0V8A/V5rwrE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WjwNL0XQnsJyqSVQOVAy7e6hIFOb2TGtboIk9ZZRfc5v0DX18Qqj/m9nlpd/88i6W uTGyB4jx0azRGA4AtqObk90XmdGLXuvsbpx83rQeP7Lx400HtRAPpk82VijJsdoQ2L Gck56QdRpQJq+bzedsYqwmoMpCwcfU1xAlshLuOHErBpAcPeeRkABW/aPeFLTHzkqf HI7BSCbnqVwPLfFO1+iCJ39MIjHDDId7DVV6RC0h69DzrFLrVGZr4SeT4eTTECiM9r fWQXi+IS6joNizABO5nUU/d7R5gWR6XX73AOa00KqBr1j9C8BY19yqKmWC68vZWCf1 +VwLgrB0ezGTw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 06/12] mptcp: pm: add get_local_id() interface Date: Thu, 6 Mar 2025 19:01:41 +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 From: Geliang Tang This patch adds get_local_id() interface for struct mptcp_sched_ops, then mptcp_pm_get_local_id() can directly invoke get_local_id() interface through "ops" of "msk->pm". Instead of using mptcp_pm_is_userspace() to check which get_local_id() helper to invoke. Rename mptcp_pm_nl_get_local_id()/mptcp_userspace_pm_get_local_id() to mptcp_pm_kernel_get_local_id()/mptcp_pm_userspace_get_local_id() and make them static. Signed-off-by: Geliang Tang --- include/net/mptcp.h | 3 +++ net/mptcp/pm.c | 4 +--- net/mptcp/pm_kernel.c | 5 +++-- net/mptcp/pm_userspace.c | 5 +++-- net/mptcp/protocol.h | 4 ---- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 69f7b35e57c3..169e19440b03 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -116,6 +116,9 @@ struct mptcp_sched_ops { #define MPTCP_PM_NAME_MAX 16 struct mptcp_pm_ops { + int (*get_local_id)(struct mptcp_sock *msk, + struct mptcp_pm_addr_entry *skc); + char name[MPTCP_PM_NAME_MAX]; struct module *owner; struct list_head list; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1a2f1715871c..d2dfd91cab46 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -872,9 +872,7 @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc) skc_local.addr.id = 0; skc_local.flags = MPTCP_PM_ADDR_FLAG_IMPLICIT; - if (mptcp_pm_is_userspace(msk)) - return mptcp_userspace_pm_get_local_id(msk, &skc_local); - return mptcp_pm_nl_get_local_id(msk, &skc_local); + return msk->pm.ops->get_local_id(msk, &skc_local); } bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 03c4584cca7a..a67e94c02c64 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -693,8 +693,8 @@ static int mptcp_pm_nl_create_listen_socket(struct sock *sk, return err; } -int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *skc) +static int mptcp_pm_kernel_get_local_id(struct mptcp_sock *msk, + struct mptcp_pm_addr_entry *skc) { struct mptcp_pm_addr_entry *entry; struct pm_nl_pernet *pernet; @@ -1417,6 +1417,7 @@ static void mptcp_pm_kernel_init(struct mptcp_sock *msk) } struct mptcp_pm_ops mptcp_pm_kernel = { + .get_local_id = mptcp_pm_kernel_get_local_id, .init = mptcp_pm_kernel_init, .name = "kernel", .owner = THIS_MODULE, diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 6afab631580f..81ddc14bc273 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -126,8 +126,8 @@ mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id) return NULL; } -int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *skc) +static int mptcp_pm_userspace_get_local_id(struct mptcp_sock *msk, + struct mptcp_pm_addr_entry *skc) { __be16 msk_sport = ((struct inet_sock *) inet_sk((struct sock *)msk))->inet_sport; @@ -689,6 +689,7 @@ static void mptcp_pm_userspace_release(struct mptcp_sock *msk) } static struct mptcp_pm_ops mptcp_pm_userspace = { + .get_local_id = mptcp_pm_userspace_get_local_id, .release = mptcp_pm_userspace_release, .name = "userspace", .owner = THIS_MODULE, diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index fa9bb385feb9..6cae1ae5e9be 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1137,10 +1137,6 @@ bool mptcp_pm_add_addr_signal(struct mptcp_sock *msk, const struct sk_buff *skb, bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining, struct mptcp_rm_list *rm_list); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); -int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *skc); -int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *skc); bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); From patchwork Thu Mar 6 11:01:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004227 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 2C32120ADEE for ; Thu, 6 Mar 2025 11:02:04 +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=1741258925; cv=none; b=F5d+UoIgtUOn/SrhcjadPFivXqfw6uBtLGIhLHJQSIQvZbq4CVKdFEUc7/lJzqWQMTxMKHxXWfoHfSBinRXyaRWwnYDCeJ760NSmMh9820sY0AwrEPXH8DggHrI4l+zC6PoHScQAuIuD3I9V5OX96CLiXCarxByHsO3fHWoPEuc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258925; c=relaxed/simple; bh=9x4F27dZIYxd/heppiad/FpicRUMu5wlNlDJCMBEgG0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PROVI2Ii3Lt+lbr2m5bMP4W2WC2Yv6q2lwo9VL4Gfo1aSdFZMCUjUUf4NcDn5iz/cdBCADCf6wwuSRVbZYo3T0fk0ozrZc/ybZUi2W5eMWQFqfZ9zZB+SWnEa69pxndEeGZ66cCclr3mIFXKGVU6OIdf0OOzqkRqvOTYYndUGdY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sEQtqE4S; 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="sEQtqE4S" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DBE3FC4CEE0; Thu, 6 Mar 2025 11:02:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258924; bh=9x4F27dZIYxd/heppiad/FpicRUMu5wlNlDJCMBEgG0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sEQtqE4Srw6h8EMYjyp41OoHxZ3XkkYKFDW0T7SGxsNaqnRjQ6fgsVLejz/QmCua0 IdWWvjO4OeL6TMZ9vI0Ils57xqbotImBbaBOWyx5+x/qhZ4DKxkBKUeFYwo3prIodB 7nKEFx05/w9EseFgwMbtyFQ7X7tfHNApG0W+naL8RL8pvvO2vPTQpegaA81VySHRVb 6ghT+i+WM3gRGgoeH5uoUtZnqHokhh4377+2C0IZ79SeE3KfYuFVGNmRjJJOz3RoPA DnfdyP9HOr/YCod1TTY7xQEmdbtKOwsvfRQdsIhFzTKK/ZmXnCaxlWpecMBmOYLKyY /52sx5vvhCG8g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 07/12] mptcp: pm: add get_priority() interface Date: Thu, 6 Mar 2025 19:01:42 +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 From: Geliang Tang This patch adds get_priority() interface for struct mptcp_sched_ops, then mptcp_pm_is_backup() can directly invoke get_priority() interface through "ops" of "msk->pm". Instead of using mptcp_pm_is_userspace() to check which is_backup() helper to invoke. Rename mptcp_pm_nl_is_backup()/mptcp_userspace_pm_is_backup() to mptcp_pm_kernel_get_priority()/mptcp_pm_userspace_get_priority() and make them static. Signed-off-by: Geliang Tang --- include/net/mptcp.h | 2 ++ net/mptcp/pm.c | 5 +---- net/mptcp/pm_kernel.c | 4 +++- net/mptcp/pm_userspace.c | 5 +++-- net/mptcp/protocol.h | 2 -- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 169e19440b03..b344b909e749 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -118,6 +118,8 @@ struct mptcp_sched_ops { struct mptcp_pm_ops { int (*get_local_id)(struct mptcp_sock *msk, struct mptcp_pm_addr_entry *skc); + bool (*get_priority)(struct mptcp_sock *msk, + struct mptcp_addr_info *skc); char name[MPTCP_PM_NAME_MAX]; struct module *owner; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index d2dfd91cab46..29bc903658f7 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -881,10 +881,7 @@ bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) mptcp_local_address((struct sock_common *)skc, &skc_local); - if (mptcp_pm_is_userspace(msk)) - return mptcp_userspace_pm_is_backup(msk, &skc_local); - - return mptcp_pm_nl_is_backup(msk, &skc_local); + return msk->pm.ops->get_priority(msk, &skc_local); } static void mptcp_pm_subflows_chk_stale(const struct mptcp_sock *msk, struct sock *ssk) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index a67e94c02c64..9fc140d8fe26 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -722,7 +722,8 @@ static int mptcp_pm_kernel_get_local_id(struct mptcp_sock *msk, return ret; } -bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc) +static bool mptcp_pm_kernel_get_priority(struct mptcp_sock *msk, + struct mptcp_addr_info *skc) { struct pm_nl_pernet *pernet = pm_nl_get_pernet_from_msk(msk); struct mptcp_pm_addr_entry *entry; @@ -1418,6 +1419,7 @@ static void mptcp_pm_kernel_init(struct mptcp_sock *msk) struct mptcp_pm_ops mptcp_pm_kernel = { .get_local_id = mptcp_pm_kernel_get_local_id, + .get_priority = mptcp_pm_kernel_get_priority, .init = mptcp_pm_kernel_init, .name = "kernel", .owner = THIS_MODULE, diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 81ddc14bc273..7fc19b844384 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -145,8 +145,8 @@ static int mptcp_pm_userspace_get_local_id(struct mptcp_sock *msk, return mptcp_userspace_pm_append_new_local_addr(msk, skc, true); } -bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, - struct mptcp_addr_info *skc) +static bool mptcp_pm_userspace_get_priority(struct mptcp_sock *msk, + struct mptcp_addr_info *skc) { struct mptcp_pm_addr_entry *entry; bool backup; @@ -690,6 +690,7 @@ static void mptcp_pm_userspace_release(struct mptcp_sock *msk) static struct mptcp_pm_ops mptcp_pm_userspace = { .get_local_id = mptcp_pm_userspace_get_local_id, + .get_priority = mptcp_pm_userspace_get_priority, .release = mptcp_pm_userspace_release, .name = "userspace", .owner = THIS_MODULE, diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6cae1ae5e9be..d26e89d960a1 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1138,8 +1138,6 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining, struct mptcp_rm_list *rm_list); int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); -bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); -bool mptcp_userspace_pm_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); int mptcp_pm_nl_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, From patchwork Thu Mar 6 11:01:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004228 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 B8665204F60 for ; Thu, 6 Mar 2025 11:02:06 +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=1741258926; cv=none; b=tk1imXQEax8r9uQyYjLWDjE8rfEPmnKd4sTU/bqB12uopW/p+xRuLMKaBR9i0A89To7sItmCDv2mggsQVD0D8NrU7oDrGNo6Lo5wjllHXGxrQYNqyXGkLWAT1pviyQc6ThSMEXwEEzO+wwKr/fYmvxT4Ho6pIbP+L/uHvwBx390= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258926; c=relaxed/simple; bh=nG64M2SPPhyUFylq3DssOJHpSurZvx669gC7n6OSwu8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KZUrxuZRE3WLupwjrFHT5wUQWH14Rk0HC7PjwEk3EttZMTtIt/2kJHDbL0YGH2Ns0MxVikoxRSKKo0tEsc+HfPDM522Dptk7Mf5XicFrFEDIeozqigNjTiT6+vToawlX4N3J3QeOa/T+Ke5uQMxALdYi2kkkWUvrex9gmWD2lp8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NIfbUPU4; 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="NIfbUPU4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2D458C4CEE2; Thu, 6 Mar 2025 11:02:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258926; bh=nG64M2SPPhyUFylq3DssOJHpSurZvx669gC7n6OSwu8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NIfbUPU4ReJUUX5c5fJHb2Gp/UT8QVzsRrKtkuW/KDhmG+xgR1jhmL2DPvaGh0uhV 1UF9IZFoJPMSXoFWuwB8l0PWxHh4UC11xxWpaTWWw5u7gXdV3c/YpN3/w+7sSbN1Nj hSk3YZbN2ptTAVTM7Yw6OOuLvtr6MDHh4+FefI0qpY6fgrOAmeWCsnN7x9iWlw9JRc /Cl2ZNunOZwsLy7v6eNQfFQ6ciLOZppcBu77u/79gBSWR/zqp/pS3Fol3RKXWAue85 XB9mvT0qrGOp+R5+Qn4/h+ZzX50YiWbf+O9JnoMfqv+/Y+6uohvjTyTGsvetuIHH/A H8II3Jfv2vLrg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 08/12] mptcp: pm: validate mandatory ops Date: Thu, 6 Mar 2025 19:01:43 +0800 Message-ID: <40c12b3865d03d2a173d10538ea38f3b2c9745ca.1741258415.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 From: Geliang Tang This patch adds a helper mptcp_pm_validate() to check whether required ops are defined. It will be invoked in .validate of struct bpf_struct_ops. Currently mandatory ops of mptcp_pm_ops are get_local_id and get_priority. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 16 ++++++++++++++++ net/mptcp/protocol.h | 1 + 2 files changed, 17 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 29bc903658f7..5d666b0891b3 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -1045,8 +1045,24 @@ struct mptcp_pm_ops *mptcp_pm_find(const char *name) return NULL; } +int mptcp_pm_validate(struct mptcp_pm_ops *pm_ops) +{ + if (!pm_ops->get_local_id || !pm_ops->get_priority) { + pr_err("%s does not implement required ops\n", pm_ops->name); + return -EINVAL; + } + + return 0; +} + int mptcp_pm_register(struct mptcp_pm_ops *pm_ops) { + int ret; + + ret = mptcp_pm_validate(pm_ops); + if (ret) + return ret; + spin_lock(&mptcp_pm_list_lock); if (mptcp_pm_find(pm_ops->name)) { spin_unlock(&mptcp_pm_list_lock); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d26e89d960a1..1ce6c22cb295 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1059,6 +1059,7 @@ extern struct mptcp_pm_ops mptcp_pm_kernel; struct mptcp_pm_ops *mptcp_pm_find(const char *name); int mptcp_pm_register(struct mptcp_pm_ops *pm_ops); void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops); +int mptcp_pm_validate(struct mptcp_pm_ops *pm_ops); void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk); From patchwork Thu Mar 6 11:01:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004229 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 7E91820AF77 for ; Thu, 6 Mar 2025 11:02:08 +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=1741258928; cv=none; b=HEXnKddPGegvVjozn/1vFGN73T84MaK7xt2dbXoEW1bqCep8a0v4OtS4sPs95MXjsTAXgJoV4YHMILMBOX6i5Fqqsd6c1Ss8Elo0pXo0kxuDfCbcsoFZ0m99Un0lKtPCuI+jHX2o3xXfwys2m7vcN6jb/x8bz45u3lZr/7+RfCo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258928; c=relaxed/simple; bh=97xTs12ZbUzEOHSOJpfpvHRzydUPy50SHjQXmO5DWr0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Da1/iHwIo8APZpn6bCMV1ZvBepGeCmdF4WEsaMjs3UiZfC4i7DaCuGj1DBr+5GLOIZZcxtuTRBJoSzSbtyUsUbffBhu/jzYh3O3eZqayiCnnKbYeU8+CSSzRkzAW4dpUv672aLjLUKlBNkh7/uLH53zzkhc0huIcMf7W58mGR0I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=s65E02fN; 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="s65E02fN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D107DC4CEE0; Thu, 6 Mar 2025 11:02:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258927; bh=97xTs12ZbUzEOHSOJpfpvHRzydUPy50SHjQXmO5DWr0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=s65E02fNns0drj3Rga38lC1MhRFYkjGXK1aEys1iRiXCaYOGCb4KhJpLhjtXKv0Q3 1l8MEVqG51TNqOt48TjC/w16mazeTcirbULfnFWrycuSgXNF9isb+gjGehvBwBVEVZ W4og7mN6jQP1Gx6YyJXgtfBn91qEiEewh98XmNar0UXCTlrDT5/qvCwS8E7CvqgdM3 +/HAtasTe0Yuno27WbMN4HUiOTIF74F3aCrqheIaH8Y7nxe+VJqGtXtDgE1Cje8xf7 qEatGuBPCKX+5S2zIljeIp967ELpUhKYunIpG92DB8w5cVC6yvuQ+6GL5Yifv9/tzj M8u14LEcjs32Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 09/12] mptcp: sysctl: map path_manager to pm_type Date: Thu, 6 Mar 2025 19:01:44 +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 From: Geliang Tang This patch maps the newly added path manager sysctl "path_manager" to the old one "pm_type". path_manager pm_type "kernel" -> MPTCP_PM_TYPE_KERNEL "userspace" -> MPTCP_PM_TYPE_USERSPACE others -> __MPTCP_PM_TYPE_NR Signed-off-by: Geliang Tang --- net/mptcp/ctrl.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 1f405be6bc00..6a35e6bb0a63 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -200,6 +200,9 @@ static int mptcp_set_path_manager(char *path_manager, const char *name) static int proc_path_manager(const struct ctl_table *ctl, int write, void *buffer, size_t *lenp, loff_t *ppos) { + struct mptcp_pernet *pernet = container_of(ctl->data, + struct mptcp_pernet, + path_manager); char (*path_manager)[MPTCP_PM_NAME_MAX] = ctl->data; char pm_name[MPTCP_PM_NAME_MAX]; const struct ctl_table tbl = { @@ -211,8 +214,16 @@ static int proc_path_manager(const struct ctl_table *ctl, int write, strscpy(pm_name, *path_manager, MPTCP_PM_NAME_MAX); ret = proc_dostring(&tbl, write, buffer, lenp, ppos); - if (write && ret == 0) + if (write && ret == 0) { + u8 pm_type = __MPTCP_PM_TYPE_NR; + + if (strncmp(pm_name, "kernel", MPTCP_PM_NAME_MAX) == 0) + pm_type = MPTCP_PM_TYPE_KERNEL; + else if (strncmp(pm_name, "userspace", MPTCP_PM_NAME_MAX) == 0) + pm_type = MPTCP_PM_TYPE_USERSPACE; + pernet->pm_type = pm_type; ret = mptcp_set_path_manager(*path_manager, pm_name); + } return ret; } From patchwork Thu Mar 6 11:01:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004230 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 C3D03199FB2 for ; Thu, 6 Mar 2025 11:02:09 +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=1741258929; cv=none; b=nTeFDAY08jGdEdSmtzpXa8+ndKl10l4J5zu+pPpXBA6CHjVC2mlPGPacIkMDYvQcQINqQSLHFiKpz5maJcTIL5zBXq4bZdRih++P/Yvyp6mmPyrMJ3QwwPqw1N2RjYZnsTxiAteLJB9brePNdYIGctO1zmaf3Wp5Og75kj7GvpE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258929; c=relaxed/simple; bh=O3BqlVHdCPYXt2mjOT4Pd7KhPSnVulTQdujQqr43vag=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dk6xPmOthOxh1tjAp1jkS4/i9eEae7PwaQyIL59pPx6Bs3+lNvT22A1MPqVvCa8o3Wvf+BA08b9+kkaQyRuHCaVvHPN+clrqT5znjfeKRgUpwnVGqfaRMRUZIWn72qJ5jVI4vi0rGXUr5UB/JRAVD0Ebj7zh5zn76H8WxS8mX1s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XTpdj+7L; 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="XTpdj+7L" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91FCBC4CEE2; Thu, 6 Mar 2025 11:02:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258929; bh=O3BqlVHdCPYXt2mjOT4Pd7KhPSnVulTQdujQqr43vag=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XTpdj+7LRfCgAL97hdFkaQ8/DK/XPGicX1Zo3jYLgy0aQeOwAtNYE4vf6P4S6AQ/x 1Zi3KopXxBHprdEM5QZ3q1QMDQ4aOrFIvxF5ZIUrpihdkUhPUZMzNbcOdWVBo8JEb7 fazZSGirp4cXqTu4Me/RzDHTcFBFVnGlBFQuFTYaIC6FkuVu8rNt04CGLnOsvUKhBi pchTgm+MibVQKVJbprkaFKGhIU6EZ58iD+eUDclZsPgafdMMLrMxgiW6iS6VmaTtyI 81iuWwcIEFrRHQK8WSr+PIb98mOWGJk1xGX2PUSTXtI980hg6hoyNKsY7MNDpLeXq/ ErU3IlrBb3H0Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 10/12] mptcp: sysctl: map pm_type to path_manager Date: Thu, 6 Mar 2025 19:01:45 +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 From: Geliang Tang This patch adds a new proc_handler "proc_pm_type" for "pm_type" to map old path manager sysctl "pm_type" to the newly added "path_manager". path_manager pm_type MPTCP_PM_TYPE_KERNEL -> "kernel" MPTCP_PM_TYPE_USERSPACE -> "userspace" Signed-off-by: Geliang Tang --- net/mptcp/ctrl.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 6a35e6bb0a63..357083977ba5 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -228,6 +228,29 @@ static int proc_path_manager(const struct ctl_table *ctl, int write, return ret; } +static int proc_pm_type(const struct ctl_table *ctl, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct mptcp_pernet *pernet = container_of(ctl->data, + struct mptcp_pernet, + pm_type); + int ret; + + ret = proc_dou8vec_minmax(ctl, write, buffer, lenp, ppos); + if (write && ret == 0) { + u8 pm_type = READ_ONCE(*(u8 *)ctl->data); + char *pm_name = "unknown"; + + if (pm_type == MPTCP_PM_TYPE_KERNEL) + pm_name = "kernel"; + else if (pm_type == MPTCP_PM_TYPE_USERSPACE) + pm_name = "userspace"; + mptcp_set_path_manager(pernet->path_manager, pm_name); + } + + return ret; +} + static struct ctl_table mptcp_sysctl_table[] = { { .procname = "enabled", @@ -272,7 +295,7 @@ static struct ctl_table mptcp_sysctl_table[] = { .procname = "pm_type", .maxlen = sizeof(u8), .mode = 0644, - .proc_handler = proc_dou8vec_minmax, + .proc_handler = proc_pm_type, .extra1 = SYSCTL_ZERO, .extra2 = &mptcp_pm_type_max }, From patchwork Thu Mar 6 11:01:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004231 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 844C8205E25 for ; Thu, 6 Mar 2025 11:02:11 +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=1741258931; cv=none; b=bqry1bDYJ3WrTCm9+Ju7d9dtA5JqK8AqF69KPbSj/fwOGEiiKtAUR7ZGI69NIyeW4GVDE8gL8hWorNq7iA58dLj1DL2s1PZc3l5Suvl2oeJZGAMixmYaruHfJVEfNb65tGPDiMhgog2gw/1CiBFr/bttrCe7FcJT5+v8N6CM0gU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258931; c=relaxed/simple; bh=nWbGRbCRgYZIRNZfjyRxCpdNerMpFC7txV2DoSSF/60=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=epIYBwQd6e+5wzfEuXmc2YoyGWTMMRf6EN0OdyNFl21QIND+HAInsIfxc2NmQ/qv4NHb+PeaPzlr/z1Z3jDqzKYA3C0oFv9JadohxGFmLGFCXW52T7jGJ3o/N0ViEUPjvXTNwUQ0oggFpfvcaLb2Wjvkve9LheJFJGhwQL/wSlE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZUG6rrbW; 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="ZUG6rrbW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5282FC4CEE2; Thu, 6 Mar 2025 11:02:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258931; bh=nWbGRbCRgYZIRNZfjyRxCpdNerMpFC7txV2DoSSF/60=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZUG6rrbWP4IjjCbMk2Z5Wl8XLLccgKRerJc76x4ayeM2FjSRXYCH/zfFQA/wwW+d4 TmslfuFqI8SEtKb142mwByOy1SMpVGH0V+mOUfMUX4LPnQKY+p0KNzWeJ0PxHt38A5 hf1Hk15LB/AmwwlYHTit2bmpsimsLCqvREM+EKgyEf28M/xnWjt5vLk0plBQ7iq3FO Uw3CSLs24TpREZ4ZGHDDwrXCRLSpaGe63vBfMfQlapL4guFKSUdCtjexxZc1+YlUTm duPSayZIFw51LDYJBNFl4ycbn/E7rAiwjEBHkiCbviGQzOZCthNiK3JFxUDDHXYNNW cun7BX9Gt/Xrg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 11/12] mptcp: sysctl: add available_path_managers Date: Thu, 6 Mar 2025 19:01:46 +0800 Message-ID: <269ed2f20a9f017e9a32ace3728dde2f63774936.1741258415.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 From: Geliang Tang Similarly to net.mptcp.available_schedulers, this patch adds a new one net.mptcp.available_path_managers to list the available path managers. Signed-off-by: Geliang Tang --- Documentation/networking/mptcp-sysctl.rst | 4 ++++ include/net/mptcp.h | 2 ++ net/mptcp/ctrl.c | 25 +++++++++++++++++++++++ net/mptcp/pm.c | 19 +++++++++++++++++ net/mptcp/protocol.h | 1 + 5 files changed, 51 insertions(+) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst index b78a2254d452..5bfab01eff5a 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -30,6 +30,10 @@ allow_join_initial_addr_port - BOOLEAN Default: 1 +available_path_managers - STRING + Shows the available path managers choices that are registered. More + path managers may be available, but not loaded. + available_schedulers - STRING Shows the available schedulers choices that are registered. More packet schedulers may be available, but not loaded. diff --git a/include/net/mptcp.h b/include/net/mptcp.h index b344b909e749..6a08ac862bbe 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -114,6 +114,8 @@ struct mptcp_sched_ops { } ____cacheline_aligned_in_smp; #define MPTCP_PM_NAME_MAX 16 +#define MPTCP_PM_MAX 128 +#define MPTCP_PM_BUF_MAX (MPTCP_PM_NAME_MAX * MPTCP_PM_MAX) struct mptcp_pm_ops { int (*get_local_id)(struct mptcp_sock *msk, diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 357083977ba5..14c32d06f51e 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -251,6 +251,24 @@ static int proc_pm_type(const struct ctl_table *ctl, int write, return ret; } +static int proc_available_path_managers(const struct ctl_table *ctl, + int write, void *buffer, + size_t *lenp, loff_t *ppos) +{ + struct ctl_table tbl = { .maxlen = MPTCP_PM_BUF_MAX, }; + int ret; + + tbl.data = kmalloc(tbl.maxlen, GFP_USER); + if (!tbl.data) + return -ENOMEM; + + mptcp_pm_get_available(tbl.data, MPTCP_PM_BUF_MAX); + ret = proc_dostring(&tbl, write, buffer, lenp, ppos); + kfree(tbl.data); + + return ret; +} + static struct ctl_table mptcp_sysctl_table[] = { { .procname = "enabled", @@ -336,6 +354,12 @@ static struct ctl_table mptcp_sysctl_table[] = { .mode = 0644, .proc_handler = proc_path_manager, }, + { + .procname = "available_path_managers", + .maxlen = MPTCP_PM_BUF_MAX, + .mode = 0444, + .proc_handler = proc_available_path_managers, + }, }; static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet) @@ -362,6 +386,7 @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet) table[9].data = &pernet->blackhole_timeout; table[10].data = &pernet->syn_retrans_before_tcp_fallback; table[11].data = &pernet->path_manager; + /* table[12] is for available_path_managers which is read-only info */ hdr = register_net_sysctl_sz(net, MPTCP_SYSCTL_PATH, table, ARRAY_SIZE(mptcp_sysctl_table)); diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 5d666b0891b3..ef76939435bf 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -1085,3 +1085,22 @@ void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops) list_del_rcu(&pm_ops->list); spin_unlock(&mptcp_pm_list_lock); } + +/* Build string with list of available path manager values. + * Similar to tcp_get_available_congestion_control() + */ +void mptcp_pm_get_available(char *buf, size_t maxlen) +{ + struct mptcp_pm_ops *pm_ops; + size_t offs = 0; + + rcu_read_lock(); + list_for_each_entry_rcu(pm_ops, &mptcp_pm_list, list) { + offs += snprintf(buf + offs, maxlen - offs, "%s%s", + offs == 0 ? "" : " ", pm_ops->name); + + if (WARN_ON_ONCE(offs >= maxlen)) + break; + } + rcu_read_unlock(); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 1ce6c22cb295..5a64ed3049d1 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1060,6 +1060,7 @@ struct mptcp_pm_ops *mptcp_pm_find(const char *name); int mptcp_pm_register(struct mptcp_pm_ops *pm_ops); void mptcp_pm_unregister(struct mptcp_pm_ops *pm_ops); int mptcp_pm_validate(struct mptcp_pm_ops *pm_ops); +void mptcp_pm_get_available(char *buf, size_t maxlen); void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk); From patchwork Thu Mar 6 11:01:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 14004232 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 B5D2E20AF77 for ; Thu, 6 Mar 2025 11:02:13 +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=1741258933; cv=none; b=o9BiJqatyRCwoQZ4iL6fozG0azoBqIf6SEI+VEeNoZUdygdOdxMY2jXAVmJksKjou6ocZQIL4I2gnsYlPvOKRmGyLA+6wsyNgBKaAuuKeV6B+U28TCpV5pUowg0RTHkMBAlUpT1gVK+fcoPfcvU7p928w2vr5X58CR9IRxdV/vY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741258933; c=relaxed/simple; bh=ZTU9d6sfmDmRD0Pe8ErrQiYJ3Hw7O4cLW5SO4opndGY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=blkyQwoNgbR1Wx69+U4MKH+rHp2cDcKCfkjzXOAbmKjOYGk5rwxvjflp1WClLgu4hdaktk202ElRtmLv6W8suC+j9OacH3ghgKJoSA+Kt/EtY+73PrZkKgNftflDXCIh31NA3008UcoJwOnTxS0ZNTGqT8WDJ/Xib8R7J6slrpU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ECROpTfS; 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="ECROpTfS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 133A2C4CEEB; Thu, 6 Mar 2025 11:02:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1741258933; bh=ZTU9d6sfmDmRD0Pe8ErrQiYJ3Hw7O4cLW5SO4opndGY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ECROpTfStOs/NffAktnjdRw5+mxI9KhWZbAE+KHOiyQzl5d8hnQrOHb66B9GffzKy NA74JDuRjhiwN1wOYly4HtTox+tSBPsDr0Y1Ei8DWYUGeqMu9T2YLGi+LD3sFt2FZr lMuFOcSkhPW4eaDraUx6tdqszvJL9bdpK9NIhB2vd7P9KppBTvjp9o45VRVe55VpfT RQf39m6iz0ji63aO/8TYR8ntqaHgx/uGLO+ibUJP92Inn4d53V+K7WL0MPAoIuodhG LBmCJUF0PqWimFQsynPPUssQYwBDGdraAgsbrToICdpkZr3D4F5byJ/fgWwqPHhrAy EBrJjvGIzo8Zw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 12/12] selftests: mptcp: add path_manager sysctl tests Date: Thu, 6 Mar 2025 19:01: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 From: Geliang Tang This patch checks if the newly added net.mptcp.path_manager is mapped successfully from or to the old net.mptcp.pm_type. And add a new helper set_path_manager() to set the newly added net.mptcp.path_manager. Signed-off-by: Geliang Tang fix Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/userspace_pm.sh | 58 ++++++++++++++++++- 1 file changed, 55 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/testing/selftests/net/mptcp/userspace_pm.sh index 3651f73451cf..35ba4edc0fa2 100755 --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh @@ -118,9 +118,61 @@ trap cleanup EXIT # Create and configure network namespaces for testing mptcp_lib_ns_init ns1 ns2 -for i in "$ns1" "$ns2" ;do - ip netns exec "$i" sysctl -q net.mptcp.pm_type=1 -done + +set_path_manager() +{ + local ns=$1 + local pm=$2 + + if ! ip netns exec ${ns} sysctl net.mptcp.available_path_managers | + grep -wq "${pm}"; then + test_fail "path manager ${pm} not found" + return 1 + fi + ip netns exec ${ns} sysctl -q net.mptcp.path_manager="${pm}" +} + +if [ -f /proc/sys/net/mptcp/path_manager ]; then + ip netns exec "$ns1" sysctl -q net.mptcp.pm_type=0 + pm_name="$(ip netns exec "$ns1" sysctl -n net.mptcp.path_manager)" + if [ "${pm_name}" != "kernel" ]; then + test_fail "unexpected pm_name: ${pm_name}" + mptcp_lib_result_print_all_tap + exit ${KSFT_FAIL} + fi + + ip netns exec "$ns1" sysctl -q net.mptcp.pm_type=1 + pm_name="$(ip netns exec "$ns1" sysctl -n net.mptcp.path_manager)" + if [ "${pm_name}" != "userspace" ]; then + test_fail "unexpected pm_name: ${pm_name}" + mptcp_lib_result_print_all_tap + exit ${KSFT_FAIL} + fi + + set_path_manager "$ns1" "kernel" + pm_type="$(ip netns exec "$ns1" sysctl -n net.mptcp.pm_type)" + if [ "${pm_type}" != "0" ]; then + test_fail "unexpected pm_type: ${pm_type}" + mptcp_lib_result_print_all_tap + exit ${KSFT_FAIL} + fi + + set_path_manager "$ns1" "userspace" + pm_type="$(ip netns exec "$ns1" sysctl -n net.mptcp.pm_type)" + if [ "${pm_type}" != "1" ]; then + test_fail "unexpected pm_type: ${pm_type}" + mptcp_lib_result_print_all_tap + exit ${KSFT_FAIL} + fi + + set_path_manager "$ns2" "userspace" + print_test "check path_manager and pm_type sysctl mapping" + test_pass +else + for i in "$ns1" "$ns2"; do + ip netns exec "$i" sysctl -q net.mptcp.pm_type=1 + done +fi # "$ns1" ns2 # ns1eth2 ns2eth1