From patchwork Mon Mar 3 04:22:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998168 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 807E613C9D4 for ; Mon, 3 Mar 2025 04:25:21 +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=1740975921; cv=none; b=Vz8p8ze6qw+JKT+CQby7N37J8MaMbUAcBP/EvRs1vHY8B/1cpsHtbGip9eJGY1fA+qF8QVUHHwX56ynivJb0ljSgSlL0RnfAWtx1K1tNhmJL3zYLB383PM8o1YFEt9a/qiqquNaTLxdA85MljvyMFGR1ym1AuVzh/6vTTxCtHXw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975921; c=relaxed/simple; bh=FRPlnFLuC0H/LJP2vH/epPIswB4mGMu+4cInAMfg2r4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=n4izGVFhXGnpOJzpZ9MvfD1Gj7p9SsCJtauOWZsNhEWh15YBBiUCynZ65Lq7WYGI6/cbzgUm9Dif4qAt1SwswJlsJMebAwmbW37ilQ5kHC3i8iPIQl3MUnNkJdX9C4vWjk6foQq+wnqXYfrsfGa4VVEM77crwQylczbLXzq45Xw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j3Hqqj/z; 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="j3Hqqj/z" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C5748C4CEE4; Mon, 3 Mar 2025 04:25:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975921; bh=FRPlnFLuC0H/LJP2vH/epPIswB4mGMu+4cInAMfg2r4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j3Hqqj/zeAi14B2UZkkKLWeMAT9xtlVfMCu72B8MWZk89MV4dJofPLbXcHz4LBa1Z 7omjnMEyGiaZqut5d1RDhtQAXA/Lxea56hy+iQdydYImavuTgOmG+ykm6CPfUOWET4 43bX1mjSiArVdhf30onS5koH9GzQ2qknrIlEBHCIwyJBL4/Yq6t61HBlHDow+LKa3t cUxDrK10V/9V2rR/pkKzla5/ZPfqXvzkD73J9+v32b7wBVtldlv/cXCSJQsBaMnUlu 5M2F+J7n5GPgf8iXFz5wZxMPRCd1lSFsO9H2KvzC1KBCWDLK1B4pvJDlKEFqlecw72 ibYt3KgoNMd3g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 01/11] mptcp: pm: define struct mptcp_pm_ops Date: Mon, 3 Mar 2025 12:22:49 +0800 Message-ID: <993dd206cd1b29d4347514e3590bba675927f29a.1740975633.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 a userspace path manager, which contains a set of interfaces. Add a set of functions to register, unregister, find and validate a given struct ops. Signed-off-by: Geliang Tang --- include/net/mptcp.h | 17 ++++++++++++++ net/mptcp/pm.c | 55 ++++++++++++++++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 5 ++++ 3 files changed, 77 insertions(+) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 72d6e6597add..53e67b90c37a 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 */ @@ -121,6 +122,22 @@ struct mptcp_sched_ops { void (*release)(struct mptcp_sock *msk); } ____cacheline_aligned_in_smp; +#define MPTCP_PM_NAME_MAX 16 + +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; + 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 833839d7286e..53a29adf7cae 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, @@ -1024,3 +1029,53 @@ void __init mptcp_pm_init(void) { 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; + + list_for_each_entry_rcu(pm, &mptcp_pm_list, list) { + if (!strcmp(pm->name, name)) + return pm; + } + + return NULL; +} + +int mptcp_pm_validate(struct mptcp_pm_ops *pm) +{ + if (!pm->get_local_id || !pm->get_priority) { + pr_err("%s does not implement required ops\n", pm->name); + return -EINVAL; + } + + return 0; +} + +int mptcp_pm_register(struct mptcp_pm_ops *pm) +{ + int ret; + + ret = mptcp_pm_validate(pm); + if (ret) + return ret; + + spin_lock(&mptcp_pm_list_lock); + if (mptcp_pm_find(pm->name)) { + spin_unlock(&mptcp_pm_list_lock); + return -EEXIST; + } + list_add_tail_rcu(&pm->list, &mptcp_pm_list); + spin_unlock(&mptcp_pm_list_lock); + + pr_debug("%s registered\n", pm->name); + return 0; +} + +void mptcp_pm_unregister(struct mptcp_pm_ops *pm) +{ + spin_lock(&mptcp_pm_list_lock); + list_del_rcu(&pm->list); + spin_unlock(&mptcp_pm_list_lock); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 9bdfd915d62f..090592c108d6 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1050,6 +1050,11 @@ 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_validate(struct mptcp_pm_ops *pm); +int mptcp_pm_register(struct mptcp_pm_ops *pm); +void mptcp_pm_unregister(struct mptcp_pm_ops *pm); + 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 Mon Mar 3 04:22:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998169 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 2D76C13C9D4 for ; Mon, 3 Mar 2025 04:25:22 +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=1740975923; cv=none; b=gnhFobkf0IWNUsH++9Hohl7R/u9clE6FIOajJpXImTp0qZ29durtTM+c1FJxx4iLklfGGt72dMmfTOFXsjCNI3BcKCDCJNhJxhxLa/ievlc7HvTVH46K55//HziDY/BJ1CdCBfTFhWwt0iul2C9+bqCEq/vaAOcGQpwWPttgWPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975923; c=relaxed/simple; bh=XwJNhvKtEzvKoJc1RspRrMTtmkp+ceaB+8LAEwhGjNc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nzou/mdzMss3C3RD4snOIVJFdDl8g3xNrRX4RHBFGXESpk1ElpTbjFOGLNWPb9KvFApBDLM0xoQM4YsPlP9SD9d7SCytpMRoT0nYeluGf0XUyg+mpYPcBsXX6r9ltYCJ5/5t2FR2CS+510zUO9Mu9e/pJbkHp0z1F2ZproM5UcE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=J+W4Ckl3; 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="J+W4Ckl3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A029BC4CED6; Mon, 3 Mar 2025 04:25:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975922; bh=XwJNhvKtEzvKoJc1RspRrMTtmkp+ceaB+8LAEwhGjNc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J+W4Ckl3PS8TIxMMo/kspKpYjx67W/ikMMUm577nKzuXXgc2S33KIkFb9SasUw76j yazLN5DdV6Ro8Ez7P1Mrrdc69WL+iZ098kn4lDQK847QtnW9nIVuG9FaWf4Xshqt3C CK9WuwbKn/MdjqJJutICBrk7hBv6jKm8sCwxAqIhhw30Oa4qK/2WJyOqu0zKh+1FW3 p8jBHVSYnyQNr4HokhhzvTeOvQn+Yas5O1bmuCzffHYYm/p5lg1nCwj3ZLcAvGUcze 60hwDEcR8yEZSFg76LJKrdCh+mwHGdRJHgDucwAYpopXqZkH0Vj48gtL3bRLCOJLe9 oqH+GgdL0zUbQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 02/11] mptcp: sysctl: new sysctl to set path manager by name Date: Mon, 3 Mar 2025 12:22:50 +0800 Message-ID: <6a04af1ad584b4e067b61ca4c7717f7d72c03202.1740975633.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 | 22 ++++++++++ net/mptcp/ctrl.c | 50 +++++++++++++++++++++++ net/mptcp/protocol.h | 1 + 3 files changed, 73 insertions(+) diff --git a/Documentation/networking/mptcp-sysctl.rst b/Documentation/networking/mptcp-sysctl.rst index 03e1d3610333..5f6c02c12f5b 100644 --- a/Documentation/networking/mptcp-sysctl.rst +++ b/Documentation/networking/mptcp-sysctl.rst @@ -72,6 +72,26 @@ 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. + User-defined BPF-based path managers can also be set via this + sysctl. + + This is a per-namespace sysctl. + + * "kernel" - In-kernel path manager + * "userspace" - Userspace path manager + * all other strings - BPF-based path managers + + 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 +104,8 @@ pm_type - INTEGER This is a per-namespace sysctl. + (Deprecated, 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..d64e6b4f6d1d 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 val[MPTCP_PM_NAME_MAX]; + const struct ctl_table tbl = { + .data = val, + .maxlen = MPTCP_PM_NAME_MAX, + }; + int ret; + + strscpy(val, *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, val); + + 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 090592c108d6..737f148770e3 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 Mon Mar 3 04:22:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998170 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 D679213C9D4 for ; Mon, 3 Mar 2025 04:25:24 +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=1740975924; cv=none; b=rZUoh1kOU5hGD+L0TPMDY3RB1A5EkUgoN2nwfIBZZgvzzohzk/wXMtrulWvbAnQNZTdW8rWmjC8JTQ/695wMNXUbCmXtO03/VMRSyB0bQXgR3CGeAibj4qekzpedqCwY7bB+AT5piqR3PaBL3J++BMDQ0c70ulr890hg84ZY9vM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975924; c=relaxed/simple; bh=YtKENI08o18Gf4DbWHU3CEBLRmY39APexWCyAjvkW6c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kkFSaRktdg4DFaggaETPIS9QLPO6QA2o38EbSnP12JMv+y7paQV/clKQxcpN+fdmUBZlLrey1NWsBah/C7h4k46MiPrEW97WAM8sOACKZI4kVslboy4//+PvlSZFgc3cB0/arzHw+fz9wmv7Pgqh9uSnsQAcjJaCr86IP9niPhA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=B69dCpfo; 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="B69dCpfo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2E6D1C4CEE4; Mon, 3 Mar 2025 04:25:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975924; bh=YtKENI08o18Gf4DbWHU3CEBLRmY39APexWCyAjvkW6c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=B69dCpfoA+pud7n0HnYwXMo7mv9NoZ5wW25nwocUGGrlh4+C5Sn2OPCGok/T9QSWE 8DqMnJRRojzs8FnNJEBFX2uw8zd0b8zZQIgRJTI1KufNREfRS7vokjdsXtY4A/y886 3LJAFq/bFLJmAFQL1De9A3BEQYkGmMEoIf61tnaf7QP5GmZWjN7A/xPwlHe7hueKxH Vn1oX9ewz2J+4lWbdoWVEqaGtIknkcHrZ5PcBBw2C+nifFjzWkBeHfYjZRDsSFuqzP u1/1UW9S3DyZL0WKB20IcM2QUjmUEOWbO0FuSVOLwnnwJgDQvVeglD+zQ+ZMGJkJmt cbxEGWMu1WlrA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 03/11] mptcp: sysctl: map pm_type to path_manager Date: Mon, 3 Mar 2025 12:22:51 +0800 Message-ID: <8840912119ce5a1180550745d496087ac7e81fa0.1740975633.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 new proc_handler "proc_pm_type" for "pm_type" to map old path manager sysctl "pm_type" to the newly added "path_manager". Signed-off-by: Geliang Tang --- net/mptcp/ctrl.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index d64e6b4f6d1d..32f13ab7db0a 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -217,6 +217,35 @@ 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); + unsigned int val = READ_ONCE(*(u8 *)ctl->data); + const struct ctl_table tbl = { + .maxlen = sizeof(val), + .data = &val, + }; + int ret; + + if (val > mptcp_pm_type_max) + return -ERANGE; + + ret = proc_douintvec(&tbl, write, buffer, lenp, ppos); + if (write && ret == 0) { + char *path_manager = "kernel"; + + if (val == MPTCP_PM_TYPE_USERSPACE) + path_manager = "userspace"; + mptcp_set_path_manager(pernet->path_manager, path_manager); + WRITE_ONCE(*(u8 *)ctl->data, val); + } + + return ret; +} + static struct ctl_table mptcp_sysctl_table[] = { { .procname = "enabled", @@ -261,9 +290,7 @@ static struct ctl_table mptcp_sysctl_table[] = { .procname = "pm_type", .maxlen = sizeof(u8), .mode = 0644, - .proc_handler = proc_dou8vec_minmax, - .extra1 = SYSCTL_ZERO, - .extra2 = &mptcp_pm_type_max + .proc_handler = proc_pm_type, }, { .procname = "scheduler", From patchwork Mon Mar 3 04:22:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998171 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 C89E213C9D4 for ; Mon, 3 Mar 2025 04:25:26 +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=1740975926; cv=none; b=mfVDe9gXv0zFRokZGI9xeWutshoqqUgGSeTWlv8BUPjdtFH26/MHPN3MdsrC5RBNqvqsYPxSa19ryiwL03pBh0sbnPy7v/KNn87KOyZmyFW/8PnTGeaEZ81Nm8N9vF8CjbYRyhj9haUPeZ9Eox5jdw8j1XlUhFKted3VrQDvBws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975926; c=relaxed/simple; bh=j9cYNszI/mOSmcX1hpmr9uTGjdq4QkHSLGaE8XUcbas=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IGZEHpC/zM62ej0e/DvJ3clxL6XQcWmSxtAZJ9EuaQMFc84lZwthprjTWF7+u6BXnEtQWlenzXvSG96amnaVgFWBtUsMiA+5NmVgU91gOYwTdHV2h9ziEIfbcjekbwEJR3oJRJ899NFLBstZ+OYgpA++1RXVOhapNBmfEPagiuU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cmW+mAK+; 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="cmW+mAK+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08424C4CED6; Mon, 3 Mar 2025 04:25:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975926; bh=j9cYNszI/mOSmcX1hpmr9uTGjdq4QkHSLGaE8XUcbas=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cmW+mAK+XO/EcTFKCTNy/gBWnRwG+lGYQGapxVOTuhfpUWfT55JZD0Bd3hgb5qGjL y0OabNzgUq3NHD7eJRsomPX8SZtK9IaIl2B74COJDlFr22rl7nb6p3G/B8RxdkT1R6 QHo5iYyLIij+cKIOmhSIeYElc/M2d9/3nDdbfQoUlYt+i3akxE/MawJfTUTkk9YcxE cce6G757FSabkVzO0kjZEkJkGBN4ucSsIlmNDrlukToITlj6Ga2625o9aEOdTvsMaA SiiOYgjJzkITa03MWi+jnYj21wm9eur15i71Ew4Trg6yShIuAeeLB4eceeHfnbfAXe oeWzHy2o7bPfA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 04/11] mptcp: sysctl: add available_path_managers Date: Mon, 3 Mar 2025 12:22:52 +0800 Message-ID: <4af75cf9a0ebfef70ca6151d05624b8d5abc723b.1740975633.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 mangers. 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 5f6c02c12f5b..1f2397c11f65 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 53e67b90c37a..83977fe3dd30 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -123,6 +123,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 32f13ab7db0a..643472eb11b2 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -246,6 +246,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", @@ -329,6 +347,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) @@ -355,6 +379,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 53a29adf7cae..88ff136b3786 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -1079,3 +1079,22 @@ void mptcp_pm_unregister(struct mptcp_pm_ops *pm) list_del_rcu(&pm->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; + size_t offs = 0; + + rcu_read_lock(); + list_for_each_entry_rcu(pm, &mptcp_pm_list, list) { + offs += snprintf(buf + offs, maxlen - offs, "%s%s", + offs == 0 ? "" : " ", pm->name); + + if (WARN_ON_ONCE(offs >= maxlen)) + break; + } + rcu_read_unlock(); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 737f148770e3..9dbfde4027b3 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1055,6 +1055,7 @@ struct mptcp_pm_ops *mptcp_pm_find(const char *name); int mptcp_pm_validate(struct mptcp_pm_ops *pm); int mptcp_pm_register(struct mptcp_pm_ops *pm); void mptcp_pm_unregister(struct mptcp_pm_ops *pm); +void mptcp_pm_get_available(char *buf, size_t maxlen); void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk); From patchwork Mon Mar 3 04:22:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998172 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 33C5613C9D4 for ; Mon, 3 Mar 2025 04:25:28 +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=1740975929; cv=none; b=rTNSwplk2vN6HbHfDus3sUNtCymzf16DSwdfpatHTfDYDTmW+hBM+yY549a+OkpJ7XmPWGTw2gyutGfmTtjwqcPAZtD7Fd9z9tT2CLSNZ0CH9cEbaAcaSSDo/W2Hkq8ExIfJatUvrd9c52S1D5SuYia9vYjoKD7ES1YcDkdBP5o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975929; c=relaxed/simple; bh=/obAZ/p8txEGMS8nVk5B6uUtHuCtnvFQtryRPmNDRbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tVSJez2fT4IF2XkhHqyv4Hbpbk8kyj6UQhMct7nl95pyk+AHhmdxN8iKzx2fvyZUryjMhhvgMHtFejSDSDa1bp6qFORmtsb7BiCzjAT7hQaA1wQr33VfPKgd0ojt5lT5JZXKCemkI9XeKMoNh5vkyMgFP1z3ZG+7rGPIK3noFZU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sL5bvBeM; 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="sL5bvBeM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F1028C4CED6; Mon, 3 Mar 2025 04:25:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975928; bh=/obAZ/p8txEGMS8nVk5B6uUtHuCtnvFQtryRPmNDRbY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sL5bvBeMA0gmECKtRJJYp/G+su4OkkhcttcpcT71nc/cdbapGkHC//WzBT6Ur+xYt RH/svLOoywUZsU4wtJ9O6ljMd9SkRcYBIFGGKgRbhS91ynHzwv2y6Nk19wcHD5zzTO jqXv8aqgbzxhSwRmyZA1+6hNs/YUxApeu6PaknQ8EWwokMDHHxv7edt6WcnwoufXqg n8+/71cHo1V0CoTXWLRCgHppAx4xqmLHmzkRYkGXFI3Dc25DK7u3iAECl7rrXwjMdu v8ZcGTSsSviE3nQpVROeOQO0YFRyZ1KnE5ZDncPDSx3zxDzGrvUyM30p1X6sZ8bkpm 4NtCe7z0II7KQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 05/11] mptcp: pm: in-kernel: register mptcp_kernel_pm Date: Mon, 3 Mar 2025 12:22:53 +0800 Message-ID: <3296a3aee3aa62e1645ab55f6ffce891cdbcc00d.1740975633.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 defines the original in-kernel netlink path manager as a new struct mptcp_pm_ops named "mptcp_kernel_pm", and register it in mptcp_pm_nl_init(). This mptcp_pm_ops will be skipped in mptcp_pm_unregister(). Only get_local_id() and get_priority() interfaces are implemented here. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 3 +++ net/mptcp/pm_kernel.c | 9 +++++++++ net/mptcp/protocol.h | 2 ++ 3 files changed, 14 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 88ff136b3786..e648cb522320 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -1075,6 +1075,9 @@ int mptcp_pm_register(struct mptcp_pm_ops *pm) void mptcp_pm_unregister(struct mptcp_pm_ops *pm) { + if (pm == &mptcp_kernel_pm) + return; + spin_lock(&mptcp_pm_list_lock); list_del_rcu(&pm->list); spin_unlock(&mptcp_pm_list_lock); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index daf8f98a3164..8a5966e6e3e3 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -1400,6 +1400,13 @@ static struct pernet_operations mptcp_pm_pernet_ops = { .size = sizeof(struct pm_nl_pernet), }; +struct mptcp_pm_ops mptcp_kernel_pm = { + .get_local_id = mptcp_pm_nl_get_local_id, + .get_priority = mptcp_pm_nl_is_backup, + .name = "kernel", + .owner = THIS_MODULE, +}; + void __init mptcp_pm_nl_init(void) { if (register_pernet_subsys(&mptcp_pm_pernet_ops) < 0) @@ -1407,4 +1414,6 @@ void __init mptcp_pm_nl_init(void) if (genl_register_family(&mptcp_genl_family)) panic("Failed to register MPTCP PM netlink family\n"); + + mptcp_pm_register(&mptcp_kernel_pm); } diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 9dbfde4027b3..56d3a7457f80 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1051,6 +1051,8 @@ 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); +extern struct mptcp_pm_ops mptcp_kernel_pm; + struct mptcp_pm_ops *mptcp_pm_find(const char *name); int mptcp_pm_validate(struct mptcp_pm_ops *pm); int mptcp_pm_register(struct mptcp_pm_ops *pm); From patchwork Mon Mar 3 04:22:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998173 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 8422613C9D4 for ; Mon, 3 Mar 2025 04:25:30 +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=1740975930; cv=none; b=lc/JKAjZqRi0vF38KZQOb2E2rrjWspBO/8pmdAInJwwQQjf9o8dztr4g9usM2VoDNZxi8rFYMRTzsgwXimkhkGxdIJciPACRiKHtDIdsmPSnXlt8npcCIXIEffH88dhzwtK3dOT1Cq2cpfth8uXUhwWqi61l3hmuBgcAfL/alAg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975930; c=relaxed/simple; bh=oREgXKSaBOtVXsjI6mBw5QYR1vD/O+hZ8GpelkZnlLA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WnCbiVlP8y+YtjZtzIE7/KNGu841e9fUVAOXshyxx6orYuyzKymzUhiN0BINoq1AP3exnutHUu2p/yxx7gKxxawAWyG59YFBD7c4/R2SDaxKSL6cDAOclroDsI3jyZfb34BGe/ZCesEHGc5khBOBnM2DhdkV8kugGvkgcOTPAUU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Cie5zU9G; 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="Cie5zU9G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 39071C4CEE4; Mon, 3 Mar 2025 04:25:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975930; bh=oREgXKSaBOtVXsjI6mBw5QYR1vD/O+hZ8GpelkZnlLA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Cie5zU9Gq/3fyKI3YcQIMHW9ywr92yJwjblzJoaiqsPk8p31eFt+e2MQ5PN1kaUpz 3Z0Q7xGmDPTaO5tvor1mBg28XPKvgQ3qSvtniCr4pMUSneNtEYR1F3dZzVe2vlSo+j LV/+XVwptaXlJ1PrMIH+B+d65mjkMwOqbXDc3qexbBk7Xyy9JQ7m81XO5R2oQtMEre k/P30xCp32xbHsxjq+i60i5ArT97lQWUsYI2ugva3NtIfB2IELP3eW7oDnGmqsmFCY vZMrX1xjREOhKD4m/SfDkiyB/ky71elG+ohQpYMP0J9FytvXxwqkgr8GXUB5IDX9IB axWHJOzm7BMTw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 06/11] mptcp: pm: userspace: register mptcp_userspace_pm Date: Mon, 3 Mar 2025 12:22:54 +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 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 --- 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); From patchwork Mon Mar 3 04:22:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998174 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 7A5C513C9D4 for ; Mon, 3 Mar 2025 04:25:32 +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=1740975932; cv=none; b=EdKyf8/hwFA91ttiUpvx3OkIE6f8vS1StwjO55rkb/Zczw+vnqC0TNzBgRVoMKMaprx4J+0zAsJwJpLhm7ehlkzXJ2dqMkOOLQ+Ba6PFmPChOABcE1iYhvfUmrLBv5Szx9UQGDmECFktVSfrmahExbuoucOAH8BCPP1tyfAyetw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975932; c=relaxed/simple; bh=4Dejvqx1PnTP7sVztx1CiJVjWHqY2s9EfjnZw/El2ks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OOfsVMkoBAmP7wqoBARHyr1m96gCczeEb0BzVkSBy+yl3NiJrJyq8Ku/eMJTqUyjeZO/tZ0ZQYiBhkqCC600aZIjOO9Tz4JAdBwrv/ViBZ3w4ENOJqhDeVL4nVuWPjWSqQslidV0TjsVWsbA2mtN73HFSRobikySKWXuvkbEm5A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=HOQmcFpB; 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="HOQmcFpB" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 12F8DC4CEE4; Mon, 3 Mar 2025 04:25:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975932; bh=4Dejvqx1PnTP7sVztx1CiJVjWHqY2s9EfjnZw/El2ks=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HOQmcFpBYoGjJgTHSKDsPCsC0C87tqolnszMxzCbCfQa9m8Dd1x30FyZwRXdOSQFH 0up5N7GqDzGZJ1xMIiWPnKpTncmZ4cHV6UVhasDZUigtPSBPYeiSSQdYipqkcduan6 yq5jBfoc52QnPIclm4/fc7d//hknstd9VaSZBxI8brF1aIjD1y/FpzvtTAVS2XZp76 nTfGvhU3PTAECJnCF1xuP48hEFK1eC8GGJNMU6gK5TApgoNbTCI5TNzzlY2uUG09KN sYsfryRqRN757YYttMtdEZthdRorsAwDeOrxjiumXY4rcijF4P8gWi71Q7hKKm0FQu mS8pYmL/TuJnw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 07/11] mptcp: pm: initialize and release mptcp_pm_ops Date: Mon, 3 Mar 2025 12:22:55 +0800 Message-ID: <7c65de17fee4c36d003684e730c1459542eedca8.1740975633.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 Add a struct mptcp_pm_ops pointer "ops" in struct mptcp_pm_data, and two functions mptcp_pm_initialize() and mptcp_pm_release(), to set and release this pointer. mptcp_pm_initialize() is invoked in mptcp_pm_data_reset(), while mptcp_pm_release() is invoked in mptcp_pm_destroy(). Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 42 +++++++++++++++++++++++++++++++++++++++--- net/mptcp/protocol.h | 3 +++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 98f81221786f..e8b34f2ecb35 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -973,15 +973,15 @@ void mptcp_pm_worker(struct mptcp_sock *msk) 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_release(msk); } void mptcp_pm_data_reset(struct mptcp_sock *msk) { + const char *path_manager = mptcp_get_path_manager(sock_net((struct sock *)msk)); u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk)); struct mptcp_pm_data *pm = &msk->pm; + int ret; pm->add_addr_signaled = 0; pm->add_addr_accepted = 0; @@ -991,6 +991,12 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) pm->rm_list_rx.nr = 0; WRITE_ONCE(pm->pm_type, pm_type); + rcu_read_lock(); + ret = mptcp_pm_initialize(msk, mptcp_pm_find(path_manager)); + rcu_read_unlock(); + if (ret) + return; + if (pm_type == MPTCP_PM_TYPE_KERNEL) { bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk); @@ -1102,3 +1108,33 @@ void mptcp_pm_get_available(char *buf, size_t maxlen) } rcu_read_unlock(); } + +int mptcp_pm_initialize(struct mptcp_sock *msk, struct mptcp_pm_ops *pm) +{ + if (!pm) + pm = &mptcp_kernel_pm; + + if (!bpf_try_module_get(pm, pm->owner)) + return -EBUSY; + + msk->pm.ops = pm; + if (msk->pm.ops->init) + msk->pm.ops->init(msk); + + pr_debug("pm %s initialized\n", pm->name); + return 0; +} + +void mptcp_pm_release(struct mptcp_sock *msk) +{ + struct mptcp_pm_ops *pm = msk->pm.ops; + + if (!pm) + return; + + msk->pm.ops = NULL; + if (pm->release) + pm->release(msk); + + bpf_module_put(pm, pm->owner); +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 979ee8762fd4..172450455c2a 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 */ @@ -1058,6 +1059,8 @@ int mptcp_pm_validate(struct mptcp_pm_ops *pm); int mptcp_pm_register(struct mptcp_pm_ops *pm); void mptcp_pm_unregister(struct mptcp_pm_ops *pm); void mptcp_pm_get_available(char *buf, size_t maxlen); +int mptcp_pm_initialize(struct mptcp_sock *msk, struct mptcp_pm_ops *pm); +void mptcp_pm_release(struct mptcp_sock *msk); void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk); From patchwork Mon Mar 3 04:22:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998175 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 481E013C9D4 for ; Mon, 3 Mar 2025 04:25:34 +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=1740975934; cv=none; b=kM0rWst/8/XunPW+8Yr33cpYcTMzcM6d8VTY3wShqGES2m4aE/4PusKXXYDwRMzDXDUTOuVX39kiEnM1O5LMH36wdrLFDgtFDfjg3LLGt7nzCsahyyfNgpu7k++KnBxCn8r05+HnwFsiz2Wt3e8dI7nDFvMU9I26Q1UDNrlB5Fo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975934; c=relaxed/simple; bh=ad+WiPmb19YEiCLPz8bVQzer6IKn62XuM6seOWgZep4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ah281z8oSW/4CXP/Xe8z1v0Yi0i+ajUdvvc5sApHcmFMmi17EkTbkhy5DIDvYznkJV6Nt+C9/ONLFeq7P8L16GdF7TncQoOMuVAqq5jp8YXOS3BDm5SOtf9WMqDrC/4Kqdei6+YnKXpdZYZ85RI2gYJEEdgC6jaUJvtICBw2oRM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Qjp6OVgr; 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="Qjp6OVgr" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 067E8C4CEE4; Mon, 3 Mar 2025 04:25:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975934; bh=ad+WiPmb19YEiCLPz8bVQzer6IKn62XuM6seOWgZep4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qjp6OVgrfQVyZbUVl0nP8zNknyy1NVdU+SUOBxVMrrJcTjcemDb4zF9gjEn2gz/2U yTsuuagyeHfrAtDnL885jZzKepZ3THUYDVIMhEYN1N9cRwpwV7RMyynpgyGI8UQpFi C+U0khbjbVxevT0zqOg96qwtx8thewkwX0YZaBR56Bn/Yxqw8wa9ASzyxmBlWquP4X scOv8Kpl1Sat3/jIxE6tRM5W9sHMWQCjalp8stQ0qKaOvwji0NCEPO6UBzJEWFLSSv qXsdyFPByJ+nsuEbbm01m3wzFHcLT5FlTo0vnMc1vT5WVnNr+rJhzA7O3wVeRfx3wj 6cKkZL4tcOLEw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 08/11] mptcp: pm: drop pm_type in mptcp_pm_data Date: Mon, 3 Mar 2025 12:22:56 +0800 Message-ID: <599fa718f11e3311f95deaaeac0534889698c66d.1740975633.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 Now pm->pm_type can be replaced by pm->ops->name, then "pm_type" filed of struct mptcp_pm_data can be dropped. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 4 +--- net/mptcp/protocol.h | 5 ++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index e8b34f2ecb35..1ce58d16370a 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -979,7 +979,6 @@ void mptcp_pm_destroy(struct mptcp_sock *msk) void mptcp_pm_data_reset(struct mptcp_sock *msk) { const char *path_manager = mptcp_get_path_manager(sock_net((struct sock *)msk)); - u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk)); struct mptcp_pm_data *pm = &msk->pm; int ret; @@ -989,7 +988,6 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) pm->subflows = 0; pm->rm_list_tx.nr = 0; pm->rm_list_rx.nr = 0; - WRITE_ONCE(pm->pm_type, pm_type); rcu_read_lock(); ret = mptcp_pm_initialize(msk, mptcp_pm_find(path_manager)); @@ -997,7 +995,7 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) if (ret) return; - if (pm_type == MPTCP_PM_TYPE_KERNEL) { + if (mptcp_pm_is_kernel(msk)) { bool subflows_allowed = !!mptcp_pm_get_subflows_max(msk); /* pm->work_pending must be only be set to 'true' when diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 172450455c2a..56eeee1cbccc 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -233,7 +233,6 @@ struct mptcp_pm_data { u8 add_addr_signaled; u8 add_addr_accepted; u8 local_addr_used; - u8 pm_type; u8 subflows; u8 status; DECLARE_BITMAP(id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); @@ -1101,12 +1100,12 @@ static inline bool mptcp_pm_should_rm_signal(struct mptcp_sock *msk) static inline bool mptcp_pm_is_userspace(const struct mptcp_sock *msk) { - return READ_ONCE(msk->pm.pm_type) == MPTCP_PM_TYPE_USERSPACE; + return !strncmp(msk->pm.ops->name, "userspace", MPTCP_PM_NAME_MAX); } static inline bool mptcp_pm_is_kernel(const struct mptcp_sock *msk) { - return READ_ONCE(msk->pm.pm_type) == MPTCP_PM_TYPE_KERNEL; + return !strncmp(msk->pm.ops->name, "kernel", MPTCP_PM_NAME_MAX); } static inline unsigned int mptcp_add_addr_len(int family, bool echo, bool port) From patchwork Mon Mar 3 04:22:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998176 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 1F21A13C9D4 for ; Mon, 3 Mar 2025 04:25:36 +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=1740975937; cv=none; b=ndL3fDywehVixbQiRWeMqWUiHaSsqgAAQmHLlUAoCbHVi1+wS4aKOOkSChNJCM4IAcZBA622FDD0l5eY5gUw3EbJe5jfHXjCsiGzsukv5HZWdNTh8dcS8GA4T9J2NyV6+S/4CeBv2PiYf38xTvxYZD/u8laWifTNVVZU/inHpH8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975937; c=relaxed/simple; bh=Fpy6DZ2IIMNqs5cfmZUBl4kKmiCfyONoQFns2U58FG0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lITwWuLx9q8CUUhs+YVfhSh047DMr0MwmHWWWWZtiqh9FMkOyfW25Fce0rf2F8OysmPOZEO7dwITMbUrlGxINUA0nhaObdZGluF5/D7lnyAExmDynYWnTw3Ruv9SLaxH22omV5hqDytjL/PUBueWVMp23NqIy3Wcod1owKfUJR4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k3Wa2xfJ; 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="k3Wa2xfJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D2B3BC4CEE4; Mon, 3 Mar 2025 04:25:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975936; bh=Fpy6DZ2IIMNqs5cfmZUBl4kKmiCfyONoQFns2U58FG0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k3Wa2xfJ1PuRX37vz8Bip+3mOWfZNNj75m/g8Qp52iRJxpnoIfamov1qVFOQjZwpy 7E0o4DNtSQbzjow5ZymMmbLr6V2zWvN5E9OX5tYrHIkTyI1FAIDyKd9E+moEJTn7bN nqYXYkR2Dc02hlYe6znbIQFXkxWSse7A3s/xRDdKPilRaf9WF449iTZrMcEg2Mm/7e J2KHjAs/wrFJU4glS5gvvO6mmOwCh9b9K8lgNcx78zJISkfoBryuVAhv9iXlXKf63R 76BkCChhlkm+wQMsOcRkSMNxcLpXGraGf1WpbZoau7nNEKOzm4MUk6fBR6A9e4ZN0J NPZ+Dn1s9iTWg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 09/11] mptcp: sysctl: drop get_pm_type helper Date: Mon, 3 Mar 2025 12:22:57 +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 The helper mptcp_get_pm_type() is unused now, it's replaced by the new one mptcp_get_path_manager(). So drop it. Signed-off-by: Geliang Tang --- net/mptcp/ctrl.c | 5 ----- net/mptcp/protocol.h | 1 - 2 files changed, 6 deletions(-) diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c index 643472eb11b2..fd797f071886 100644 --- a/net/mptcp/ctrl.c +++ b/net/mptcp/ctrl.c @@ -79,11 +79,6 @@ unsigned int mptcp_close_timeout(const struct sock *sk) return mptcp_get_pernet(sock_net(sk))->close_timeout; } -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; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 56eeee1cbccc..3579c31650fa 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -693,7 +693,6 @@ int mptcp_is_checksum_enabled(const struct net *net); 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); From patchwork Mon Mar 3 04:22:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998177 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 0661F13C9D4 for ; Mon, 3 Mar 2025 04:25:38 +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=1740975939; cv=none; b=MjYZCK7kS3NuaK+/d6RtUdlHWy6eXXD5pF78uK8GLYdY2NAjFrtkCMxQaKqTnC8BRLrWVGEOYNUGMP65PEDpNwAhsFAHOxL5bdZa2ZkQiZ0iUMbBMtVE35/1v4Ra1NXiyPMerKxlSQtXnQZV5yd3HgOSb0Ag7q2L1itBXv6oKbo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975939; c=relaxed/simple; bh=94Gp+qjQvPTcQkzM8f6qrecPX8qRpFXvlqRUbwsy3r0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VyjszMl+TzyNHc3O6Z7BTrlSHXvKWsdnYWkmLgyypHgSZe9nqkJTlGoH2bmOROIkat+nfYjTkZVqG1PiakLD9SMW34nSvXa4Jq+96raXGNzoaPZlKXQ6eH+sFnjitQ56lDXZE8ncaOTTKqB54+3gCQVSfX3FUCB5CYikEnRMllc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uxWJeCsN; 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="uxWJeCsN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4FE3EC4CED6; Mon, 3 Mar 2025 04:25:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975938; bh=94Gp+qjQvPTcQkzM8f6qrecPX8qRpFXvlqRUbwsy3r0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uxWJeCsNVNJ4XxQzNtN5EW9SKcppYGIpm47lIvpNvL1UcEQ16o/aoguneMOc3QdrP JE8HSQStVA1Y+Z+pj3XVRcwcODa3LxuoZdj6KS95OSlGyz1bjm8mwYD1R0emD596/I AxnvCPiFyPcuwaof33U2oq0dG/tl0I9uCul7t5n5uB3uatWnKX/W/eeFv6DOm9go4m vbLjXGy7rxamgoDqDxnpyE2paXhvMTr9DTVkoMqm6uYK6U3DbQfkqDmulT3aUS6EYx ZpbDzgrgGwUjJt493iefF6o35PgK11RPA1f1Ey0i7XJsiGDySwx3lEag2Vb28AjnMP 3MqxBOqyycyaA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 10/11] mptcp: pm: make get_local_id helpers static Date: Mon, 3 Mar 2025 12:22:58 +0800 Message-ID: <0bdf5e5472e44780ce51d9241e33e2e010ecd23a.1740975633.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 Now 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. Then mptcp_pm_nl_get_local_id() and mptcp_userspace_pm_get_local_id() helpers can be static. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 4 +--- net/mptcp/pm_kernel.c | 4 ++-- net/mptcp/pm_userspace.c | 4 ++-- net/mptcp/protocol.h | 4 ---- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 1ce58d16370a..848393511997 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 8a5966e6e3e3..3d5beaafc3ec 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_nl_get_local_id(struct mptcp_sock *msk, + struct mptcp_pm_addr_entry *skc) { struct mptcp_pm_addr_entry *entry; struct pm_nl_pernet *pernet; diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d53f44df9641..05495f6e771a 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -127,8 +127,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_userspace_pm_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; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 3579c31650fa..776f164a21eb 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 Mon Mar 3 04:22:59 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13998178 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 BD9CB13C9D4 for ; Mon, 3 Mar 2025 04:25:40 +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=1740975940; cv=none; b=AW6ZkZ7S0LQf12f3oKnF3h2OlLR7l6q93rF7B6KXQigBFlhnOjDE1klGzRJGhvHes5CNV3mE1++Wnm9ObUb6cXpC8TUu3NOuY1kxf7kYjUkqPkH3lFOpONEksdl46UbhAhnL2APudPceFsHHRaG/QYnYnKQRiFIAKCkWo+hTd3E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740975940; c=relaxed/simple; bh=ch5qu7ELLT8n30XRNlQpXpnV0iyqIrXd5MgS7a63sLw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qcxe7QEi2hsd7MeSVsusiw0t9re+QPDD+hI+k1O6XmSyhJPlBODNFtU21nh+gfkaEnyMXXBTz7CBMf8SjmG2fkv/goLRbCoq+mVioaL5imqVTgbJrrU6a2+JTVqPXZBwfpiI+Ww7kFrP0XlfjD0QuT4mGuy9shNGfRMlOjREjdE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=l6Ty7pv/; 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="l6Ty7pv/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 27B66C4CEE4; Mon, 3 Mar 2025 04:25:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1740975940; bh=ch5qu7ELLT8n30XRNlQpXpnV0iyqIrXd5MgS7a63sLw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=l6Ty7pv/gpiBsUPvmzP2xvUYc7DPGkCeGxHEeH8MSJJRVmRzTuwrgCEu5paKvRbw/ xLb/W9497NB24xWhBuqc4kMRjPziZdBlw//AD2bhGUgdiv/iW9/MSKLpqXNKQ3ZobM 5oHThQPSlzvsfv95TobjC7kEvi3fFAc5a6+kEfK/3VTeEJmr+Bsm6fGN8PZaIfF3x9 ewmA1bqab2LFWEer/kJYf+0J/yP1/T98UaTWLKInmo9V7pukdAR+Or1zqm8Jk0/2+7 DMMAF29wVKA17PABE8HyuKMfftC+t7bnMl5KbFidWL8iDgMHtNwOKRcp6Q/26QDDh9 Bwl62hlrQYY1Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 11/11] mptcp: pm: make is_backup helpers static Date: Mon, 3 Mar 2025 12:22:59 +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 Now 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. Then mptcp_pm_nl_is_backup() and mptcp_userspace_pm_is_backup() helpers can be static. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 5 +---- net/mptcp/pm_kernel.c | 3 ++- net/mptcp/pm_userspace.c | 4 ++-- net/mptcp/protocol.h | 2 -- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 848393511997..89a1a0ba9f79 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 3d5beaafc3ec..5cc6cda01ba2 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -723,7 +723,8 @@ static int mptcp_pm_nl_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_nl_is_backup(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; diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 05495f6e771a..b30c8aa45610 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -146,8 +146,8 @@ static int mptcp_userspace_pm_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_userspace_pm_is_backup(struct mptcp_sock *msk, + struct mptcp_addr_info *skc) { struct mptcp_pm_addr_entry *entry; bool backup; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 776f164a21eb..b5f50feb52fa 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,