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
>
>
>