mptcp: unify pm get_flags_and_ifindex_by_id
authorGeliang Tang <geliang.tang@suse.com>
Thu, 8 Jun 2023 13:20:51 +0000 (15:20 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 10 Jun 2023 07:05:59 +0000 (00:05 -0700)
This patch unifies the three PM get_flags_and_ifindex_by_id() interfaces:

mptcp_pm_nl_get_flags_and_ifindex_by_id() in mptcp/pm_netlink.c for the
in-kernel PM and mptcp_userspace_pm_get_flags_and_ifindex_by_id() in
mptcp/pm_userspace.c for the userspace PM.

They'll be switched in the common PM infterface
mptcp_pm_get_flags_and_ifindex_by_id() in mptcp/pm.c based on whether
mptcp_pm_is_userspace() or not.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/pm.c
net/mptcp/pm_netlink.c
net/mptcp/pm_userspace.c
net/mptcp/protocol.h

index 300fa9b..b4a1277 100644 (file)
@@ -434,6 +434,20 @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc)
        return mptcp_pm_nl_get_local_id(msk, &skc_local);
 }
 
+int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id,
+                                        u8 *flags, int *ifindex)
+{
+       *flags = 0;
+       *ifindex = 0;
+
+       if (!id)
+               return 0;
+
+       if (mptcp_pm_is_userspace(msk))
+               return mptcp_userspace_pm_get_flags_and_ifindex_by_id(msk, id, flags, ifindex);
+       return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex);
+}
+
 void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock *ssk)
 {
        struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk);
index e51d988..0fd9389 100644 (file)
@@ -1356,31 +1356,20 @@ out_free:
        return ret;
 }
 
-int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id,
-                                        u8 *flags, int *ifindex)
+int mptcp_pm_nl_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id,
+                                           u8 *flags, int *ifindex)
 {
        struct mptcp_pm_addr_entry *entry;
        struct sock *sk = (struct sock *)msk;
        struct net *net = sock_net(sk);
 
-       *flags = 0;
-       *ifindex = 0;
-
-       if (id) {
-               if (mptcp_pm_is_userspace(msk))
-                       return mptcp_userspace_pm_get_flags_and_ifindex_by_id(msk,
-                                                                             id,
-                                                                             flags,
-                                                                             ifindex);
-
-               rcu_read_lock();
-               entry = __lookup_addr_by_id(pm_nl_get_pernet(net), id);
-               if (entry) {
-                       *flags = entry->flags;
-                       *ifindex = entry->ifindex;
-               }
-               rcu_read_unlock();
+       rcu_read_lock();
+       entry = __lookup_addr_by_id(pm_nl_get_pernet(net), id);
+       if (entry) {
+               *flags = entry->flags;
+               *ifindex = entry->ifindex;
        }
+       rcu_read_unlock();
 
        return 0;
 }
index b06aa58..47a883a 100644 (file)
@@ -111,9 +111,6 @@ int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
 {
        struct mptcp_pm_addr_entry *entry, *match = NULL;
 
-       *flags = 0;
-       *ifindex = 0;
-
        spin_lock_bh(&msk->pm.lock);
        list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) {
                if (id == entry->addr.id) {
index 1ac799a..0a0a36f 100644 (file)
@@ -822,6 +822,8 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
 int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
                                         unsigned int id,
                                         u8 *flags, int *ifindex);
+int mptcp_pm_nl_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id,
+                                           u8 *flags, int *ifindex);
 int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk,
                                                   unsigned int id,
                                                   u8 *flags, int *ifindex);