[PATCH mptcp-next 10/12] mptcp: get addr in userspace pm list

Geliang Tang posted 12 patches 2 years, 1 month ago
Maintainers: Matthieu Baerts <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, "David S. Miller" <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, Shuah Khan <shuah@kernel.org>
There is a newer version of this series
[PATCH mptcp-next 10/12] mptcp: get addr in userspace pm list
Posted by Geliang Tang 2 years, 1 month ago
This patch adds 'MPTCP_PM_ATTR_TOKEN' in mptcp_pm_get_addr_nl_policy,
then token can be gotten in mptcp_pm_nl_get_addr_doit(). If token isn't
null, invoke mptcp_userspace_pm_get_addr() to get addr in userspace pm
list.

Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
---
 net/mptcp/mptcp_pm_gen.c | 5 +++--
 net/mptcp/mptcp_pm_gen.h | 2 +-
 net/mptcp/pm_netlink.c   | 5 +++++
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/net/mptcp/mptcp_pm_gen.c b/net/mptcp/mptcp_pm_gen.c
index a2325e70ddab..f1b470178d66 100644
--- a/net/mptcp/mptcp_pm_gen.c
+++ b/net/mptcp/mptcp_pm_gen.c
@@ -32,8 +32,9 @@ const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1]
 };
 
 /* MPTCP_PM_CMD_GET_ADDR - do */
-const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1] = {
+const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + 1] = {
 	[MPTCP_PM_ENDPOINT_ADDR] = NLA_POLICY_NESTED(mptcp_pm_address_nl_policy),
+	[MPTCP_PM_ATTR_TOKEN] = { .type = NLA_U32, },
 };
 
 /* MPTCP_PM_CMD_FLUSH_ADDRS - do */
@@ -110,7 +111,7 @@ const struct genl_ops mptcp_pm_nl_ops[11] = {
 		.doit		= mptcp_pm_nl_get_addr_doit,
 		.dumpit		= mptcp_pm_nl_get_addr_dumpit,
 		.policy		= mptcp_pm_get_addr_nl_policy,
-		.maxattr	= MPTCP_PM_ENDPOINT_ADDR,
+		.maxattr	= MPTCP_PM_ATTR_TOKEN,
 		.flags		= GENL_UNS_ADMIN_PERM,
 	},
 	{
diff --git a/net/mptcp/mptcp_pm_gen.h b/net/mptcp/mptcp_pm_gen.h
index 10579d184587..3963c55950b7 100644
--- a/net/mptcp/mptcp_pm_gen.h
+++ b/net/mptcp/mptcp_pm_gen.h
@@ -18,7 +18,7 @@ extern const struct nla_policy mptcp_pm_add_addr_nl_policy[MPTCP_PM_ENDPOINT_ADD
 
 extern const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
 
-extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
+extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + 1];
 
 extern const struct nla_policy mptcp_pm_flush_addrs_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
 
diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 0c1ea3c42584..dace3a65c680 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1713,14 +1713,19 @@ int mptcp_pm_nl_put_entry_msg(struct sk_buff *msg,
 int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
 {
 	struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
+	struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
 	struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
 	struct mptcp_pm_addr_entry addr, *entry;
+	struct net *net = sock_net(skb->sk);
 	int ret;
 
 	ret = mptcp_pm_parse_entry(attr, info, false, &addr);
 	if (ret < 0)
 		return ret;
 
+	if (token)
+		return mptcp_userspace_pm_get_addr(net, info, token, addr.addr.id);
+
 	spin_lock_bh(&pernet->lock);
 	entry = __lookup_addr_by_id(pernet, addr.addr.id);
 	if (!entry) {
-- 
2.35.3
Re: [PATCH mptcp-next 10/12] mptcp: get addr in userspace pm list
Posted by Mat Martineau 2 years, 1 month ago
On Mon, 11 Dec 2023, Geliang Tang wrote:

> This patch adds 'MPTCP_PM_ATTR_TOKEN' in mptcp_pm_get_addr_nl_policy,
> then token can be gotten in mptcp_pm_nl_get_addr_doit(). If token isn't
> null, invoke mptcp_userspace_pm_get_addr() to get addr in userspace pm
> list.
>
> Signed-off-by: Geliang Tang <geliang.tang@linux.dev>
> ---
> net/mptcp/mptcp_pm_gen.c | 5 +++--
> net/mptcp/mptcp_pm_gen.h | 2 +-

Hi Geliang -

These two files should not be edited directly (check the comments at the 
top of the files).

Instead, modify the yaml that is used to generate them:

Documentation/netlink/specs/mptcp.yaml

(rename to mptcp_pm.yaml is happening now: 
https://patchwork.kernel.org/project/netdevbpf/patch/20231215015735.3419974-4-kuba@kernel.org/ 
)

See also the commit message for aab4d8564947f391674391e5c346d7f6f1c49f89


- Mat


> net/mptcp/pm_netlink.c   | 5 +++++
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/net/mptcp/mptcp_pm_gen.c b/net/mptcp/mptcp_pm_gen.c
> index a2325e70ddab..f1b470178d66 100644
> --- a/net/mptcp/mptcp_pm_gen.c
> +++ b/net/mptcp/mptcp_pm_gen.c
> @@ -32,8 +32,9 @@ const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1]
> };
>
> /* MPTCP_PM_CMD_GET_ADDR - do */
> -const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1] = {
> +const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + 1] = {
> 	[MPTCP_PM_ENDPOINT_ADDR] = NLA_POLICY_NESTED(mptcp_pm_address_nl_policy),
> +	[MPTCP_PM_ATTR_TOKEN] = { .type = NLA_U32, },
> };
>
> /* MPTCP_PM_CMD_FLUSH_ADDRS - do */
> @@ -110,7 +111,7 @@ const struct genl_ops mptcp_pm_nl_ops[11] = {
> 		.doit		= mptcp_pm_nl_get_addr_doit,
> 		.dumpit		= mptcp_pm_nl_get_addr_dumpit,
> 		.policy		= mptcp_pm_get_addr_nl_policy,
> -		.maxattr	= MPTCP_PM_ENDPOINT_ADDR,
> +		.maxattr	= MPTCP_PM_ATTR_TOKEN,
> 		.flags		= GENL_UNS_ADMIN_PERM,
> 	},
> 	{
> diff --git a/net/mptcp/mptcp_pm_gen.h b/net/mptcp/mptcp_pm_gen.h
> index 10579d184587..3963c55950b7 100644
> --- a/net/mptcp/mptcp_pm_gen.h
> +++ b/net/mptcp/mptcp_pm_gen.h
> @@ -18,7 +18,7 @@ extern const struct nla_policy mptcp_pm_add_addr_nl_policy[MPTCP_PM_ENDPOINT_ADD
>
> extern const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
>
> -extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
> +extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + 1];
>
> extern const struct nla_policy mptcp_pm_flush_addrs_nl_policy[MPTCP_PM_ENDPOINT_ADDR + 1];
>
> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> index 0c1ea3c42584..dace3a65c680 100644
> --- a/net/mptcp/pm_netlink.c
> +++ b/net/mptcp/pm_netlink.c
> @@ -1713,14 +1713,19 @@ int mptcp_pm_nl_put_entry_msg(struct sk_buff *msg,
> int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
> {
> 	struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
> +	struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN];
> 	struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
> 	struct mptcp_pm_addr_entry addr, *entry;
> +	struct net *net = sock_net(skb->sk);
> 	int ret;
>
> 	ret = mptcp_pm_parse_entry(attr, info, false, &addr);
> 	if (ret < 0)
> 		return ret;
>
> +	if (token)
> +		return mptcp_userspace_pm_get_addr(net, info, token, addr.addr.id);
> +
> 	spin_lock_bh(&pernet->lock);
> 	entry = __lookup_addr_by_id(pernet, addr.addr.id);
> 	if (!entry) {
> -- 
> 2.35.3
>
>
>