mptcp: get addr in userspace pm list
authorGeliang Tang <tanggeliang@kylinos.cn>
Fri, 1 Mar 2024 18:18:37 +0000 (19:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 4 Mar 2024 13:07:46 +0000 (13:07 +0000)
This patch renames mptcp_pm_nl_get_addr_doit() as a dedicated in-kernel
netlink PM get addr function mptcp_pm_nl_get_addr(). and invoke a new
wrapper mptcp_pm_get_addr() in mptcp_pm_nl_get_addr_doit.

If a token is gotten in the wrapper, that means a userspace PM is used.
So invoke mptcp_userspace_pm_get_addr() to get addr in userspace PM list.
Otherwise, invoke mptcp_pm_nl_get_addr().

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/mptcp/pm.c
net/mptcp/pm_netlink.c
net/mptcp/protocol.h

index 193198cec74a31a2fcdfa971f6a8bba54791b422..b4bdd92a564823f0f654d30a271a1404d8c86c87 100644 (file)
@@ -441,6 +441,13 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id
        return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex);
 }
 
+int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info)
+{
+       if (info->attrs[MPTCP_PM_ATTR_TOKEN])
+               return mptcp_userspace_pm_get_addr(skb, info);
+       return mptcp_pm_nl_get_addr(skb, info);
+}
+
 int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb)
 {
        const struct genl_info *info = genl_info_dump(cb);
index 5fae35b6b305c2d4e50f4b302a5854ffaa4e71b7..16f8bd47f4b8f4dbefaac9f5d3d77d88923e2ae0 100644 (file)
@@ -1672,7 +1672,7 @@ nla_put_failure:
        return -EMSGSIZE;
 }
 
-int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
+int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info)
 {
        struct nlattr *attr = info->attrs[MPTCP_PM_ENDPOINT_ADDR];
        struct pm_nl_pernet *pernet = genl_info_pm_nl(info);
@@ -1722,6 +1722,11 @@ fail:
        return ret;
 }
 
+int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info)
+{
+       return mptcp_pm_get_addr(skb, info);
+}
+
 int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
                          struct netlink_callback *cb)
 {
index f848e0203e8897aea87d8f972fdd54098a65d041..de9f0ff6dd309c13f0b27277c86b200f85fe6517 100644 (file)
@@ -1069,6 +1069,8 @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg,
                          struct netlink_callback *cb);
 int mptcp_userspace_pm_dump_addr(struct sk_buff *msg,
                                 struct netlink_callback *cb);
+int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info);
+int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info);
 int mptcp_userspace_pm_get_addr(struct sk_buff *skb,
                                struct genl_info *info);