]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mptcp: pm: uniform announced addresses helpers
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Fri, 5 Jun 2026 09:21:55 +0000 (19:21 +1000)
committerJakub Kicinski <kuba@kernel.org>
Thu, 11 Jun 2026 22:33:38 +0000 (15:33 -0700)
Similar to the previous commit, only using the 'add' or 'anno' prefixes
is confusing -- generally associated to the action of adding something,
or the Latin name for "year" -- and lack of uniformity.

This has been causing issues in the past, e.g. del_add_timer seemed to
suggest the goal is to delete a previously added timer.

Instead, use the mptcp_pm_announced_ prefix.

While at it, slightly improves some helpers:

- mptcp_lookup_anno_list_by_saddr: no need to specify what is used to do
  the lookup: mptcp_pm_announced_lookup.

- mptcp_pm_sport_in_anno_list: it doesn't just compare the port, but the
  whole address linked to the sublow: mptcp_pm_announced_has_ssk.

- mptcp_pm_alloc_anno_list: it allocates one item of the list, not a
  whole list: mptcp_pm_announced_alloc.

Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260605-net-next-mptcp-add-addr6-port-ts-v2-11-758e7ca73f4d@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/options.c
net/mptcp/pm.c
net/mptcp/pm_kernel.c
net/mptcp/pm_userspace.c
net/mptcp/protocol.h
net/mptcp/subflow.c

index 8d0680a588dd05ff679c915737dad64ed8b65746..4215270bfba7fa781006431e34f2ca9e56dbbc18 100644 (file)
@@ -1183,7 +1183,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
                                MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDR);
                        } else {
                                mptcp_pm_add_addr_echoed(msk, &mp_opt.addr);
-                               mptcp_pm_del_add_timer(msk, &mp_opt.addr, true);
+                               mptcp_pm_announced_del_timer(msk, &mp_opt.addr, true);
                                MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADD);
                        }
 
index cd26505cf41e13e8f147ad412dce6a6edde395bf..197eaef6201518bc1ade4ac9a07908ed951b7736 100644 (file)
@@ -134,8 +134,8 @@ bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk,
 }
 
 static struct mptcp_pm_add_addr *
-mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
-                               const struct mptcp_addr_info *addr)
+mptcp_pm_announced_lookup(const struct mptcp_sock *msk,
+                         const struct mptcp_addr_info *addr)
 {
        struct mptcp_pm_add_addr *entry;
 
@@ -149,26 +149,26 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk,
        return NULL;
 }
 
-bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
-                                    const struct mptcp_addr_info *addr)
+bool mptcp_pm_announced_remove(struct mptcp_sock *msk,
+                              const struct mptcp_addr_info *addr)
 {
        struct mptcp_pm_add_addr *entry;
        bool ret;
 
-       entry = mptcp_pm_del_add_timer(msk, addr, false);
+       entry = mptcp_pm_announced_del_timer(msk, addr, false);
        ret = entry;
        kfree_rcu(entry, rcu);
 
        return ret;
 }
 
-bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk)
+bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock *ssk)
 {
        struct mptcp_pm_add_addr *entry;
        struct mptcp_addr_info saddr;
        bool ret = false;
 
-       mptcp_local_address((struct sock_common *)sk, &saddr);
+       mptcp_local_address((struct sock_common *)ssk, &saddr);
 
        spin_lock_bh(&msk->pm.lock);
        list_for_each_entry(entry, &msk->pm.anno_list, list) {
@@ -364,7 +364,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
 
        spin_lock_bh(&msk->pm.lock);
 
-       /* The cancel path (mptcp_pm_del_add_timer()) can race with this
+       /* The cancel path (mptcp_pm_announced_del_timer()) can race with this
         * callback. Once cancel updates retrans_times to MAX, suppress further
         * retransmissions here. If this callback acquires pm.lock first, one
         * final transmit attempt is still possible.
@@ -398,8 +398,8 @@ out:
 }
 
 struct mptcp_pm_add_addr *
-mptcp_pm_del_add_timer(struct mptcp_sock *msk,
-                      const struct mptcp_addr_info *addr, bool check_id)
+mptcp_pm_announced_del_timer(struct mptcp_sock *msk,
+                            const struct mptcp_addr_info *addr, bool check_id)
 {
        struct sock *sk = (struct sock *)msk;
        struct mptcp_pm_add_addr *entry;
@@ -408,7 +408,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
        rcu_read_lock();
 
        spin_lock_bh(&msk->pm.lock);
-       entry = mptcp_lookup_anno_list_by_saddr(msk, addr);
+       entry = mptcp_pm_announced_lookup(msk, addr);
        if (entry && (!check_id || entry->addr.id == addr->id)) {
                entry->retrans_times = ADD_ADDR_RETRANS_MAX;
                stop_timer = true;
@@ -431,7 +431,7 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk,
        return entry;
 }
 
-bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
+bool mptcp_pm_announced_alloc(struct mptcp_sock *msk,
                              const struct mptcp_addr_info *addr)
 {
        struct mptcp_pm_add_addr *add_entry = NULL;
@@ -440,8 +440,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
 
        lockdep_assert_held(&msk->pm.lock);
 
-       add_entry = mptcp_lookup_anno_list_by_saddr(msk, addr);
-
+       add_entry = mptcp_pm_announced_lookup(msk, addr);
        if (add_entry) {
                if (WARN_ON_ONCE(mptcp_pm_is_kernel(msk)))
                        return false;
@@ -469,7 +468,7 @@ reset_timer:
        return true;
 }
 
-static void mptcp_pm_free_anno_list(struct mptcp_sock *msk)
+static void mptcp_pm_free_announced_list(struct mptcp_sock *msk)
 {
        struct mptcp_pm_add_addr *entry, *tmp;
        struct sock *sk = (struct sock *)msk;
@@ -738,7 +737,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
 
        spin_lock_bh(&pm->lock);
 
-       if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pending))
+       if (mptcp_pm_announced_lookup(msk, addr) && READ_ONCE(pm->work_pending))
                mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED);
 
        spin_unlock_bh(&pm->lock);
@@ -975,7 +974,7 @@ out_unlock:
         * let the PM state machine progress.
         */
        if (skip_add_addr) {
-               mptcp_pm_del_add_timer(msk, addr, true);
+               mptcp_pm_announced_del_timer(msk, addr, true);
                mptcp_pm_subflow_established(msk);
        }
        return ret;
@@ -1139,7 +1138,7 @@ void mptcp_pm_worker(struct mptcp_sock *msk)
 
 void mptcp_pm_destroy(struct mptcp_sock *msk)
 {
-       mptcp_pm_free_anno_list(msk);
+       mptcp_pm_free_announced_list(msk);
 
        if (mptcp_pm_is_userspace(msk))
                mptcp_userspace_pm_free_local_addr_list(msk);
index 484f99a9c5b2c2e85593d72ce4343def628cfefe..424f1a7f9248278ad220059ff09916fcbe9279ea 100644 (file)
@@ -374,7 +374,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk)
                /* If the alloc fails, we are on memory pressure, not worth
                 * continuing, and trying to create subflows.
                 */
-               if (!mptcp_pm_alloc_anno_list(msk, &local.addr))
+               if (!mptcp_pm_announced_alloc(msk, &local.addr))
                        return;
 
                __clear_bit(endp_id, msk->pm.id_avail_bitmap);
@@ -1053,7 +1053,7 @@ out_free:
        return ret;
 }
 
-static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
+static void mptcp_pm_remove_announced(struct mptcp_sock *msk,
                                      const struct mptcp_addr_info *addr,
                                      bool force)
 {
@@ -1062,7 +1062,7 @@ static void mptcp_pm_remove_anno_addr(struct mptcp_sock *msk,
 
        list.ids[list.nr++] = mptcp_endp_get_local_id(msk, addr);
 
-       announced = mptcp_remove_anno_list_by_saddr(msk, addr);
+       announced = mptcp_pm_announced_remove(msk, addr);
        if (announced || force) {
                spin_lock_bh(&msk->pm.lock);
                if (announced)
@@ -1099,7 +1099,7 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
 
                lock_sock(sk);
                remove_subflow = mptcp_pm_has_subflow_saddr(msk, addr);
-               mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
+               mptcp_pm_remove_announced(msk, addr, remove_subflow &&
                                          !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
 
                list.ids[0] = mptcp_endp_get_local_id(msk, addr);
@@ -1239,7 +1239,7 @@ again:
                if (mptcp_pm_has_subflow_saddr(msk, &entry->addr))
                        slist.ids[slist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
 
-               if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
+               if (mptcp_pm_announced_remove(msk, &entry->addr))
                        alist.ids[alist.nr++] = mptcp_endp_get_local_id(msk, &entry->addr);
 
                if (slist.nr == MPTCP_RM_IDS_MAX ||
index b2b74a339d88391ba1f664875de5b950b21468c6..d100867e9202fec98f3ee78463687d83741a5897 100644 (file)
@@ -228,7 +228,7 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
        lock_sock(sk);
        spin_lock_bh(&msk->pm.lock);
 
-       if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) {
+       if (mptcp_pm_announced_alloc(msk, &addr_val.addr)) {
                msk->pm.add_addr_signaled++;
                mptcp_pm_announce_addr(msk, &addr_val.addr, false);
                mptcp_pm_addr_send_ack(msk);
@@ -281,7 +281,7 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
        int anno_nr = 0;
 
        /* only delete if either announced or matching a subflow */
-       if (mptcp_remove_anno_list_by_saddr(msk, &entry->addr))
+       if (mptcp_pm_announced_remove(msk, &entry->addr))
                anno_nr++;
        else if (!mptcp_pm_has_subflow_saddr(msk, &entry->addr))
                return;
index f3c2ab71737e248f63dd9d86e925b47fd8b04edd..8bfb351c6257fb996794f5ce0c9039f808cf2519 100644 (file)
@@ -1130,16 +1130,16 @@ int mptcp_pm_mp_prio_send_ack(struct mptcp_sock *msk,
                              struct mptcp_addr_info *addr,
                              struct mptcp_addr_info *rem,
                              u8 bkup);
-bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
+bool mptcp_pm_announced_alloc(struct mptcp_sock *msk,
                              const struct mptcp_addr_info *addr);
-bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk, const struct sock *sk);
 struct mptcp_pm_add_addr *
-mptcp_pm_del_add_timer(struct mptcp_sock *msk,
-                      const struct mptcp_addr_info *addr, bool check_id);
+mptcp_pm_announced_del_timer(struct mptcp_sock *msk,
+                            const struct mptcp_addr_info *addr, bool check_id);
+bool mptcp_pm_announced_remove(struct mptcp_sock *msk,
+                              const struct mptcp_addr_info *addr);
+bool mptcp_pm_announced_has_ssk(struct mptcp_sock *msk, const struct sock *ssk);
 bool mptcp_pm_has_subflow_saddr(const struct mptcp_sock *msk,
                                const struct mptcp_addr_info *saddr);
-bool mptcp_remove_anno_list_by_saddr(struct mptcp_sock *msk,
-                                    const struct mptcp_addr_info *addr);
 int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
                          struct genl_info *info);
 int mptcp_userspace_pm_set_flags(struct mptcp_pm_addr_entry *local,
index d562e149606f604873ba0812dafbab04c495856d..8e386899ceb98052e7e0612e0bb4bf8b4459d463 100644 (file)
@@ -235,7 +235,7 @@ again:
                        pr_debug("syn inet_sport=%d %d\n",
                                 ntohs(inet_sk(sk_listener)->inet_sport),
                                 ntohs(inet_sk((struct sock *)subflow_req->msk)->inet_sport));
-                       if (!mptcp_pm_sport_in_anno_list(subflow_req->msk, sk_listener)) {
+                       if (!mptcp_pm_announced_has_ssk(subflow_req->msk, sk_listener)) {
                                SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTSYNRX);
                                subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT);
                                return -EPERM;
@@ -926,7 +926,7 @@ create_child:
                                pr_debug("ack inet_sport=%d %d\n",
                                         ntohs(inet_sk(sk)->inet_sport),
                                         ntohs(inet_sk((struct sock *)owner)->inet_sport));
-                               if (!mptcp_pm_sport_in_anno_list(owner, sk)) {
+                               if (!mptcp_pm_announced_has_ssk(owner, sk)) {
                                        SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_MISMATCHPORTACKRX);
                                        subflow_add_reset_reason(skb, MPTCP_RST_EPROHIBIT);
                                        goto dispose_child;