From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A1DB1CEACB for ; Fri, 19 Sep 2025 09:08:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272915; cv=none; b=YjmIkGxNrKkYtxegZAJ3Ao5hEDd3hoA7F+XoKjltP1I58RE+qA4xIYn2EQf0ahSdXDszlixU8HtXjep/Vlv51m3YUT7AIID6pOjoOgDM1A905hju6swVaYG8LVOquYmJzp/6apGy6F+3+qTFeNZF0gCoo66VxOQFw9sMBE2ok7A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272915; c=relaxed/simple; bh=orelVtxbTTbODrybUujIewTjgoHi5oj4VrIx+MJSw9g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rqX0QoHaDDr1Iurx4Nh8vo6h11xyo+JS1GporEDAYsnI+5US+zfYIeeXkEhQCtTsauLddA+hEjDng8k1i2Hz+ZT8dNVmMAC24XgqIJd4sCScMpapA3PkovgKoN0wL1qyHvQ4drEWirq8Kv4C9DD9UCSRl+vYdS7bZyrhkTtthtU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CGZNPrIM; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="CGZNPrIM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 64A58C4CEF1; Fri, 19 Sep 2025 09:08:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272914; bh=orelVtxbTTbODrybUujIewTjgoHi5oj4VrIx+MJSw9g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CGZNPrIMivaaU3RCPs5NCsoZV/IYjPNO5OuhcaRXonpcavF7JLZd6W1SWuNR0E+Fj yjIAKx7JzogjddOj1xk1LLG3MsG2LfliF9X6lqdKb+u29h9BPkUOavMPizfH2hC39c dI4vtmtsmS6HWN2ATftSYXCMfW4eZoTl1zByOabmt8/EZHi083e0ikuyjoIep0YMLO NStBD4JvSC8XcHYQPDIUxvsTbn03AY1IW/klvbRUerrHER4Tq/Nhnxfgf6BE02l2kF swWJDauhzg1faepfwea6srKybTsMQ6X+cl6u8++k4lWex/5113KFBWz/FUvkfg/OKf kRltbtdI71mTQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:07 +0200 Subject: [PATCH mptcp-next v2 01/10] Squash to "mptcp: pm: in-kernel: usable client side with C-flag" Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-1-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1802; i=matttbe@kernel.org; h=from:subject:message-id; bh=orelVtxbTTbODrybUujIewTjgoHi5oj4VrIx+MJSw9g=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyja57Fxl+Sp/36fcg5J7z37aU37HzVTv7/q1i0UZ/ jhen8yp2lHKwiDGxSArpsgi3RaZP/N5FW+Jl58FzBxWJpAhDFycAjARy6MM/yxCLFvdFQ/yND7c unVPLENuocTvCGM/NltO1RgB5ZXKFxkZzuVs7m6b4JcZJ8ci62GoMHPKp70eHdyeH7je6E6Q7I/ iAAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 The id_avail_bitmap is only used when either the 'subflow' or 'signal' flag is used, but not with 'fullmesh' only. Here, it is replacing the 'subflow' action, so check if this flag is set. Also, add the check for the max subflows upfront, so we avoid scheduling the worker with MPTCP_PM_ADD_ADDR_RECEIVED if it is not needed. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- v2: modify protocol.h here too (Geliang) --- net/mptcp/pm_kernel.c | 3 ++- net/mptcp/protocol.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index d7cd89fa6a11a1ea7703edbfbdf2bbe86a6a3054..277f81f38134d07918143331746= a50bc316d81ca 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -411,7 +411,8 @@ static unsigned int fill_local_addresses_vec(struct mpt= cp_sock *msk, locals[i].flags =3D entry->flags; locals[i].ifindex =3D entry->ifindex; =20 - if (c_flag_case) + if (c_flag_case && + (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) __clear_bit(locals[i].addr.id, msk->pm.id_avail_bitmap); =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index dd0662defd41c84474e44c559c571e3594b85d9e..0d6dae37c9daf4ec8990b9a8703= 6aa393add585c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1200,7 +1200,8 @@ static inline bool mptcp_pm_add_addr_c_flag_case(stru= ct mptcp_sock *msk) { return READ_ONCE(msk->pm.remote_deny_join_id0) && msk->pm.local_addr_used =3D=3D 0 && - mptcp_pm_get_add_addr_accept_max(msk) =3D=3D 0; + mptcp_pm_get_add_addr_accept_max(msk) =3D=3D 0 && + msk->pm.subflows < mptcp_pm_get_subflows_max(msk); } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk); --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 370AA1CEACB for ; Fri, 19 Sep 2025 09:08:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272916; cv=none; b=bKbz5X+mvn2/3u6e0qjqE+buxBdNuoR6mZLIIG1EMy82x87HCNnrIwEDk6F3opGmI2UuWCuxCpnwGCGDF8MkIfSuy//zd+crsw97KVmkhJNcyekhbbSAxVLUVHpgJvASBX6KSzO6GhKtS9RvcQ2Q5RBfpVfvIX8uMJinVsFF3V4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272916; c=relaxed/simple; bh=GwIM/t1uRb2/iMd8ktrH9AiIj9tBrjuKDg2W46t/1gs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RRvR/IkJyfyHQokXB6IDFKSAJRDkYy7VuVxIEUP24MEjKjBj18xcbzi2sZN8X4afSmfWqU/FGHwlqUS7A5MephMHMtQloc2U836WcCQTesckox9zFqGo+eNBp1pYELFpj1ruTT9di6j5IRL8O6bzU/FyNQWNae8QREwvqtLFX7w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EfwCCxRz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="EfwCCxRz" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 45E72C4CEF0; Fri, 19 Sep 2025 09:08:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272915; bh=GwIM/t1uRb2/iMd8ktrH9AiIj9tBrjuKDg2W46t/1gs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=EfwCCxRzRZTGcwJMRBlx0tf7JWuhbs6z3Gop9olRMQZHvLaAItmPeBY3awqqX269Y aW2A8bYVLU4KovU3RCr9TaCfp37btcQZmZpn7D5V+vSEaAjt0BesH7zYyr/sWFagN7 1ovbHTR+xtZm1qTExwWwjCqz4EH/yblNsN9SO0FaJ2OKNp7wLEKnHmOVqFMNVQ7d2G xhOUROdgQeKPe7VvG39jWAMdb12RtMWubVb5YgblGWnT58u+S0z8IvWv5xIKoOVssb r5+nP7+cD+wETE1BobJg9NYd9mGQ1qpInsy4H+HRPSUvcyOlKopsaI/XpWZeEPJEG1 uwJRvwatolF9g== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:08 +0200 Subject: [PATCH mptcp-next v2 02/10] mptcp: pm: in-kernel: refactor fill_local_addresses_vec Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-2-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6901; i=matttbe@kernel.org; h=from:subject:message-id; bh=GwIM/t1uRb2/iMd8ktrH9AiIj9tBrjuKDg2W46t/1gs=; b=kA0DAAoWfCLwwvNHCpcByyZiAGjNHYSgqeaU5UIxCEuC7MYI7I1dA/+wN79iIyVHe7vo/RbzN Yh1BAAWCgAdFiEEG4ZZb5nneg10Sk44fCLwwvNHCpcFAmjNHYQACgkQfCLwwvNHCpcJ3AEA1cfx hSAR6Q8/WPzx4m1RCw6B+f2OXaBVFeYCM6TCDe0A/0xs57CleYj0Y+E0Wfk8BL02CJZSAMvcJ4z gG4WjXSgE X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before this modification, this function was quite long with many levels of indentations. Each case can be split in a dedicated function: fullmesh, C flag, any. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- v2: move modif in protocol.h to the parent commit (Geliang) --- net/mptcp/pm_kernel.c | 182 ++++++++++++++++++++++++++++++----------------= ---- 1 file changed, 108 insertions(+), 74 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 277f81f38134d07918143331746a50bc316d81ca..5bdcfcc26308841c49375ce3520= 5097f30592279 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -377,25 +377,20 @@ static void mptcp_pm_nl_subflow_established(struct mp= tcp_sock *msk) mptcp_pm_create_subflow_or_signal_addr(msk); } =20 -/* Fill all the local addresses into the array addrs[], - * and return the array size. - */ -static unsigned int fill_local_addresses_vec(struct mptcp_sock *msk, - struct mptcp_addr_info *remote, - struct mptcp_pm_local *locals) +static unsigned int +fill_local_addresses_vec_fullmesh(struct mptcp_sock *msk, + struct mptcp_addr_info *remote, + struct mptcp_pm_local *locals, + bool c_flag_case) { + struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); + unsigned int subflows_max =3D mptcp_pm_get_subflows_max(msk); struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_addr_entry *entry; struct mptcp_addr_info mpc_addr; - struct pm_nl_pernet *pernet; - unsigned int subflows_max; - bool c_flag_case; + struct mptcp_pm_local *local; int i =3D 0; =20 - pernet =3D pm_nl_get_pernet_from_msk(msk); - subflows_max =3D mptcp_pm_get_subflows_max(msk); - c_flag_case =3D remote->id && mptcp_pm_add_addr_c_flag_case(msk); - mptcp_local_address((struct sock_common *)msk, &mpc_addr); =20 rcu_read_lock(); @@ -406,77 +401,116 @@ static unsigned int fill_local_addresses_vec(struct = mptcp_sock *msk, if (!mptcp_pm_addr_families_match(sk, &entry->addr, remote)) continue; =20 - if (msk->pm.subflows < subflows_max) { - locals[i].addr =3D entry->addr; - locals[i].flags =3D entry->flags; - locals[i].ifindex =3D entry->ifindex; + local =3D &locals[i]; + local->addr =3D entry->addr; + local->flags =3D entry->flags; + local->ifindex =3D entry->ifindex; =20 - if (c_flag_case && - (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) - __clear_bit(locals[i].addr.id, - msk->pm.id_avail_bitmap); + if (c_flag_case && (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) + __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); =20 - /* Special case for ID0: set the correct ID */ - if (mptcp_addresses_equal(&locals[i].addr, &mpc_addr, locals[i].addr.po= rt)) - locals[i].addr.id =3D 0; + /* Special case for ID0: set the correct ID */ + if (mptcp_addresses_equal(&local->addr, &mpc_addr, + local->addr.port)) + local->addr.id =3D 0; =20 - msk->pm.subflows++; - i++; - } + msk->pm.subflows++; + i++; + + if (msk->pm.subflows >=3D subflows_max) + break; } rcu_read_unlock(); =20 + return i; +} + +static unsigned int +fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, + struct mptcp_addr_info *remote, + struct mptcp_pm_local *locals) +{ + unsigned int local_addr_max =3D mptcp_pm_get_local_addr_max(msk); + struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); + unsigned int subflows_max =3D mptcp_pm_get_subflows_max(msk); + struct sock *sk =3D (struct sock *)msk; + struct mptcp_addr_info mpc_addr; + struct mptcp_pm_local *local; + int i =3D 0; + + mptcp_local_address((struct sock_common *)msk, &mpc_addr); + + while (msk->pm.local_addr_used < local_addr_max) { + local =3D &locals[i]; + + if (!select_local_address(pernet, msk, local)) + break; + + __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); + + if (!mptcp_pm_addr_families_match(sk, &local->addr, remote)) + continue; + + if (mptcp_addresses_equal(&local->addr, &mpc_addr, + local->addr.port)) + continue; + + msk->pm.local_addr_used++; + msk->pm.subflows++; + i++; + + if (msk->pm.subflows >=3D subflows_max) + break; + } + + return i; +} + +static unsigned int +fill_local_address_any(struct mptcp_sock *msk, struct mptcp_addr_info *rem= ote, + struct mptcp_pm_local *local) +{ + struct sock *sk =3D (struct sock *)msk; + + memset(local, 0, sizeof(*local)); + local->addr.family =3D +#if IS_ENABLED(CONFIG_MPTCP_IPV6) + remote->family =3D=3D AF_INET6 && + ipv6_addr_v4mapped(&remote->addr6) ? AF_INET : +#endif + remote->family; + + if (!mptcp_pm_addr_families_match(sk, &local->addr, remote)) + return 0; + + msk->pm.subflows++; + + return 1; +} + +/* Fill all the local addresses into the array addrs[], + * and return the array size. + */ +static unsigned int +fill_local_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *r= emote, + struct mptcp_pm_local *locals) +{ + bool c_flag_case =3D remote->id && mptcp_pm_add_addr_c_flag_case(msk); + int i; + + /* If there is at least one MPTCP endpoint with a fullmesh flag */ + i =3D fill_local_addresses_vec_fullmesh(msk, remote, locals, c_flag_case); + if (i) + return i; + /* Special case: peer sets the C flag, accept one ADD_ADDR if default * limits are used -- accepting no ADD_ADDR -- and use subflow endpoints */ - if (!i && c_flag_case) { - unsigned int local_addr_max =3D mptcp_pm_get_local_addr_max(msk); + if (c_flag_case) + return fill_local_addresses_vec_c_flag(msk, remote, locals); =20 - while (msk->pm.local_addr_used < local_addr_max && - msk->pm.subflows < subflows_max) { - struct mptcp_pm_local *local =3D &locals[i]; - - if (!select_local_address(pernet, msk, local)) - break; - - __clear_bit(local->addr.id, msk->pm.id_avail_bitmap); - - if (!mptcp_pm_addr_families_match(sk, &local->addr, - remote)) - continue; - - if (mptcp_addresses_equal(&local->addr, &mpc_addr, - local->addr.port)) - continue; - - msk->pm.local_addr_used++; - msk->pm.subflows++; - i++; - } - - return i; - } - - /* If the array is empty, fill in the single - * 'IPADDRANY' local address - */ - if (!i) { - memset(&locals[i], 0, sizeof(locals[i])); - locals[i].addr.family =3D -#if IS_ENABLED(CONFIG_MPTCP_IPV6) - remote->family =3D=3D AF_INET6 && - ipv6_addr_v4mapped(&remote->addr6) ? AF_INET : -#endif - remote->family; - - if (!mptcp_pm_addr_families_match(sk, &locals[i].addr, remote)) - return 0; - - msk->pm.subflows++; - i++; - } - - return i; + /* No special case: fill in the single 'IPADDRANY' local address */ + return fill_local_address_any(msk, remote, &locals[0]); } =20 static void mptcp_pm_nl_add_addr_received(struct mptcp_sock *msk) --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDED31CEACB for ; Fri, 19 Sep 2025 09:08:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272917; cv=none; b=lU1SnBifKuiIncy6AeqQh8EHioZcZJN7FXybJS9V0zME1KWOZ7jVCUhQtUWMOrc0GHhOP242vgCZEzQyAkgP/SkqyZ8L2Q1GgZ4MwnghW6lS91RFMIa4VYxtD0j0Ccg5U/4K9H0HEceTNPaols4LQwhRNtqR2gy69724fTxkd9k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272917; c=relaxed/simple; bh=KNO+OmZh3c2EjqDpGxIW1Rd2sUYWi+RqqK3+2kmzFXc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EQL+AZyPPDxF37egKq1XmQYYm4o7mbTha0Y+G7HWk+0q+yDEu66YZ2K1L7iviLIBBOh7YnzZzeuUcNxzkUj2dpcqN7etVqkFcr68/65W9Exrk9GYKHtOaCeqUDqMHnZU3/DCvwku5eQ1p0WPEcqV5I6x86HXfHFyhh1W5ISe4NY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qmwWVeul; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qmwWVeul" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26CAFC4CEF7; Fri, 19 Sep 2025 09:08:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272916; bh=KNO+OmZh3c2EjqDpGxIW1Rd2sUYWi+RqqK3+2kmzFXc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qmwWVeulVLtOrnfrV6cPC8V3/dqqG5NsQuPD29rgBgqGDrRwiNux5Ztmd3dxByTbQ 2D1yxhXmVTn8bQbuB4ySMaIlf5iSaOq1Q/zAWYlGjSVK6aCkXjj9jsAfFOreUEMfVH RmlefGKnlcdL0F/byFJcGoNX0d6/8HXg37syQ2ZEe9c4NEPwMfd+nBHAqnu65Z8dWr yzN7YRsaqOYwcmtu+ytMY1L4Zjr9pf6fGqfDWpdqxA9uK0wI/24ks0Ztqa3bKETNuC w+CZ93KEy6UHb9dz8MjwXiZcaOPG/V1EJQ3cjK5rIye1mHoD6nC52VDHRuqFYtz0/8 YfOTnn8rMOlcQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:09 +0200 Subject: [PATCH mptcp-next v2 03/10] mptcp: pm: in-kernel: refactor fill_remote_addresses_vec Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-3-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5426; i=matttbe@kernel.org; h=from:subject:message-id; bh=KNO+OmZh3c2EjqDpGxIW1Rd2sUYWi+RqqK3+2kmzFXc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyrZe5eyS1TcV2KUs46syP+SpXfnv+7GdEV9T8kXag rq37M7qKGVhEONikBVTZJFui8yf+byKt8TLzwJmDisTyBAGLk4BmAiPAsNv1qhVF7fnqXsdLC8+ pKTDV5PUbsc7gU017dp0uco7cfXbGBm+FlQKtZcJv1yctqCRv/LVb0YXO3Gvfcuk0+YeXzQrbhk 3AA== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 Before this modification, this function was quite long with many levels of indentations. Each case can be split in a dedicated function: fullmesh, non-fullmesh. To remove one level of indentation, msk->pm.subflows >=3D subflows_max is now checked after having added one subflow, and stops the loop if it is no longer possible to add new subflows. This is fine to do this because this function should only be called if msk->pm.subflows < subflows_max. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- v2: keep 'Reverse X-Mas Tree' order, and comments (Geliang) --- net/mptcp/pm_kernel.c | 116 +++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 67 insertions(+), 49 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 5bdcfcc26308841c49375ce35205097f30592279..7bc243c96f30e20b4da3d610d3b= 8211e478626e6 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -159,74 +159,92 @@ select_signal_address(struct pm_nl_pernet *pernet, co= nst struct mptcp_sock *msk, return found; } =20 -/* Fill all the remote addresses into the array addrs[], - * and return the array size. - */ -static unsigned int fill_remote_addresses_vec(struct mptcp_sock *msk, - struct mptcp_addr_info *local, - bool fullmesh, - struct mptcp_addr_info *addrs) +static unsigned int +fill_remote_addr(struct mptcp_sock *msk, struct mptcp_addr_info *local, + struct mptcp_addr_info *addrs) { bool deny_id0 =3D READ_ONCE(msk->pm.remote_deny_join_id0); + struct mptcp_addr_info remote =3D { 0 }; + struct sock *sk =3D (struct sock *)msk; + + if (deny_id0) + return 0; + + mptcp_remote_address((struct sock_common *)sk, &remote); + + if (!mptcp_pm_addr_families_match(sk, local, &remote)) + return 0; + + msk->pm.subflows++; + *addrs =3D remote; + + return 1; +} + +static unsigned int +fill_remote_addresses_fullmesh(struct mptcp_sock *msk, + struct mptcp_addr_info *local, + struct mptcp_addr_info *addrs) +{ + bool deny_id0 =3D READ_ONCE(msk->pm.remote_deny_join_id0); + DECLARE_BITMAP(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1); struct sock *sk =3D (struct sock *)msk, *ssk; struct mptcp_subflow_context *subflow; - struct mptcp_addr_info remote =3D { 0 }; unsigned int subflows_max; int i =3D 0; =20 subflows_max =3D mptcp_pm_get_subflows_max(msk); - mptcp_remote_address((struct sock_common *)sk, &remote); =20 - /* Non-fullmesh endpoint, fill in the single entry - * corresponding to the primary MPC subflow remote address + /* Forbid creation of new subflows matching existing ones, possibly + * already created by incoming ADD_ADDR */ - if (!fullmesh) { - if (deny_id0) - return 0; + bitmap_zero(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1); + mptcp_for_each_subflow(msk, subflow) + if (READ_ONCE(subflow->local_id) =3D=3D local->id) + __set_bit(subflow->remote_id, unavail_id); =20 - if (!mptcp_pm_addr_families_match(sk, local, &remote)) - return 0; + mptcp_for_each_subflow(msk, subflow) { + ssk =3D mptcp_subflow_tcp_sock(subflow); + mptcp_remote_address((struct sock_common *)ssk, &addrs[i]); + addrs[i].id =3D READ_ONCE(subflow->remote_id); + if (deny_id0 && !addrs[i].id) + continue; =20 + if (test_bit(addrs[i].id, unavail_id)) + continue; + + if (!mptcp_pm_addr_families_match(sk, local, &addrs[i])) + continue; + + /* forbid creating multiple address towards this id */ + __set_bit(addrs[i].id, unavail_id); msk->pm.subflows++; - addrs[i++] =3D remote; - } else { - DECLARE_BITMAP(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1); + i++; =20 - /* Forbid creation of new subflows matching existing - * ones, possibly already created by incoming ADD_ADDR - */ - bitmap_zero(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1); - mptcp_for_each_subflow(msk, subflow) - if (READ_ONCE(subflow->local_id) =3D=3D local->id) - __set_bit(subflow->remote_id, unavail_id); - - mptcp_for_each_subflow(msk, subflow) { - ssk =3D mptcp_subflow_tcp_sock(subflow); - mptcp_remote_address((struct sock_common *)ssk, &addrs[i]); - addrs[i].id =3D READ_ONCE(subflow->remote_id); - if (deny_id0 && !addrs[i].id) - continue; - - if (test_bit(addrs[i].id, unavail_id)) - continue; - - if (!mptcp_pm_addr_families_match(sk, local, &addrs[i])) - continue; - - if (msk->pm.subflows < subflows_max) { - /* forbid creating multiple address towards - * this id - */ - __set_bit(addrs[i].id, unavail_id); - msk->pm.subflows++; - i++; - } - } + if (msk->pm.subflows >=3D subflows_max) + break; } =20 return i; } =20 +/* Fill all the remote addresses into the array addrs[], + * and return the array size. + */ +static unsigned int +fill_remote_addresses_vec(struct mptcp_sock *msk, struct mptcp_addr_info *= local, + bool fullmesh, struct mptcp_addr_info *addrs) +{ + /* Non-fullmesh: fill in the single entry corresponding to the primary + * MPC subflow remote address, and return 1, corresponding to 1 entry. + */ + if (!fullmesh) + return fill_remote_addr(msk, local, addrs); + + /* Fullmesh endpoint: fill all possible remote addresses */ + return fill_remote_addresses_fullmesh(msk, local, addrs); +} + static struct mptcp_pm_addr_entry * __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) { --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E06D51CEACB for ; Fri, 19 Sep 2025 09:08:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272918; cv=none; b=YOQw1OHwsR5aNGM57wl9FAZOPgTBO4yRNP54F/Zue2DbdC509kab5LUdXELQ2531nkMTZtkO2Uz/BLzjQHjn3V680uIctYmF9wF0MpqlqUPTZ8OdZzGPE07mD0o5vqPo0be0SgJqAnNZUTJbDHXY/9zZ6MgWz1Ug+nROOAsD0es= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272918; c=relaxed/simple; bh=Cyne+UGYEmvw7Mn0r4Mwd+uYWLllL95yTdrqazfwztA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=b8hgqe0YPBgyZV0LLnaaqS9omaNAdVV+UQY+macgTwKTCDt0n82UBktE3VCIZmzlT7kjKmt4lQCXP7qJIGHw9ORuAwtd0lQGILew63ihezF/b61V49KaEXMUUaqu/ADML70qO3m4+dNTgR8AmelWiNZ7B0nFII3At3O3HazfreI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VT5g9Fms; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="VT5g9Fms" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08191C4CEF0; Fri, 19 Sep 2025 09:08:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272917; bh=Cyne+UGYEmvw7Mn0r4Mwd+uYWLllL95yTdrqazfwztA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VT5g9FmsVdFjUlEUCgRicgAxDZ+uZ+GfAWG6b5aRn1cy6dnsf5OEDQY6wl7zIX7Ve VdGEdKpGydgWwKyF2evd2yhhQ07ZAisS7HGoN7j8AE175ix6PmYiLx5GG1BfsbLk3D fb6JWHaHEvLdRY/+bXOyVJTe7h/G1XC60OAmpK71Q1CGIowteS4+k4ZPuV5eg0psnY EfDnmP6oMEjEcRGYcZWKGFKRyl3/UeazhnbEy+JRTSCsOpAOtAXxS5phub8FK2yRn+ BiDZLJtwhCi+izL7g+yoDFjsf6AUvGuFIc1CY6bcgMjGCWajolJy4VkSHkFje1ArvY xCz1AghfMceGw== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:10 +0200 Subject: [PATCH mptcp-next v2 04/10] mptcp: pm: rename 'subflows' to 'extra_subflows' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-4-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10162; i=matttbe@kernel.org; h=from:subject:message-id; bh=Cyne+UGYEmvw7Mn0r4Mwd+uYWLllL95yTdrqazfwztA=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyrbX2AlM32hwenaotupOR+6dW39XsRrtkPmrXCjQb dYqfXxVRykLgxgXg6yYIot0W2T+zOdVvCVefhYwc1iZQIYwcHEKwES4pjH8L7GcdCrqSwNXRKjJ NE2j1Q/fzXjUvvDYpoC0yH0aRguurGD4p6T/VlbWs/D34XP6NnXsxj7cLxZOe/c6RcKjPf/By/r 9XAA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the Path-Managers are confusing, and it would help current and future developers, to clarify them. One of them is 'subflows', which in fact represents the number of extra subflows: all the additional subflows created after the initial one, and not the total number of subflows. While at it, add an additional name for the corresponding variable in MPTCP INFO: mptcpi_extra_subflows. Not to break the current uAPI, the new name is added as a 'define' pointing to the former name. This will then also help userspace devs. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- v2: avoid one line above 80 chars (81...) --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm.c | 13 ++++++------ net/mptcp/pm_kernel.c | 24 +++++++++++--------= ---- net/mptcp/pm_userspace.c | 2 +- net/mptcp/protocol.h | 6 +++--- net/mptcp/sockopt.c | 4 ++-- tools/testing/selftests/bpf/progs/mptcp_subflow.c | 2 +- 7 files changed, 27 insertions(+), 25 deletions(-) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index 15eef878690b8556af21be8d959b6a2c9fe617d3..f807c8dba56e7eb278fce0ad318= 4de3d0e24399b 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -42,6 +42,7 @@ =20 struct mptcp_info { __u8 mptcpi_subflows; + #define mptcpi_extra_subflows mptcpi_subflows __u8 mptcpi_add_addr_signal; __u8 mptcpi_add_addr_accepted; __u8 mptcpi_subflows_max; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index edaf93fe6f86b32aee8e9bb88318b1dc2a7fcb5e..6fd252ea023c506a8fd26647ecc= 4f09065703734 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -489,7 +489,7 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) if (mptcp_pm_is_userspace(msk)) { if (mptcp_userspace_pm_active(msk)) { spin_lock_bh(&pm->lock); - pm->subflows++; + pm->extra_subflows++; spin_unlock_bh(&pm->lock); return true; } @@ -498,8 +498,9 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) =20 subflows_max =3D mptcp_pm_get_subflows_max(msk); =20 - pr_debug("msk=3D%p subflows=3D%d max=3D%d allow=3D%d\n", msk, pm->subflow= s, - subflows_max, READ_ONCE(pm->accept_subflow)); + pr_debug("msk=3D%p subflows=3D%d max=3D%d allow=3D%d\n", msk, + pm->extra_subflows, subflows_max, + READ_ONCE(pm->accept_subflow)); =20 /* try to avoid acquiring the lock below */ if (!READ_ONCE(pm->accept_subflow)) @@ -507,8 +508,8 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) =20 spin_lock_bh(&pm->lock); if (READ_ONCE(pm->accept_subflow)) { - ret =3D pm->subflows < subflows_max; - if (ret && ++pm->subflows =3D=3D subflows_max) + ret =3D pm->extra_subflows < subflows_max; + if (ret && ++pm->extra_subflows =3D=3D subflows_max) WRITE_ONCE(pm->accept_subflow, false); } spin_unlock_bh(&pm->lock); @@ -594,7 +595,7 @@ void mptcp_pm_subflow_check_next(struct mptcp_sock *msk, if (mptcp_pm_is_userspace(msk)) { if (update_subflows) { spin_lock_bh(&pm->lock); - pm->subflows--; + pm->extra_subflows--; spin_unlock_bh(&pm->lock); } return; diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 7bc243c96f30e20b4da3d610d3b8211e478626e6..9024779bffb7b9d2aead3b8cb8c= 0d8a1360c6663 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -175,7 +175,7 @@ fill_remote_addr(struct mptcp_sock *msk, struct mptcp_a= ddr_info *local, if (!mptcp_pm_addr_families_match(sk, local, &remote)) return 0; =20 - msk->pm.subflows++; + msk->pm.extra_subflows++; *addrs =3D remote; =20 return 1; @@ -218,10 +218,10 @@ fill_remote_addresses_fullmesh(struct mptcp_sock *msk, =20 /* forbid creating multiple address towards this id */ __set_bit(addrs[i].id, unavail_id); - msk->pm.subflows++; + msk->pm.extra_subflows++; i++; =20 - if (msk->pm.subflows >=3D subflows_max) + if (msk->pm.extra_subflows >=3D subflows_max) break; } =20 @@ -313,7 +313,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) pr_debug("local %d:%d signal %d:%d subflows %d:%d\n", msk->pm.local_addr_used, local_addr_max, msk->pm.add_addr_signaled, add_addr_signal_max, - msk->pm.subflows, subflows_max); + msk->pm.extra_subflows, subflows_max); =20 /* check first for announce */ if (msk->pm.add_addr_signaled < add_addr_signal_max) { @@ -353,7 +353,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) subflow: /* check if should create a new subflow */ while (msk->pm.local_addr_used < local_addr_max && - msk->pm.subflows < subflows_max) { + msk->pm.extra_subflows < subflows_max) { struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX]; bool fullmesh; int i, nr; @@ -432,10 +432,10 @@ fill_local_addresses_vec_fullmesh(struct mptcp_sock *= msk, local->addr.port)) local->addr.id =3D 0; =20 - msk->pm.subflows++; + msk->pm.extra_subflows++; i++; =20 - if (msk->pm.subflows >=3D subflows_max) + if (msk->pm.extra_subflows >=3D subflows_max) break; } rcu_read_unlock(); @@ -474,10 +474,10 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *ms= k, continue; =20 msk->pm.local_addr_used++; - msk->pm.subflows++; + msk->pm.extra_subflows++; i++; =20 - if (msk->pm.subflows >=3D subflows_max) + if (msk->pm.extra_subflows >=3D subflows_max) break; } =20 @@ -501,7 +501,7 @@ fill_local_address_any(struct mptcp_sock *msk, struct m= ptcp_addr_info *remote, if (!mptcp_pm_addr_families_match(sk, &local->addr, remote)) return 0; =20 - msk->pm.subflows++; + msk->pm.extra_subflows++; =20 return 1; } @@ -577,7 +577,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) if (remote.id) msk->pm.add_addr_accepted++; if (msk->pm.add_addr_accepted >=3D add_addr_accept_max || - msk->pm.subflows >=3D subflows_max) + msk->pm.extra_subflows >=3D subflows_max) WRITE_ONCE(msk->pm.accept_addr, false); } } @@ -1419,7 +1419,7 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock= *msk) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); =20 - if (msk->pm.subflows =3D=3D mptcp_pm_get_subflows_max(msk) || + if (msk->pm.extra_subflows =3D=3D mptcp_pm_get_subflows_max(msk) || (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, 0) =3D=3D MPTCP_PM_MAX_ADDR_ID + 1)) { WRITE_ONCE(msk->pm.work_pending, false); diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 1911fe1799fa38a53381247a830a9a0daf1c4492..d838e8ea65fd4ef8b5d0698f0d4= 586d565fab32f 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -419,7 +419,7 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb= , struct genl_info *info) if (err) mptcp_userspace_pm_delete_local_addr(msk, &entry); else - msk->pm.subflows++; + msk->pm.extra_subflows++; spin_unlock_bh(&msk->pm.lock); =20 create_err: diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 0d6dae37c9daf4ec8990b9a87036aa393add585c..33f7bf9a8c1344a01432c18d183= a5d1b2d1f2c9e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -236,7 +236,7 @@ struct mptcp_pm_data { u8 add_addr_accepted; u8 local_addr_used; u8 pm_type; - u8 subflows; + u8 extra_subflows; u8 status; =20 ); @@ -1185,7 +1185,7 @@ unsigned int mptcp_pm_get_local_addr_max(const struct= mptcp_sock *msk); /* called under PM lock */ static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk) { - if (--msk->pm.subflows < mptcp_pm_get_subflows_max(msk)) + if (--msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk)) WRITE_ONCE(msk->pm.accept_subflow, true); } =20 @@ -1201,7 +1201,7 @@ static inline bool mptcp_pm_add_addr_c_flag_case(stru= ct mptcp_sock *msk) return READ_ONCE(msk->pm.remote_deny_join_id0) && msk->pm.local_addr_used =3D=3D 0 && mptcp_pm_get_add_addr_accept_max(msk) =3D=3D 0 && - msk->pm.subflows < mptcp_pm_get_subflows_max(msk); + msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk); } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk); diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 2abe6f1e99400498e915176c360be9281fd524f6..17966da80239d731de925f3e421= 1b3ee00f802e4 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -962,7 +962,7 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) =20 memset(info, 0, sizeof(*info)); =20 - info->mptcpi_subflows =3D READ_ONCE(msk->pm.subflows); + info->mptcpi_extra_subflows =3D READ_ONCE(msk->pm.extra_subflows); info->mptcpi_add_addr_signal =3D READ_ONCE(msk->pm.add_addr_signaled); info->mptcpi_add_addr_accepted =3D READ_ONCE(msk->pm.add_addr_accepted); info->mptcpi_local_addr_used =3D READ_ONCE(msk->pm.local_addr_used); @@ -996,7 +996,7 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) info->mptcpi_bytes_sent =3D msk->bytes_sent; info->mptcpi_bytes_received =3D msk->bytes_received; info->mptcpi_bytes_retrans =3D msk->bytes_retrans; - info->mptcpi_subflows_total =3D info->mptcpi_subflows + + info->mptcpi_subflows_total =3D info->mptcpi_extra_subflows + __mptcp_has_initial_subflow(msk); now =3D tcp_jiffies32; info->mptcpi_last_data_sent =3D jiffies_to_msecs(now - msk->last_data_sen= t); diff --git a/tools/testing/selftests/bpf/progs/mptcp_subflow.c b/tools/test= ing/selftests/bpf/progs/mptcp_subflow.c index 70302477e326eecaef6aad4ecf899aa3d6606f23..41389e579578b7d6c0d9ffff520= c9f3e930abb51 100644 --- a/tools/testing/selftests/bpf/progs/mptcp_subflow.c +++ b/tools/testing/selftests/bpf/progs/mptcp_subflow.c @@ -117,7 +117,7 @@ int _getsockopt_subflow(struct bpf_sockopt *ctx) return 1; =20 msk =3D bpf_core_cast(sk, struct mptcp_sock); - if (msk->pm.subflows !=3D 1) { + if (msk->pm.extra_subflows !=3D 1) { ctx->retval =3D -1; return 1; } --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 794021BEF7E for ; Fri, 19 Sep 2025 09:08:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272918; cv=none; b=NXPBpPI/V7x1H9+z69oY4BrCAWPoGzOqg6FdumvX9K0iTnPBSvOJcWPyqeZdNs4BjDjhl8TcnerlGumQTJ38QD/FFCjXZJGzSjXXDSAkpif2edxfMlcMk5ej5am2zZacf9iMj+dCa8fc2624QvC/h7q+kOiQqIW6+ZevNtb8fyE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272918; c=relaxed/simple; bh=BDxC94v6upJLhRwuzeWPyJCLEeaEAu1vYEeLdV5n17w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FpKyKF45xHCgwlasXagABmw/ihCb8gCJEP0nfaSoUC5EbYGxFayu2OTH+L7DiuA2DmdYCuW5Yp5Xuk9zBOSQv9WHLVcyR3rnHrBgiG4hwOJ1YMJtU9yQGw1dDEvw9AAl4m+oRa6ZWH7nrsTdILURYVn2Ivcl4xtDALnoHAsEFpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qDkRh/2u; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qDkRh/2u" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD647C4CEF1; Fri, 19 Sep 2025 09:08:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272918; bh=BDxC94v6upJLhRwuzeWPyJCLEeaEAu1vYEeLdV5n17w=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qDkRh/2u984Pum4OYlfbQpMGa0miP+k6PS2oqVnG7KGy7ypNAaHFOM/2r53/PaOKO WH3Sk0CGbN2Lb4yNlDWcyxvE8/bXUODJ9Ya21tyFIwzykKKEu8D0wpzsCfuqQWSB+d 0Bpme2diq9L46RLckwMypColz7L8Vj7Ucf45hd2xg7A17BOPdfNkfWgHlWrWIeXhVj 7Ra0TDaYAbpg+4OEIEIxqG7qEFHLvvSOUCQu/HYYSK9CeUm54iUbeBPYMuvFGjU8D/ dNxOXjYwh6axvVkEaIDl/iwUqs5qCjZOhdokxr5jMalcMb2/yb0LSIFgiWKlk/3UBX UpYDYsgpZ1k3g== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:11 +0200 Subject: [PATCH mptcp-next v2 05/10] mptcp: pm: in-kernel: rename 'subflows_max' to 'limit_extra_subflows' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-5-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=13702; i=matttbe@kernel.org; h=from:subject:message-id; bh=BDxC94v6upJLhRwuzeWPyJCLEeaEAu1vYEeLdV5n17w=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOynZuMqydts+l7v+hj0z6cv4dPZKZ9xnnabbVisUJT n97r9eoo5SFQYyLQVZMkUW6LTJ/5vMq3hIvPwuYOaxMIEMYuDgFYCJ3jjEynEyuP/Fijs2X4yxP vylLKFSYnP4Tzbio5H9buq62iorzZYZ/5rPYFhztNUlyXFq89NGdGd3xewIete0VCVYMFr62kd2 aCQA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the in-kernel Path-Manager are confusing, and it would help current and future developers, to clarify them. One of them is 'subflows_max', which in fact represents the limit of extra subflows: the limit set via 'ip mptcp limit subflows X' for example. It is not linked to the maximum number of created / possible subflows. While at it, add an additional name for the corresponding variable in MPTCP INFO: mptcpi_limit_extra_subflows. Not to break the current uAPI, the new name is added as a 'define' pointing to the former name. This will then also help userspace devs. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm.c | 10 +++++----- net/mptcp/pm_kernel.c | 50 ++++++++++++++++++++++++------------------= ---- net/mptcp/protocol.h | 6 +++--- net/mptcp/sockopt.c | 4 ++-- 5 files changed, 37 insertions(+), 34 deletions(-) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index f807c8dba56e7eb278fce0ad3184de3d0e24399b..314200c61f150da445ff87debb1= 54bfd98f324fc 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -46,6 +46,7 @@ struct mptcp_info { __u8 mptcpi_add_addr_signal; __u8 mptcpi_add_addr_accepted; __u8 mptcpi_subflows_max; + #define mptcpi_limit_extra_subflows mptcpi_subflows_max __u8 mptcpi_add_addr_signal_max; __u8 mptcpi_add_addr_accepted_max; __u32 mptcpi_flags; diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 6fd252ea023c506a8fd26647ecc4f09065703734..daf6dcb8068431561f5336cceb4= 0ebc4ea53cb8c 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -483,7 +483,7 @@ void mptcp_pm_new_connection(struct mptcp_sock *msk, co= nst struct sock *ssk, int bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) { struct mptcp_pm_data *pm =3D &msk->pm; - unsigned int subflows_max; + unsigned int limit_extra_subflows; int ret =3D 0; =20 if (mptcp_pm_is_userspace(msk)) { @@ -496,10 +496,10 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *ms= k) return false; } =20 - subflows_max =3D mptcp_pm_get_subflows_max(msk); + limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 pr_debug("msk=3D%p subflows=3D%d max=3D%d allow=3D%d\n", msk, - pm->extra_subflows, subflows_max, + pm->extra_subflows, limit_extra_subflows, READ_ONCE(pm->accept_subflow)); =20 /* try to avoid acquiring the lock below */ @@ -508,8 +508,8 @@ bool mptcp_pm_allow_new_subflow(struct mptcp_sock *msk) =20 spin_lock_bh(&pm->lock); if (READ_ONCE(pm->accept_subflow)) { - ret =3D pm->extra_subflows < subflows_max; - if (ret && ++pm->extra_subflows =3D=3D subflows_max) + ret =3D pm->extra_subflows < limit_extra_subflows; + if (ret && ++pm->extra_subflows =3D=3D limit_extra_subflows) WRITE_ONCE(pm->accept_subflow, false); } spin_unlock_bh(&pm->lock); diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 9024779bffb7b9d2aead3b8cb8c0d8a1360c6663..ae6b8000ca61539c6927811558b= b78dcb11531e4 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -23,7 +23,7 @@ struct pm_nl_pernet { unsigned int add_addr_signal_max; unsigned int add_addr_accept_max; unsigned int local_addr_max; - unsigned int subflows_max; + unsigned int limit_extra_subflows; unsigned int next_id; DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); }; @@ -62,13 +62,13 @@ unsigned int mptcp_pm_get_add_addr_accept_max(const str= uct mptcp_sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_accept_max); =20 -unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk) +unsigned int mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *ms= k) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); =20 - return READ_ONCE(pernet->subflows_max); + return READ_ONCE(pernet->limit_extra_subflows); } -EXPORT_SYMBOL_GPL(mptcp_pm_get_subflows_max); +EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_extra_subflows); =20 unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk) { @@ -190,10 +190,10 @@ fill_remote_addresses_fullmesh(struct mptcp_sock *msk, DECLARE_BITMAP(unavail_id, MPTCP_PM_MAX_ADDR_ID + 1); struct sock *sk =3D (struct sock *)msk, *ssk; struct mptcp_subflow_context *subflow; - unsigned int subflows_max; + unsigned int limit_extra_subflows; int i =3D 0; =20 - subflows_max =3D mptcp_pm_get_subflows_max(msk); + limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 /* Forbid creation of new subflows matching existing ones, possibly * already created by incoming ADD_ADDR @@ -221,7 +221,7 @@ fill_remote_addresses_fullmesh(struct mptcp_sock *msk, msk->pm.extra_subflows++; i++; =20 - if (msk->pm.extra_subflows >=3D subflows_max) + if (msk->pm.extra_subflows >=3D limit_extra_subflows) break; } =20 @@ -274,18 +274,18 @@ __lookup_addr(struct pm_nl_pernet *pernet, const stru= ct mptcp_addr_info *info) static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) { struct sock *sk =3D (struct sock *)msk; + unsigned int limit_extra_subflows; unsigned int add_addr_signal_max; bool signal_and_subflow =3D false; unsigned int local_addr_max; struct pm_nl_pernet *pernet; struct mptcp_pm_local local; - unsigned int subflows_max; =20 pernet =3D pm_nl_get_pernet(sock_net(sk)); =20 add_addr_signal_max =3D mptcp_pm_get_add_addr_signal_max(msk); local_addr_max =3D mptcp_pm_get_local_addr_max(msk); - subflows_max =3D mptcp_pm_get_subflows_max(msk); + limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 /* do lazy endpoint usage accounting for the MPC subflows */ if (unlikely(!(msk->pm.status & BIT(MPTCP_PM_MPC_ENDPOINT_ACCOUNTED))) &&= msk->first) { @@ -313,7 +313,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) pr_debug("local %d:%d signal %d:%d subflows %d:%d\n", msk->pm.local_addr_used, local_addr_max, msk->pm.add_addr_signaled, add_addr_signal_max, - msk->pm.extra_subflows, subflows_max); + msk->pm.extra_subflows, limit_extra_subflows); =20 /* check first for announce */ if (msk->pm.add_addr_signaled < add_addr_signal_max) { @@ -353,7 +353,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) subflow: /* check if should create a new subflow */ while (msk->pm.local_addr_used < local_addr_max && - msk->pm.extra_subflows < subflows_max) { + msk->pm.extra_subflows < limit_extra_subflows) { struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX]; bool fullmesh; int i, nr; @@ -402,14 +402,15 @@ fill_local_addresses_vec_fullmesh(struct mptcp_sock *= msk, bool c_flag_case) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); - unsigned int subflows_max =3D mptcp_pm_get_subflows_max(msk); struct sock *sk =3D (struct sock *)msk; struct mptcp_pm_addr_entry *entry; + unsigned int limit_extra_subflows; struct mptcp_addr_info mpc_addr; struct mptcp_pm_local *local; int i =3D 0; =20 mptcp_local_address((struct sock_common *)msk, &mpc_addr); + limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 rcu_read_lock(); list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { @@ -435,7 +436,7 @@ fill_local_addresses_vec_fullmesh(struct mptcp_sock *ms= k, msk->pm.extra_subflows++; i++; =20 - if (msk->pm.extra_subflows >=3D subflows_max) + if (msk->pm.extra_subflows >=3D limit_extra_subflows) break; } rcu_read_unlock(); @@ -450,13 +451,14 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *ms= k, { unsigned int local_addr_max =3D mptcp_pm_get_local_addr_max(msk); struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); - unsigned int subflows_max =3D mptcp_pm_get_subflows_max(msk); struct sock *sk =3D (struct sock *)msk; + unsigned int limit_extra_subflows; struct mptcp_addr_info mpc_addr; struct mptcp_pm_local *local; int i =3D 0; =20 mptcp_local_address((struct sock_common *)msk, &mpc_addr); + limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 while (msk->pm.local_addr_used < local_addr_max) { local =3D &locals[i]; @@ -477,7 +479,7 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, msk->pm.extra_subflows++; i++; =20 - if (msk->pm.extra_subflows >=3D subflows_max) + if (msk->pm.extra_subflows >=3D limit_extra_subflows) break; } =20 @@ -535,14 +537,14 @@ static void mptcp_pm_nl_add_addr_received(struct mptc= p_sock *msk) { struct mptcp_pm_local locals[MPTCP_PM_ADDR_MAX]; struct sock *sk =3D (struct sock *)msk; + unsigned int limit_extra_subflows; unsigned int add_addr_accept_max; struct mptcp_addr_info remote; - unsigned int subflows_max; bool sf_created =3D false; int i, nr; =20 add_addr_accept_max =3D mptcp_pm_get_add_addr_accept_max(msk); - subflows_max =3D mptcp_pm_get_subflows_max(msk); + limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 pr_debug("accepted %d:%d remote family %d\n", msk->pm.add_addr_accepted, add_addr_accept_max, @@ -577,7 +579,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) if (remote.id) msk->pm.add_addr_accepted++; if (msk->pm.add_addr_accepted >=3D add_addr_accept_max || - msk->pm.extra_subflows >=3D subflows_max) + msk->pm.extra_subflows >=3D limit_extra_subflows) WRITE_ONCE(msk->pm.accept_addr, false); } } @@ -1277,13 +1279,13 @@ int mptcp_pm_nl_set_limits_doit(struct sk_buff *skb= , struct genl_info *info) if (ret) goto unlock; =20 - subflows =3D pernet->subflows_max; + subflows =3D pernet->limit_extra_subflows; ret =3D parse_limit(info, MPTCP_PM_ATTR_SUBFLOWS, &subflows); if (ret) goto unlock; =20 WRITE_ONCE(pernet->add_addr_accept_max, rcv_addrs); - WRITE_ONCE(pernet->subflows_max, subflows); + WRITE_ONCE(pernet->limit_extra_subflows, subflows); =20 unlock: spin_unlock_bh(&pernet->lock); @@ -1310,7 +1312,7 @@ int mptcp_pm_nl_get_limits_doit(struct sk_buff *skb, = struct genl_info *info) goto fail; =20 if (nla_put_u32(msg, MPTCP_PM_ATTR_SUBFLOWS, - READ_ONCE(pernet->subflows_max))) + READ_ONCE(pernet->limit_extra_subflows))) goto fail; =20 genlmsg_end(msg, reply); @@ -1419,7 +1421,7 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock= *msk) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); =20 - if (msk->pm.extra_subflows =3D=3D mptcp_pm_get_subflows_max(msk) || + if (msk->pm.extra_subflows =3D=3D mptcp_pm_get_limit_extra_subflows(msk) = || (find_next_and_bit(pernet->id_bitmap, msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, 0) =3D=3D MPTCP_PM_MAX_ADDR_ID + 1)) { WRITE_ONCE(msk->pm.work_pending, false); @@ -1454,7 +1456,7 @@ static int __net_init pm_nl_init_net(struct net *net) INIT_LIST_HEAD_RCU(&pernet->local_addr_list); =20 /* Cit. 2 subflows ought to be enough for anybody. */ - pernet->subflows_max =3D 2; + pernet->limit_extra_subflows =3D 2; pernet->next_id =3D 1; pernet->stale_loss_cnt =3D 4; spin_lock_init(&pernet->lock); @@ -1490,7 +1492,7 @@ static struct pernet_operations mptcp_pm_pernet_ops = =3D { =20 static void mptcp_pm_kernel_init(struct mptcp_sock *msk) { - bool subflows_allowed =3D !!mptcp_pm_get_subflows_max(msk); + bool subflows_allowed =3D !!mptcp_pm_get_limit_extra_subflows(msk); struct mptcp_pm_data *pm =3D &msk->pm; =20 /* pm->work_pending must be only be set to 'true' when diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 33f7bf9a8c1344a01432c18d183a5d1b2d1f2c9e..acfe46e530cd75b14b33d9f4940= b90fbf2867517 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1179,13 +1179,13 @@ void mptcp_pm_worker(struct mptcp_sock *msk); void __mptcp_pm_kernel_worker(struct mptcp_sock *msk); unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk= ); unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk= ); -unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk); +unsigned int mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *ms= k); unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk); =20 /* called under PM lock */ static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk) { - if (--msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk)) + if (--msk->pm.extra_subflows < mptcp_pm_get_limit_extra_subflows(msk)) WRITE_ONCE(msk->pm.accept_subflow, true); } =20 @@ -1201,7 +1201,7 @@ static inline bool mptcp_pm_add_addr_c_flag_case(stru= ct mptcp_sock *msk) return READ_ONCE(msk->pm.remote_deny_join_id0) && msk->pm.local_addr_used =3D=3D 0 && mptcp_pm_get_add_addr_accept_max(msk) =3D=3D 0 && - msk->pm.extra_subflows < mptcp_pm_get_subflows_max(msk); + msk->pm.extra_subflows < mptcp_pm_get_limit_extra_subflows(msk); } =20 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk); diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 17966da80239d731de925f3e4211b3ee00f802e4..4e82bcfcd34e3a1dffb05799cf1= 81ee2940e75d7 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -972,8 +972,8 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) =20 /* The following limits only make sense for the in-kernel PM */ if (mptcp_pm_is_kernel(msk)) { - info->mptcpi_subflows_max =3D - mptcp_pm_get_subflows_max(msk); + info->mptcpi_limit_extra_subflows =3D + mptcp_pm_get_limit_extra_subflows(msk); info->mptcpi_add_addr_signal_max =3D mptcp_pm_get_add_addr_signal_max(msk); info->mptcpi_add_addr_accepted_max =3D --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B06DF2EA461 for ; Fri, 19 Sep 2025 09:08:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272919; cv=none; b=pze8I5Ptd7CsbRZOXgcTX9JpAkwijb3oZ78jIadP76gRkursuiVnex9II8AyPGaR9H+AsewgLjwuNJVv1KD3SfsiuLDVaI2RkvD6qpiFPxMSHn3cFsPw9BPCC5oRPbfQQF4hghxPnwlgtngSI+O+XauPd8hniP7mLpEj2Diwcik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272919; c=relaxed/simple; bh=+oNi5BaDD0ui4ZuKPMSj+THCtiJg0wfC7uQ7iEAfCYc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t2zU12MIOOoOR17TQkzkdXKyGlzxQLPy456HDmMgLL8KohKHwzcOnhLnBTtkyPB5b3DlRevl9eYCHj8apevyWEBy6MO5Oico8f9B0eCYl35t2XiSNZiwRu0V+mGC+uEPGTVTVgNOJuvG8WeiuW8xMkcnM8X/nfdvlA9QW88xEiQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XvQN4H2v; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="XvQN4H2v" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BEBE5C4CEF0; Fri, 19 Sep 2025 09:08:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272919; bh=+oNi5BaDD0ui4ZuKPMSj+THCtiJg0wfC7uQ7iEAfCYc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XvQN4H2vSoD89HjHid4HLZHFYGg/d6b4s5E2ZR/lUfLAg5Y+hLeVB31M5LVrZ1PyG AFAkM6q/nLLAa5zzXsQTXTMbfEOVWF2h9XKZB3Hk3d/ozXhPMhldpUzaRLa/ugLHXs fKlm2hgsj8X4bHHDX92HpMDIaLr7exoHJZl3iQ+H09BqQzZpNz413MfuKsyPyKvTGd dPGPyntfOtIbdlSEPjZf21PZv9vnlAIFZh/CqunSn18jRV+zw5G6io/FwpWsK696Gs uOneIK7b3FEoG93zbw5aDxDnlNW0ykYs3bVb+GPzvnTsNE6YSm0dReHw/TzA+AZaML zvtBtMPs4PlsQ== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:12 +0200 Subject: [PATCH mptcp-next v2 06/10] mptcp: pm: in-kernel: rename 'add_addr_signal_max' to 'endp_signal_max' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-6-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7189; i=matttbe@kernel.org; h=from:subject:message-id; bh=+oNi5BaDD0ui4ZuKPMSj+THCtiJg0wfC7uQ7iEAfCYc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOynYp75iW+mu7hEHJp50rT039rskq5TwxTrHh9559n 0O153dJd5SyMIhxMciKKbJIt0Xmz3xexVvi5WcBM4eVCWQIAxenAEwkw4Phv+O8IoZdr8Kta3uX zg/8cWWv9mXNdae/Hv0fY/Hx/xzu66wM//M7TyZsfBzwunfe1EZLzUl7Wy8y1W4s781vSvpUvYz PkBkA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the in-kernel Path-Manager are confusing, and it would help current and future developers, to clarify them. One of them is 'add_addr_signal_max', which in fact represents the maximum number of 'signal' endpoints that can be used to announced addresses, and not the number of ADD_ADDR that can be signalled. While at it, add an additional name for the corresponding variable in MPTCP INFO: mptcpi_endp_signal_max. Not to break the current uAPI, the new name is added as a 'define' pointing to the former name. This will then also help userspace devs. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_kernel.c | 28 ++++++++++++++-------------- net/mptcp/protocol.h | 2 +- net/mptcp/sockopt.c | 4 ++-- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index 314200c61f150da445ff87debb154bfd98f324fc..69fc20db1c2f731d5f93cfee4e5= 8a23119ff7a97 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -48,6 +48,7 @@ struct mptcp_info { __u8 mptcpi_subflows_max; #define mptcpi_limit_extra_subflows mptcpi_subflows_max __u8 mptcpi_add_addr_signal_max; + #define mptcpi_endp_signal_max mptcpi_add_addr_signal_max __u8 mptcpi_add_addr_accepted_max; __u32 mptcpi_flags; __u32 mptcpi_token; diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index ae6b8000ca61539c6927811558bb78dcb11531e4..1c6d0a21c346da90f6bb85d9a28= 1b606dcc576e1 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -20,7 +20,7 @@ struct pm_nl_pernet { struct list_head local_addr_list; unsigned int addrs; unsigned int stale_loss_cnt; - unsigned int add_addr_signal_max; + unsigned int endp_signal_max; unsigned int add_addr_accept_max; unsigned int local_addr_max; unsigned int limit_extra_subflows; @@ -46,13 +46,13 @@ static struct pm_nl_pernet *genl_info_pm_nl(struct genl= _info *info) return pm_nl_get_pernet(genl_info_net(info)); } =20 -unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk) +unsigned int mptcp_pm_get_endp_signal_max(const struct mptcp_sock *msk) { const struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); =20 - return READ_ONCE(pernet->add_addr_signal_max); + return READ_ONCE(pernet->endp_signal_max); } -EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_signal_max); +EXPORT_SYMBOL_GPL(mptcp_pm_get_endp_signal_max); =20 unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk) { @@ -275,15 +275,15 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) { struct sock *sk =3D (struct sock *)msk; unsigned int limit_extra_subflows; - unsigned int add_addr_signal_max; bool signal_and_subflow =3D false; + unsigned int endp_signal_max; unsigned int local_addr_max; struct pm_nl_pernet *pernet; struct mptcp_pm_local local; =20 pernet =3D pm_nl_get_pernet(sock_net(sk)); =20 - add_addr_signal_max =3D mptcp_pm_get_add_addr_signal_max(msk); + endp_signal_max =3D mptcp_pm_get_endp_signal_max(msk); local_addr_max =3D mptcp_pm_get_local_addr_max(msk); limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 @@ -312,11 +312,11 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) =20 pr_debug("local %d:%d signal %d:%d subflows %d:%d\n", msk->pm.local_addr_used, local_addr_max, - msk->pm.add_addr_signaled, add_addr_signal_max, + msk->pm.add_addr_signaled, endp_signal_max, msk->pm.extra_subflows, limit_extra_subflows); =20 /* check first for announce */ - if (msk->pm.add_addr_signaled < add_addr_signal_max) { + if (msk->pm.add_addr_signaled < endp_signal_max) { /* due to racing events on both ends we can reach here while * previous add address is still running: if we invoke now * mptcp_pm_announce_addr(), that will fail and the @@ -690,8 +690,8 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, pernet->next_id =3D entry->addr.id; =20 if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL) { - addr_max =3D pernet->add_addr_signal_max; - WRITE_ONCE(pernet->add_addr_signal_max, addr_max + 1); + addr_max =3D pernet->endp_signal_max; + WRITE_ONCE(pernet->endp_signal_max, addr_max + 1); } if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { addr_max =3D pernet->local_addr_max; @@ -1090,8 +1090,8 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) return -EINVAL; } if (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL) { - addr_max =3D pernet->add_addr_signal_max; - WRITE_ONCE(pernet->add_addr_signal_max, addr_max - 1); + addr_max =3D pernet->endp_signal_max; + WRITE_ONCE(pernet->endp_signal_max, addr_max - 1); } if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { addr_max =3D pernet->local_addr_max; @@ -1177,7 +1177,7 @@ static void __flush_addrs(struct list_head *list) =20 static void __reset_counters(struct pm_nl_pernet *pernet) { - WRITE_ONCE(pernet->add_addr_signal_max, 0); + WRITE_ONCE(pernet->endp_signal_max, 0); WRITE_ONCE(pernet->local_addr_max, 0); pernet->addrs =3D 0; } @@ -1501,7 +1501,7 @@ static void mptcp_pm_kernel_init(struct mptcp_sock *m= sk) WRITE_ONCE(pm->work_pending, (!!mptcp_pm_get_local_addr_max(msk) && subflows_allowed) || - !!mptcp_pm_get_add_addr_signal_max(msk)); + !!mptcp_pm_get_endp_signal_max(msk)); WRITE_ONCE(pm->accept_addr, !!mptcp_pm_get_add_addr_accept_max(msk) && subflows_allowed); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index acfe46e530cd75b14b33d9f4940b90fbf2867517..31da0aa0f52443c16324dfe2a26= 6252994bf656c 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1177,7 +1177,7 @@ void __init mptcp_pm_userspace_register(void); void __init mptcp_pm_nl_init(void); void mptcp_pm_worker(struct mptcp_sock *msk); void __mptcp_pm_kernel_worker(struct mptcp_sock *msk); -unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk= ); +unsigned int mptcp_pm_get_endp_signal_max(const struct mptcp_sock *msk); unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk= ); unsigned int mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *ms= k); unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk); diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 4e82bcfcd34e3a1dffb05799cf181ee2940e75d7..4688e0f25d15d9363b33bdcf3ad= 75c8295a810e3 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -974,8 +974,8 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) if (mptcp_pm_is_kernel(msk)) { info->mptcpi_limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); - info->mptcpi_add_addr_signal_max =3D - mptcp_pm_get_add_addr_signal_max(msk); + info->mptcpi_endp_signal_max =3D + mptcp_pm_get_endp_signal_max(msk); info->mptcpi_add_addr_accepted_max =3D mptcp_pm_get_add_addr_accept_max(msk); info->mptcpi_local_addr_max =3D --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4162D2D46B3 for ; Fri, 19 Sep 2025 09:08:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272920; cv=none; b=JYwCDEVTApGnF2sDbuSej0be2d7Ydx8AuaFH6nvIQqx17aQcrkHJ+qimRrdX99xp4fb7594+1iW0Qsuu4iVomFKewwF+RlWK9tnJQYlMuAyZRqdB82Uu1jKCQ5GN4MpJUc9T279pXN1X64W7XzbmIiqwvQFbtiGwFf0ZgL9uvgk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272920; c=relaxed/simple; bh=mKo1Ipw7skITpB7jn3vZ9tG6YfemJ3gVf+U7K+u/Gwc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bvc8UMw+Nf1IHst3JcMj/BtcEfLAeiBBQk5DHksp6nBgle/6lnT+6cBjTBC4sFppythFvM++JxFLIWTMaMnahD8pdy3DGOMUHr0Z2i9r6WU9KAR+hxDTT5rOqB5ev3S3AQz7ydGcFfgInidQ9+nggJqyKg8uMlOnp9ZxnTOzdyA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PqMbQioF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="PqMbQioF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A01BBC4CEFA; Fri, 19 Sep 2025 09:08:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272920; bh=mKo1Ipw7skITpB7jn3vZ9tG6YfemJ3gVf+U7K+u/Gwc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PqMbQioF7dnDDV54/VPT+kbFrrdYCKlQNdxc60BfzuO/GSVqkbf1g7Dzk01eyXzNI sGwGdQ4saVnyh2STdoEQfgnpmOhfm4TPJ7l+18TgGblT7HnCRN2vHwz6+d6PpC5119 xw7aGxQLCAptfBHPkLiNO1jTeVKar0ohR50fS3tYNmpkAYDmBCyJXoexasvsG7JHOi hSF9wEJWMZWuEKF+I8nYXuwilxTO/p1QRsRTb6REbDhbO+zpZF7/hhlRXMNx5txmLm BDD9ehLrI+i574+fvh+iseZU2PPFiwjnyo4rRR3D4reWGt3O1RqMGKeDxFi7d1zsx5 NQor1sCapb2VA== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:13 +0200 Subject: [PATCH mptcp-next v2 07/10] mptcp: pm: in-kernel: rename 'add_addr_accept_max' to 'limit_add_addr_accepted' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-7-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7837; i=matttbe@kernel.org; h=from:subject:message-id; bh=mKo1Ipw7skITpB7jn3vZ9tG6YfemJ3gVf+U7K+u/Gwc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyva8Prwv6rzbfv6uu/MKbqio1UYlbHFVCmktdjlwY FdBLPf9jlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgIkc92D4zb6qXe6q6m+br/f+ 27w31Xth03gs0v6l4+xJLX85dry/Z8PIMEstbeWr6c+uFP0+9MJ96rWsZ+u+9T+yOizHs3pR85S gCawA X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the in-kernel Path-Manager are confusing, and it would help current and future developers, to clarify them. One of them is 'add_addr_accept_max', which in fact represents the limit of ADD_ADDR that can be accepted: the limit set via 'ip mptcp limit add_addr_accepted X' for example. It is not linked to the maximum number of accepted ADD_ADDR. While at it, add an additional name for the corresponding variable in MPTCP INFO: mptcpi_limit_add_addr_accepted. Not to break the current uAPI, the new name is added as a 'define' pointing to the former name. This will then also help userspace devs. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- v2: avoid one line above 80 chars --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_kernel.c | 29 ++++++++++++++++------------- net/mptcp/protocol.h | 4 ++-- net/mptcp/sockopt.c | 4 ++-- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index 69fc20db1c2f731d5f93cfee4e58a23119ff7a97..1c275ce96b524cf1525b80967f2= 8b57a59c24a0f 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -50,6 +50,7 @@ struct mptcp_info { __u8 mptcpi_add_addr_signal_max; #define mptcpi_endp_signal_max mptcpi_add_addr_signal_max __u8 mptcpi_add_addr_accepted_max; + #define mptcpi_limit_add_addr_accepted mptcpi_add_addr_accepted_max __u32 mptcpi_flags; __u32 mptcpi_token; __u64 mptcpi_write_seq; diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 1c6d0a21c346da90f6bb85d9a281b606dcc576e1..43bb7bcf3de951fe148cc8dc1cd= 207f954e92562 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -21,7 +21,7 @@ struct pm_nl_pernet { unsigned int addrs; unsigned int stale_loss_cnt; unsigned int endp_signal_max; - unsigned int add_addr_accept_max; + unsigned int limit_add_addr_accepted; unsigned int local_addr_max; unsigned int limit_extra_subflows; unsigned int next_id; @@ -54,13 +54,13 @@ unsigned int mptcp_pm_get_endp_signal_max(const struct = mptcp_sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_endp_signal_max); =20 -unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk) +unsigned int mptcp_pm_get_limit_add_addr_accepted(const struct mptcp_sock = *msk) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); =20 - return READ_ONCE(pernet->add_addr_accept_max); + return READ_ONCE(pernet->limit_add_addr_accepted); } -EXPORT_SYMBOL_GPL(mptcp_pm_get_add_addr_accept_max); +EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_add_addr_accepted); =20 unsigned int mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *ms= k) { @@ -538,16 +538,16 @@ static void mptcp_pm_nl_add_addr_received(struct mptc= p_sock *msk) struct mptcp_pm_local locals[MPTCP_PM_ADDR_MAX]; struct sock *sk =3D (struct sock *)msk; unsigned int limit_extra_subflows; - unsigned int add_addr_accept_max; + unsigned int limit_add_addr_accepted; struct mptcp_addr_info remote; bool sf_created =3D false; int i, nr; =20 - add_addr_accept_max =3D mptcp_pm_get_add_addr_accept_max(msk); + limit_add_addr_accepted =3D mptcp_pm_get_limit_add_addr_accepted(msk); limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 pr_debug("accepted %d:%d remote family %d\n", - msk->pm.add_addr_accepted, add_addr_accept_max, + msk->pm.add_addr_accepted, limit_add_addr_accepted, msk->pm.remote.family); =20 remote =3D msk->pm.remote; @@ -578,7 +578,7 @@ static void mptcp_pm_nl_add_addr_received(struct mptcp_= sock *msk) /* add_addr_accepted is not decr for ID 0 */ if (remote.id) msk->pm.add_addr_accepted++; - if (msk->pm.add_addr_accepted >=3D add_addr_accept_max || + if (msk->pm.add_addr_accepted >=3D limit_add_addr_accepted || msk->pm.extra_subflows >=3D limit_extra_subflows) WRITE_ONCE(msk->pm.accept_addr, false); } @@ -587,10 +587,13 @@ static void mptcp_pm_nl_add_addr_received(struct mptc= p_sock *msk) void mptcp_pm_nl_rm_addr(struct mptcp_sock *msk, u8 rm_id) { if (rm_id && WARN_ON_ONCE(msk->pm.add_addr_accepted =3D=3D 0)) { + unsigned int limit_add_addr_accepted =3D + mptcp_pm_get_limit_add_addr_accepted(msk); + /* Note: if the subflow has been closed before, this * add_addr_accepted counter will not be decremented. */ - if (--msk->pm.add_addr_accepted < mptcp_pm_get_add_addr_accept_max(msk)) + if (--msk->pm.add_addr_accepted < limit_add_addr_accepted) WRITE_ONCE(msk->pm.accept_addr, true); } } @@ -1274,7 +1277,7 @@ int mptcp_pm_nl_set_limits_doit(struct sk_buff *skb, = struct genl_info *info) int ret; =20 spin_lock_bh(&pernet->lock); - rcv_addrs =3D pernet->add_addr_accept_max; + rcv_addrs =3D pernet->limit_add_addr_accepted; ret =3D parse_limit(info, MPTCP_PM_ATTR_RCV_ADD_ADDRS, &rcv_addrs); if (ret) goto unlock; @@ -1284,7 +1287,7 @@ int mptcp_pm_nl_set_limits_doit(struct sk_buff *skb, = struct genl_info *info) if (ret) goto unlock; =20 - WRITE_ONCE(pernet->add_addr_accept_max, rcv_addrs); + WRITE_ONCE(pernet->limit_add_addr_accepted, rcv_addrs); WRITE_ONCE(pernet->limit_extra_subflows, subflows); =20 unlock: @@ -1308,7 +1311,7 @@ int mptcp_pm_nl_get_limits_doit(struct sk_buff *skb, = struct genl_info *info) goto fail; =20 if (nla_put_u32(msg, MPTCP_PM_ATTR_RCV_ADD_ADDRS, - READ_ONCE(pernet->add_addr_accept_max))) + READ_ONCE(pernet->limit_add_addr_accepted))) goto fail; =20 if (nla_put_u32(msg, MPTCP_PM_ATTR_SUBFLOWS, @@ -1503,7 +1506,7 @@ static void mptcp_pm_kernel_init(struct mptcp_sock *m= sk) subflows_allowed) || !!mptcp_pm_get_endp_signal_max(msk)); WRITE_ONCE(pm->accept_addr, - !!mptcp_pm_get_add_addr_accept_max(msk) && + !!mptcp_pm_get_limit_add_addr_accepted(msk) && subflows_allowed); WRITE_ONCE(pm->accept_subflow, subflows_allowed); =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 31da0aa0f52443c16324dfe2a266252994bf656c..63c46a00c9d48c4e6d41753b5f0= 20f7cf39ffba0 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1178,7 +1178,7 @@ void __init mptcp_pm_nl_init(void); void mptcp_pm_worker(struct mptcp_sock *msk); void __mptcp_pm_kernel_worker(struct mptcp_sock *msk); unsigned int mptcp_pm_get_endp_signal_max(const struct mptcp_sock *msk); -unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk= ); +unsigned int mptcp_pm_get_limit_add_addr_accepted(const struct mptcp_sock = *msk); unsigned int mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *ms= k); unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk); =20 @@ -1200,7 +1200,7 @@ static inline bool mptcp_pm_add_addr_c_flag_case(stru= ct mptcp_sock *msk) { return READ_ONCE(msk->pm.remote_deny_join_id0) && msk->pm.local_addr_used =3D=3D 0 && - mptcp_pm_get_add_addr_accept_max(msk) =3D=3D 0 && + mptcp_pm_get_limit_add_addr_accepted(msk) =3D=3D 0 && msk->pm.extra_subflows < mptcp_pm_get_limit_extra_subflows(msk); } =20 diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 4688e0f25d15d9363b33bdcf3ad75c8295a810e3..5ab9909dbe799bed5c59d2b1b04= cc0e88e960574 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -976,8 +976,8 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) mptcp_pm_get_limit_extra_subflows(msk); info->mptcpi_endp_signal_max =3D mptcp_pm_get_endp_signal_max(msk); - info->mptcpi_add_addr_accepted_max =3D - mptcp_pm_get_add_addr_accept_max(msk); + info->mptcpi_limit_add_addr_accepted =3D + mptcp_pm_get_limit_add_addr_accepted(msk); info->mptcpi_local_addr_max =3D mptcp_pm_get_local_addr_max(msk); } --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 62E852D46B3 for ; Fri, 19 Sep 2025 09:08:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272921; cv=none; b=W4eTBi/SPhZh0okKm1IEtf3FBeQUJGuKjrnFaU1QJMTYu0v/rXJJGkirK9GuEpS84orHoAZloko+jeIoqG9jc4UDNDwXj5eot81QENs+KP2PkssoGFJ9xs+iokdMldM5je2iXkFJBnJLyz1MccTQTHjKrK8CXjtiDLnylQ3XF0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272921; c=relaxed/simple; bh=h3Auxbrp53OJeDDZnGwXjRjUyFtmG3S7/Y5YQ6SnjqE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=c21A9hYP9ByCwIh4YB7kA4/jsJ+XloWySiiBbb5k4i12h/IGMR/3l2efVz5fdvDN8C4JaWukLciLI7Qtsjcy0RUaO/W1tIxk9uRX+8r3LFpIHsZp2iJnvuyR1MAqqEEQ7aOzgtXIBAw/sTKH5avDb5MWYl55lYrbXktkkokl3MM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ORcj/LkO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ORcj/LkO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 813EFC4CEF7; Fri, 19 Sep 2025 09:08:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272921; bh=h3Auxbrp53OJeDDZnGwXjRjUyFtmG3S7/Y5YQ6SnjqE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ORcj/LkOzMtmL+WXoaH4g4d8VmXnWP5xzWYRSRm5DQGoFBKYstBUPGQE98gHh75gz FeslhYOHv/P/S8+nx0pStwazFxofG+IYrSk2pX9kWVUNUm8NQ9eRoZCjQo2vBKi3Fl hBdFc96CjL9zU5mUOi5T9MNSr7w5+SVena1JkZ6aovCdCld28nTfKt2I2oFB99gj+A 2tLb8PiJToHyNYnh7RZ8gDfqap0SSBHET5ICUGSqrRERn8DXBuJsSTdS62aRpK9IkW 7PyksNGJwlcGpZgHY4c2zw6VArUipsHE1lmCJpx7OfMl/GRUxCsD0kMN7f6od4t1MC gQeiNd//djJYw== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:14 +0200 Subject: [PATCH mptcp-next v2 08/10] mptcp: pm: in-kernel: rename 'local_addr_max' to 'endp_subflow_max' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-8-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8539; i=matttbe@kernel.org; h=from:subject:message-id; bh=h3Auxbrp53OJeDDZnGwXjRjUyFtmG3S7/Y5YQ6SnjqE=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyvZZWz8Ne1QUesAurj9bLn7/hriT57cue1fbeiKnr ZOtNGtaRykLgxgXg6yYIot0W2T+zOdVvCVefhYwc1iZQIYwcHEKwETOmDEy7O2Z+/J7nkqpds75 kyYGM2vnrePT9/7WOHNTQ/nZCy4vmRkZ2m6eYkt5tljlfw+vINNWhXP6czMMJBQ8ZnfznJjAVyH JCQA= X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the in-kernel Path-Manager are confusing, and it would help current and future developers, to clarify them. One of them is 'local_addr_max', which in fact represents the maximum number of 'subflow' endpoints that can be used to create new subflows, and not the number of local addresses that have been used to create subflows. While at it, add an additional name for the corresponding variable in MPTCP INFO: mptcpi_endp_subflow_max. Not to break the current uAPI, the new name is added as a 'define' pointing to the former name. This will then also help userspace devs. Also move the variable and function next to the other 'endp_X_max' ones. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_kernel.c | 42 +++++++++++++++++++++--------------------- net/mptcp/protocol.h | 2 +- net/mptcp/sockopt.c | 4 ++-- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/include/uapi/linux/mptcp.h b/include/uapi/linux/mptcp.h index 1c275ce96b524cf1525b80967f28b57a59c24a0f..5ec996977b3fa2351222e6d01b8= 14770b34348e9 100644 --- a/include/uapi/linux/mptcp.h +++ b/include/uapi/linux/mptcp.h @@ -58,6 +58,7 @@ struct mptcp_info { __u64 mptcpi_rcv_nxt; __u8 mptcpi_local_addr_used; __u8 mptcpi_local_addr_max; + #define mptcpi_endp_subflow_max mptcpi_local_addr_max __u8 mptcpi_csum_enabled; __u32 mptcpi_retransmits; __u64 mptcpi_bytes_retrans; diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 43bb7bcf3de951fe148cc8dc1cd207f954e92562..a4f7ea1f43f6c7e9de6a36b8428= 5d4dcc8731ca2 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -21,8 +21,8 @@ struct pm_nl_pernet { unsigned int addrs; unsigned int stale_loss_cnt; unsigned int endp_signal_max; + unsigned int endp_subflow_max; unsigned int limit_add_addr_accepted; - unsigned int local_addr_max; unsigned int limit_extra_subflows; unsigned int next_id; DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); @@ -54,6 +54,14 @@ unsigned int mptcp_pm_get_endp_signal_max(const struct m= ptcp_sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_endp_signal_max); =20 +unsigned int mptcp_pm_get_endp_subflow_max(const struct mptcp_sock *msk) +{ + struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); + + return READ_ONCE(pernet->endp_subflow_max); +} +EXPORT_SYMBOL_GPL(mptcp_pm_get_endp_subflow_max); + unsigned int mptcp_pm_get_limit_add_addr_accepted(const struct mptcp_sock = *msk) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); @@ -70,14 +78,6 @@ unsigned int mptcp_pm_get_limit_extra_subflows(const str= uct mptcp_sock *msk) } EXPORT_SYMBOL_GPL(mptcp_pm_get_limit_extra_subflows); =20 -unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk) -{ - struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); - - return READ_ONCE(pernet->local_addr_max); -} -EXPORT_SYMBOL_GPL(mptcp_pm_get_local_addr_max); - static bool lookup_subflow_by_daddr(const struct list_head *list, const struct mptcp_addr_info *daddr) { @@ -276,15 +276,15 @@ static void mptcp_pm_create_subflow_or_signal_addr(st= ruct mptcp_sock *msk) struct sock *sk =3D (struct sock *)msk; unsigned int limit_extra_subflows; bool signal_and_subflow =3D false; + unsigned int endp_subflow_max; unsigned int endp_signal_max; - unsigned int local_addr_max; struct pm_nl_pernet *pernet; struct mptcp_pm_local local; =20 pernet =3D pm_nl_get_pernet(sock_net(sk)); =20 endp_signal_max =3D mptcp_pm_get_endp_signal_max(msk); - local_addr_max =3D mptcp_pm_get_local_addr_max(msk); + endp_subflow_max =3D mptcp_pm_get_endp_subflow_max(msk); limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 /* do lazy endpoint usage accounting for the MPC subflows */ @@ -311,7 +311,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) } =20 pr_debug("local %d:%d signal %d:%d subflows %d:%d\n", - msk->pm.local_addr_used, local_addr_max, + msk->pm.local_addr_used, endp_subflow_max, msk->pm.add_addr_signaled, endp_signal_max, msk->pm.extra_subflows, limit_extra_subflows); =20 @@ -352,7 +352,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) =20 subflow: /* check if should create a new subflow */ - while (msk->pm.local_addr_used < local_addr_max && + while (msk->pm.local_addr_used < endp_subflow_max && msk->pm.extra_subflows < limit_extra_subflows) { struct mptcp_addr_info addrs[MPTCP_PM_ADDR_MAX]; bool fullmesh; @@ -449,7 +449,7 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, struct mptcp_addr_info *remote, struct mptcp_pm_local *locals) { - unsigned int local_addr_max =3D mptcp_pm_get_local_addr_max(msk); + unsigned int endp_subflow_max =3D mptcp_pm_get_endp_subflow_max(msk); struct pm_nl_pernet *pernet =3D pm_nl_get_pernet_from_msk(msk); struct sock *sk =3D (struct sock *)msk; unsigned int limit_extra_subflows; @@ -460,7 +460,7 @@ fill_local_addresses_vec_c_flag(struct mptcp_sock *msk, mptcp_local_address((struct sock_common *)msk, &mpc_addr); limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 - while (msk->pm.local_addr_used < local_addr_max) { + while (msk->pm.local_addr_used < endp_subflow_max) { local =3D &locals[i]; =20 if (!select_local_address(pernet, msk, local)) @@ -697,8 +697,8 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, WRITE_ONCE(pernet->endp_signal_max, addr_max + 1); } if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { - addr_max =3D pernet->local_addr_max; - WRITE_ONCE(pernet->local_addr_max, addr_max + 1); + addr_max =3D pernet->endp_subflow_max; + WRITE_ONCE(pernet->endp_subflow_max, addr_max + 1); } =20 pernet->addrs++; @@ -1097,8 +1097,8 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) WRITE_ONCE(pernet->endp_signal_max, addr_max - 1); } if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) { - addr_max =3D pernet->local_addr_max; - WRITE_ONCE(pernet->local_addr_max, addr_max - 1); + addr_max =3D pernet->endp_subflow_max; + WRITE_ONCE(pernet->endp_subflow_max, addr_max - 1); } =20 pernet->addrs--; @@ -1181,7 +1181,7 @@ static void __flush_addrs(struct list_head *list) static void __reset_counters(struct pm_nl_pernet *pernet) { WRITE_ONCE(pernet->endp_signal_max, 0); - WRITE_ONCE(pernet->local_addr_max, 0); + WRITE_ONCE(pernet->endp_subflow_max, 0); pernet->addrs =3D 0; } =20 @@ -1502,7 +1502,7 @@ static void mptcp_pm_kernel_init(struct mptcp_sock *m= sk) * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL */ WRITE_ONCE(pm->work_pending, - (!!mptcp_pm_get_local_addr_max(msk) && + (!!mptcp_pm_get_endp_subflow_max(msk) && subflows_allowed) || !!mptcp_pm_get_endp_signal_max(msk)); WRITE_ONCE(pm->accept_addr, diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 63c46a00c9d48c4e6d41753b5f020f7cf39ffba0..a65aedc84ef5db3d8fc489b39d8= 5ca56eb50e30e 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1178,9 +1178,9 @@ void __init mptcp_pm_nl_init(void); void mptcp_pm_worker(struct mptcp_sock *msk); void __mptcp_pm_kernel_worker(struct mptcp_sock *msk); unsigned int mptcp_pm_get_endp_signal_max(const struct mptcp_sock *msk); +unsigned int mptcp_pm_get_endp_subflow_max(const struct mptcp_sock *msk); unsigned int mptcp_pm_get_limit_add_addr_accepted(const struct mptcp_sock = *msk); unsigned int mptcp_pm_get_limit_extra_subflows(const struct mptcp_sock *ms= k); -unsigned int mptcp_pm_get_local_addr_max(const struct mptcp_sock *msk); =20 /* called under PM lock */ static inline void __mptcp_pm_close_subflow(struct mptcp_sock *msk) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index 5ab9909dbe799bed5c59d2b1b04cc0e88e960574..92a2a274262732a345b9ab185ef= d7da1f0a5773a 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -978,8 +978,8 @@ void mptcp_diag_fill_info(struct mptcp_sock *msk, struc= t mptcp_info *info) mptcp_pm_get_endp_signal_max(msk); info->mptcpi_limit_add_addr_accepted =3D mptcp_pm_get_limit_add_addr_accepted(msk); - info->mptcpi_local_addr_max =3D - mptcp_pm_get_local_addr_max(msk); + info->mptcpi_endp_subflow_max =3D + mptcp_pm_get_endp_subflow_max(msk); } =20 if (__mptcp_check_fallback(msk)) --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 597C01BEF7E for ; Fri, 19 Sep 2025 09:08:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272922; cv=none; b=DTal2WHMYpF+M0CPMrzGA3fzeW+o+qx8jybbNI90zoHmwdOvihoK4pPdtydfsC1IRK1oZd4o9d6XW+gAxq3hyTfs9bx2yaT3VLgAsioXZGx0PZtdcGHwuvJdxUO5wVBtDSPaKA7zfnM+oA655doRupA8ixBzEr9M933/7DAKV2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272922; c=relaxed/simple; bh=ZqeA7A96Rq/XQqHJc1YWfhwJ9DHJQ4TOD7MQ2yLDfmU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WEM2iffmrjxd+LKLwU4N+ah2IpcbUpmTulKq/ghz1ZxkpecRCpIOprADn1bdcwtLTvDJTTERry8AzboN+eZehSSR/QMh8rr6lHm4R8MmT2wRDjXFK7muQumeLyCtDHlnF3Aeq8aC44nGWLxLA6G2ZxVrt8SJlovrjHVCb4zxPZo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=FpsxrVxF; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="FpsxrVxF" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62516C4CEF0; Fri, 19 Sep 2025 09:08:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272921; bh=ZqeA7A96Rq/XQqHJc1YWfhwJ9DHJQ4TOD7MQ2yLDfmU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=FpsxrVxFbRsB6AMxurhb9FwnQOUAdPgiW1Jr7Xfn1ueXxEiERVDr0x5gbA1Y02fT2 +jO67GBAaRQR2XmuyDHBluFkwVzNkCdoDnwpfa1JBkWrYlJwFBO3Po0PN7JQr2InJk ZAxVVxR4ThuXzSRGxrOKS29RjQPE8onSyL0Zewkuv49bTXKBPyIlDZHdvy/J/2nbdo x3TISYX758Vv4uGgzNO1FWSutExhcl4r5IfG16fXpsILg1YzrtlF8Js7x8/ynXxw28 M3MbNj6fx2wMwk990PfAl9n/GlfKtKPDurlSVcEKWcYOiOIMU2FRNtmq0a+sI8LNoF 3vQaAWqYjNZ2A== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:15 +0200 Subject: [PATCH mptcp-next v2 09/10] mptcp: pm: in-kernel: rename 'local_addr_list' to 'endp_list' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-9-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4732; i=matttbe@kernel.org; h=from:subject:message-id; bh=ZqeA7A96Rq/XQqHJc1YWfhwJ9DHJQ4TOD7MQ2yLDfmU=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyvYbbDQqOe9tescwIpbr3YYfq/OEJRYkLijasWmXH XM8Z9+hjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgImwvWdkmJnyrTG8ZceH3dOf Bpi8i3nMZDh/pjXras+iT2Ydx1kWngaqENrLfmxF/Ql7y7X2c2br6v3ti9yhvNvlmk3SpGM/m02 4AQ== X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the in-kernel Path-Manager are confusing, and it would help current and future developers, to clarify them. One of them is 'local_addr_list', which in fact represents the list of endpoints, and not only the 'subflow' endpoints. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- net/mptcp/pm_kernel.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index a4f7ea1f43f6c7e9de6a36b84285d4dcc8731ca2..39ba27aa731ae10df4c34a387b6= c0e4c9c6d21cf 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -17,7 +17,7 @@ static int pm_nl_pernet_id; struct pm_nl_pernet { /* protects pernet updates */ spinlock_t lock; - struct list_head local_addr_list; + struct list_head endp_list; unsigned int addrs; unsigned int stale_loss_cnt; unsigned int endp_signal_max; @@ -110,7 +110,7 @@ select_local_address(const struct pm_nl_pernet *pernet, msk_owned_by_me(msk); =20 rcu_read_lock(); - list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { + list_for_each_entry_rcu(entry, &pernet->endp_list, list) { if (!(entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) continue; =20 @@ -141,7 +141,7 @@ select_signal_address(struct pm_nl_pernet *pernet, cons= t struct mptcp_sock *msk, * Note: removal from the local address list during the msk life-cycle * can lead to additional addresses not being announced. */ - list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { + list_for_each_entry_rcu(entry, &pernet->endp_list, list) { if (!test_bit(entry->addr.id, msk->pm.id_avail_bitmap)) continue; =20 @@ -250,7 +250,7 @@ __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsign= ed int id) { struct mptcp_pm_addr_entry *entry; =20 - list_for_each_entry_rcu(entry, &pernet->local_addr_list, list, + list_for_each_entry_rcu(entry, &pernet->endp_list, list, lockdep_is_held(&pernet->lock)) { if (entry->addr.id =3D=3D id) return entry; @@ -263,7 +263,7 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct= mptcp_addr_info *info) { struct mptcp_pm_addr_entry *entry; =20 - list_for_each_entry_rcu(entry, &pernet->local_addr_list, list, + list_for_each_entry_rcu(entry, &pernet->endp_list, list, lockdep_is_held(&pernet->lock)) { if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; @@ -413,7 +413,7 @@ fill_local_addresses_vec_fullmesh(struct mptcp_sock *ms= k, limit_extra_subflows =3D mptcp_pm_get_limit_extra_subflows(msk); =20 rcu_read_lock(); - list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { + list_for_each_entry_rcu(entry, &pernet->endp_list, list) { if (!(entry->flags & MPTCP_PM_ADDR_FLAG_FULLMESH)) continue; =20 @@ -641,7 +641,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, */ if (!address_use_port(entry)) entry->addr.port =3D 0; - list_for_each_entry(cur, &pernet->local_addr_list, list) { + list_for_each_entry(cur, &pernet->endp_list, list) { if (mptcp_addresses_equal(&cur->addr, &entry->addr, cur->addr.port || entry->addr.port)) { /* allow replacing the exiting endpoint only if such @@ -703,9 +703,9 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, =20 pernet->addrs++; if (!entry->addr.port) - list_add_tail_rcu(&entry->list, &pernet->local_addr_list); + list_add_tail_rcu(&entry->list, &pernet->endp_list); else - list_add_rcu(&entry->list, &pernet->local_addr_list); + list_add_rcu(&entry->list, &pernet->endp_list); ret =3D entry->addr.id; =20 out: @@ -1191,7 +1191,7 @@ int mptcp_pm_nl_flush_addrs_doit(struct sk_buff *skb,= struct genl_info *info) LIST_HEAD(free_list); =20 spin_lock_bh(&pernet->lock); - list_splice_init(&pernet->local_addr_list, &free_list); + list_splice_init(&pernet->endp_list, &free_list); __reset_counters(pernet); pernet->next_id =3D 1; bitmap_zero(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); @@ -1456,7 +1456,7 @@ static int __net_init pm_nl_init_net(struct net *net) { struct pm_nl_pernet *pernet =3D pm_nl_get_pernet(net); =20 - INIT_LIST_HEAD_RCU(&pernet->local_addr_list); + INIT_LIST_HEAD_RCU(&pernet->endp_list); =20 /* Cit. 2 subflows ought to be enough for anybody. */ pernet->limit_extra_subflows =3D 2; @@ -1482,7 +1482,7 @@ static void __net_exit pm_nl_exit_net(struct list_hea= d *net_list) * other modifiers, also netns core already waited for a * RCU grace period. */ - __flush_addrs(&pernet->local_addr_list); + __flush_addrs(&pernet->endp_list); } } =20 --=20 2.51.0 From nobody Sat Oct 11 06:03:20 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 156D61BEF7E for ; Fri, 19 Sep 2025 09:08:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272923; cv=none; b=LcI5ykXeRrUfN10t6UXp1FG494NjikpMAubT7/IBoGud04foB65DHL8XCArNfWMWmpUH71j+3d13aGcwrgoQGZjfp6nkpJr8ptt65HLraBeQqQkfMgYPHXMh3CnC1TGEwTPySsOWDfDoDSzw01IKdidhPOAPmsgtFKtH5Tw64OY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758272923; c=relaxed/simple; bh=KV75xVydMFyk2Mxuo9jx8uE6XJVdUgHR8JvaGbbOoos=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=V8C6T32GqQfvTiJ7qX2bMgrpvF5k0oM+Pqbq/wzTJZ/VoMcLDuSx62z9yHEYYJ5Ui1+IzVzqL0ObgMwZ91Rrge4U6StLAqghcqn8naJWTfsfZ6fpKuFARCwcQrlz4Q60eNL1TkoUmWvsjQNMyYUf2wS9TiqOC9FJkxi5ZMo/ZI8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OdIkL4hG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="OdIkL4hG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 433DFC4CEF7; Fri, 19 Sep 2025 09:08:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758272922; bh=KV75xVydMFyk2Mxuo9jx8uE6XJVdUgHR8JvaGbbOoos=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=OdIkL4hG9PngYTDGdRQ+sdITOiS0yPsF32Ml6rqMX7M8VZpcw2feC9lJdYepMS+WA j9wJxQAGDn2UYSHazT67hnm+5QG/xWUTkDw+j9FNb1Y8TMpO2bhoSvSAVW9t7BUn2r rJetAymfrQJ92NEbcPnWBGhzqmx8OUsRUOlNn876N4Nu73Lj3D22F4b2sjJ3Cg0zAu Tqj/0Eu5MKQufkr4cOBvYmidyRhC+3aYRMgXtsWC/Mqz9Q/BIz8I1ee31/o1zf6qGX T2xuHhGEpMbuJpeGUcyG671ftroyeSGNiilykZHQESwGuUk3qBlEobr5OwtXP4V/0l 8I5EgNqSt90Tg== From: "Matthieu Baerts (NGI0)" Date: Fri, 19 Sep 2025 11:08:16 +0200 Subject: [PATCH mptcp-next v2 10/10] mptcp: pm: in-kernel: rename 'addrs' to 'endpoints' Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250919-pm-kern-endp-add_addr-v2-10-1f8f04f01914@kernel.org> References: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> In-Reply-To: <20250919-pm-kern-endp-add_addr-v2-0-1f8f04f01914@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2454; i=matttbe@kernel.org; h=from:subject:message-id; bh=KV75xVydMFyk2Mxuo9jx8uE6XJVdUgHR8JvaGbbOoos=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOyk64pN8ZJJ06P9PlTvG9J+FrOm8e+rBS+NLtGYm6c yOuabLu7ihlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZhI40JGhoMn/F5efDMp/KCq w4lZUvdtrrFu4c07XiwvF+w47TJXqyAjw3HXM1rPYxd8q+iyeLw8dsLcysAb//u1uOoPGgUKLVs TwA8A X-Developer-Key: i=matttbe@kernel.org; a=openpgp; fpr=E8CB85F76877057A6E27F77AF6B7824F4269A073 A few variables linked to the in-kernel Path-Manager are confusing, and it would help current and future developers, to clarify them. One of them is 'addrs', which in fact represents the number of declared endpoints, and not only the 'signal' endpoints. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) Reviewed-by: Geliang Tang --- net/mptcp/pm_kernel.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 39ba27aa731ae10df4c34a387b6c0e4c9c6d21cf..e84c381aa3a4e2ad8a05e4b0daa= 7a5e8daf2c35b 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -18,7 +18,7 @@ struct pm_nl_pernet { /* protects pernet updates */ spinlock_t lock; struct list_head endp_list; - unsigned int addrs; + unsigned int endpoints; unsigned int stale_loss_cnt; unsigned int endp_signal_max; unsigned int endp_subflow_max; @@ -627,7 +627,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, */ if (pernet->next_id =3D=3D MPTCP_PM_MAX_ADDR_ID) pernet->next_id =3D 1; - if (pernet->addrs >=3D MPTCP_PM_ADDR_MAX) { + if (pernet->endpoints >=3D MPTCP_PM_ADDR_MAX) { ret =3D -ERANGE; goto out; } @@ -666,7 +666,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, goto out; } =20 - pernet->addrs--; + pernet->endpoints--; entry->addr.id =3D cur->addr.id; list_del_rcu(&cur->list); del_entry =3D cur; @@ -701,7 +701,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, WRITE_ONCE(pernet->endp_subflow_max, addr_max + 1); } =20 - pernet->addrs++; + pernet->endpoints++; if (!entry->addr.port) list_add_tail_rcu(&entry->list, &pernet->endp_list); else @@ -1101,7 +1101,7 @@ int mptcp_pm_nl_del_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) WRITE_ONCE(pernet->endp_subflow_max, addr_max - 1); } =20 - pernet->addrs--; + pernet->endpoints--; list_del_rcu(&entry->list); __clear_bit(entry->addr.id, pernet->id_bitmap); spin_unlock_bh(&pernet->lock); @@ -1182,7 +1182,7 @@ static void __reset_counters(struct pm_nl_pernet *per= net) { WRITE_ONCE(pernet->endp_signal_max, 0); WRITE_ONCE(pernet->endp_subflow_max, 0); - pernet->addrs =3D 0; + pernet->endpoints =3D 0; } =20 int mptcp_pm_nl_flush_addrs_doit(struct sk_buff *skb, struct genl_info *in= fo) --=20 2.51.0