From nobody Sat Oct 11 05:56: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 6BAF11EDA26 for ; Thu, 18 Sep 2025 17:42:44 +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=1758217364; cv=none; b=Wid+CCZOy6mBDkOnhoxcnXWivqGB5/DV7uojd8BvgGkmc1aMRLsG+vdtkPFVVfoB/nddtN6i3E/6OzJ8ND2bvWPlGeoWc9cZg8UpML5H7I1wwBKj8fq2iqaiRUYXipQggqvbZkijEFN+JpzShQRIADpnxYYRdr+RoOh4LTjWMTQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217364; c=relaxed/simple; bh=IO0imr0lXPu+AMjv/YgEapArURTSl0U9KERqY4WfOeM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZznPCX2KksVMAn8d78Gzs9DqLbWfJXoNP5bDfGkgDB85eNBRh1A9JILj2FM76NpoZBBmvIqJgHAuOdU5RFcbtXlz4ZNHv820XUIPEFURUwdwPpnrWsiWU79H4pkZNXQzFNr3bulmhR/BSW9mZJQCwS6n24hqC8Dh8rjOj+yrzOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PMSLON0s; 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="PMSLON0s" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70465C4CEF0; Thu, 18 Sep 2025 17:42:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217363; bh=IO0imr0lXPu+AMjv/YgEapArURTSl0U9KERqY4WfOeM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PMSLON0slakBFFPBFVOtEtagJ7VMQ3/ZjeSaDUKsAAH4h8rGMFpa/wAWO5ukq/jQO V3NolRc76KxAaNoNBaDicD0g5Xkqk/iAGOdLB4DnZ+k21XzrAdwhZfvVv78ySwr6uU CbosF83biLOrCn8sCDvE3ceCCktuPVug4NU6vXmQ/WEv1a2smK8eCSYt+aRSa2uV+R 8D1uywR72DMF4XhFb5cCQSTHuD/XEVQt7J1atovhdepHsEngNTutb86QzPKyMNyTnE 2DfmZ31MxZ7Nv4nf7kJ2LzChkND0hv2XHwMJJTZNAEwhjfhOsIsAHXDub84yYp19gw /HtfMFfYB4v3Q== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:17 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-1-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=920; i=matttbe@kernel.org; h=from:subject:message-id; bh=IO0imr0lXPu+AMjv/YgEapArURTSl0U9KERqY4WfOeM=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuLSt8Nxw/0vAnT+s/1+w3/iSUH98A8eWwEknOs5f0 u+7X9/G3VHKwiDGxSArpsgi3RaZP/N5FW+Jl58FzBxWJpAhDFycAjAR+22MDBd5JI3+MauJbbq/ 7MwJ5WOH3My5eTfcYTK3cNkuWBdtwsfIcHi9X4vEnogJR0P/XryltVtL6lHcxk8+k1k4T99fzPr 8MgcA 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. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_kernel.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 --=20 2.51.0 From nobody Sat Oct 11 05:56: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 365D221FF3F for ; Thu, 18 Sep 2025 17:42:44 +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=1758217365; cv=none; b=rxHzu+011nEntulvmvcRoKe9KUIhOcuNFYLH4hPH0mL+0agE1uyALZ3P3p5xv8kFCXWGO9JYbzYxyKM8EtN98RCYbj0onAe+U4N/Fg+mLxHsFK6iiW18Qq6drpAQFGtpKLfJcBLSC4InOrNWVSWxRGGifvbFhdSI3kZHy7O7JHA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217365; c=relaxed/simple; bh=O6JCHoODZlgZU+9IqAqR2XDdhlzpoBQ4m+mgbv+5kG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WNjsJ9apOfAWEnsolXpm5oj39IIh7jS3tNovOg05zVH77GLn9XUHPBFcIA32SuTiG0zwrrpOxmhJMPEgXQuXAnxGN0r9h+htlqtZMCQbxQiJGIqHW6QbHjOUapkIUfb+edPyyvsAhF/IjnfRKuRaBmJGr6PHt4CD68zFarcHwE4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UHWA/jXd; 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="UHWA/jXd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4B8BEC4CEE7; Thu, 18 Sep 2025 17:42:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217364; bh=O6JCHoODZlgZU+9IqAqR2XDdhlzpoBQ4m+mgbv+5kG8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UHWA/jXdrAWrkr2kjQrQ27R7xGpjx4GMepXxPcX49TKtk3T4JY7bAg2A6Hoa8V/sh gRn5UWMskpsKLDEAS1p4j/IbRbaYl9mo9gHp+s9c82lYwLJfEdDQQtTSfjdS4Q6nqY 9kBwNow76nENMRAquW9j10lz4TOVEw4lioa5j8pgE+a4+olhwHWf89uXwiBKwHvqvA 0hlzzLaIJa4BH/ZwW1itq104wVKhsskDjbYT5PpB3emtpadv2GCGSY185skwlhdIo7 t3aVRGJkEcMGfhx/tdjAr6P+YnO0JISl/yoXT6PoGP+dawBjeZX91j5J8fL2WL2EuT 6McU/n7xbdHTw== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:18 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-2-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7626; i=matttbe@kernel.org; h=from:subject:message-id; bh=O6JCHoODZlgZU+9IqAqR2XDdhlzpoBQ4m+mgbv+5kG8=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuLQfFZ0zs7+La7o01+XCjPY183qt/N7t+bqw+9wnP a0gs7SlHaUsDGJcDLJiiizSbZH5M59X8ZZ4+VnAzGFlAhnCwMUpABOZt4CR4UTF4XoHUa05faFm K7vlut9XM+iKZz+9MylrveUTJo1jUYwMu82SLDbEXzlnEupWL7cjdvOba4vWT5ibf3br1TNvt9y 8xA4A 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. To remove one level of indentation, msk->pm.subflows >=3D subflows_max is now checked upfront. No functional changes intended. Signed-off-by: Matthieu Baerts (NGI0) --- net/mptcp/pm_kernel.c | 182 ++++++++++++++++++++++++++++++----------------= ---- net/mptcp/protocol.h | 3 +- 2 files changed, 110 insertions(+), 75 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) 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 05:56: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 17C0821FF3F for ; Thu, 18 Sep 2025 17:42:45 +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=1758217366; cv=none; b=IH8xXs67q9e4aNPC4/cxvOqdEYaAc+ynizq4RnD3fLqm+81Kg9t257jzWcs8Irvx21uit2B/wbtiaCYo8KYIT1tj08x47JOmyS/OLQcgiWzPdycfGp57T0bENl33xbbrAhHxMDgvkJf/8DVZuNyBzCcgkAk776zYiSY/a5GS0lQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217366; c=relaxed/simple; bh=cbCG/1K5OzTY7xPIDqad/m51Ubh1XZYoWsFCaY4XB9o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=i8WDbJvSdr56/JTvd+p/HEolioWcuXXx3+iuo2RxakypVqTMQnf++QQ6qKuerYx6bHbICKXHjZRVvFlxnlT7Luz6rJEJDUEipyoCjtQSZlIz49riyjoy2XUlMqD6MzjOw3u/lJy8TajYgzFKK1DvgmjH1Xc8vGke1nbahEu4OkE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ds0Oq6Xt; 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="ds0Oq6Xt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26FCCC4CEF0; Thu, 18 Sep 2025 17:42:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217365; bh=cbCG/1K5OzTY7xPIDqad/m51Ubh1XZYoWsFCaY4XB9o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ds0Oq6XtFJAsf1cSJlVB1FkfF5qpmvjkJzlcSr2ZURnZzixhV6ofrcGetTiYlQFcb nKJFnQ12H030RCJgkoQr+HeHebNtBjIH4kdCdgo74l11vs+uP3HDL4e0JBZl3dg4d1 Pyxfi7lM2s9lw2uXEGrlVgvs2tYCCQFqQo+TsDgoSrEOO+IY4ETHSCTX2DbkGDuyDN Ajt2w/QNOKLyO9okUYlqtklJcXO0XKFSYiD/4fZT9rlLDvbONDmclSKi6vPRfGombt sjsdoo8KzYQOPBSh5fpbZMvqqVI7bBGZkrhsGXxbMrxNaMDU7PGJtSQpBfo+9PbVVR Jv5eI2astc+Ag== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:19 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-3-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5141; i=matttbe@kernel.org; h=from:subject:message-id; bh=cbCG/1K5OzTY7xPIDqad/m51Ubh1XZYoWsFCaY4XB9o=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuHSEW3mZ/ZTn0F+967P7rY0rTlstmykm+O/Ho6caR ++cqBP27ihlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZjIpCRGht3sHan5V/7NX1V7 joHr9ub/Ob3zuPmbJtkGr5/SMFv97iNGho6OrNYls+4/nXv/IV9ce7v7Wo6t8Zs3Tnd7kcSbULi nnA8A 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) --- net/mptcp/pm_kernel.c | 112 ++++++++++++++++++++++++++++------------------= ---- 1 file changed, 63 insertions(+), 49 deletions(-) diff --git a/net/mptcp/pm_kernel.c b/net/mptcp/pm_kernel.c index 5bdcfcc26308841c49375ce35205097f30592279..8d5df9b98589e5cd69f16dc54e9= 140e88a1835e2 100644 --- a/net/mptcp/pm_kernel.c +++ b/net/mptcp/pm_kernel.c @@ -159,74 +159,88 @@ 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 sock *sk =3D (struct sock *)msk; + struct mptcp_addr_info remote =3D { 0 }; + + 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) +{ + if (fullmesh) + return fill_remote_addresses_fullmesh(msk, local, addrs); + + return fill_remote_addr(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 05:56: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 E367321FF3F for ; Thu, 18 Sep 2025 17:42:46 +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=1758217367; cv=none; b=QumHgmYyHLpcRVRPp/SDVkhv26IPSwsJtNpe02YO/+A6CQOXSSxgANi3R8VcMEOeUV1QLhnfFXDJtHnaBc4OGlfslSB0oQjbCxpUrGKXFs7hx66Gtk8N19KMzNRnA9sWiqFwkg+syqoPV3YbhDi4JLkIKpYiVGHhjAu9FI6TuVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217367; c=relaxed/simple; bh=Md4AcybOrU7HH6m1PiMXZeD7csP/jwF0E7sWrjnF/UI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=usRrpkVZmdl5pp+18BP4BZkunDfZiR4mXWkrZdfc79/wqb023VWl3AgI0OR6lsXLYXXWBv1bcgKcM4w4j+WtTFs4zYw+1uJ2uXUHcxwistWsBcxQXmdKKhKXOmpmvLU6+nwHDmnNj0DXle9rNLAcysrbv5B+PqQ2b1Tb3NZqYZ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Q5cOP6Gh; 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="Q5cOP6Gh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 02492C4CEE7; Thu, 18 Sep 2025 17:42:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217366; bh=Md4AcybOrU7HH6m1PiMXZeD7csP/jwF0E7sWrjnF/UI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Q5cOP6GhhI1bEmpWKh6soVd+nw3pvmQZ03ldmwEnAwfsH86bWELmiFBCEy9tozVmE 4tHOtNVb1So1smQbCmoRaHo4JRTgj3BXYyhqbroe3NsAL3/0NFsCC/EEB3lwQl1DTo vXQ45E44rkmbyeRpgjiBKJv0CQiWbHPbIzXpq3LrCWglukwPPjyp8r7yT3of6VBMfU gSWhnB2j7h7BYx80v61Z2940zpcwGpyHYuwKn/aX+g6Y24nNdg/2FdnZDA0BOtIKVi tljNXAVB8GC3Wb37q94p6yZREsb5KiS3nai1alFfDbvDKW//RfHTZuu58GEHBsEEAk mA24aonCtUy+Q== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:20 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-4-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=10017; i=matttbe@kernel.org; h=from:subject:message-id; bh=Md4AcybOrU7HH6m1PiMXZeD7csP/jwF0E7sWrjnF/UI=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuHRJ5y8y1spZy3guzOf95N32HzdEaQbtbtFYsedrw A5nWwWljlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgIl8VmH4p6Juv/XmjuI9q/vd zY253sh7Tljdk/SmPnBlRtFM9r63wYwMb0//XLHjoMOCHuvmB5KPNnj+FNPq0rSesza7J6ky9/J GTgA= 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) --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm.c | 10 +++++----- 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, 25 insertions(+), 24 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..2e0b7509b8a91cba14f656480f4= 25e0f7241890e 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,7 +498,7 @@ 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, + pr_debug("msk=3D%p subflows=3D%d max=3D%d allow=3D%d\n", msk, pm->extra_s= ubflows, subflows_max, READ_ONCE(pm->accept_subflow)); =20 /* try to avoid acquiring the lock below */ @@ -507,8 +507,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 +594,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 8d5df9b98589e5cd69f16dc54e9140e88a1835e2..6439f877f334083d86c85d3c19c= aebba8da7902c 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 @@ -309,7 +309,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) { @@ -349,7 +349,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; @@ -428,10 +428,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(); @@ -470,10 +470,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 @@ -497,7 +497,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; } @@ -573,7 +573,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); } } @@ -1415,7 +1415,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 05:56: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 BC723302770 for ; Thu, 18 Sep 2025 17:42:47 +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=1758217367; cv=none; b=BbDsPR70vuVluTZZS1t1sxDSiVzBQkF+525gwDgpMk+y3JoEYyueKfmy3fWMXbU/hSLkhzVN+hCGU0aZaFs0dPVu2fPwzyRMH6K8jdfV4vXJ+wV4WasfjiqVbNFcdfQkpH1EWPEgJzJPSnCSsY4eQ3NGMXt/f6rg9trNDmHmVm8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217367; c=relaxed/simple; bh=K7Y2tHH1QdiWTJIMeRn3LNuEAmQjWNDw6PGQh+nNJeQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QgZEnObanb1FtS/uxqNfjlB54XDTtq6dgK/Ior6vCkx5awdMTxVSc/Wcm/Ca+T02Ww1XMSVDxrxr0hwKXi5v5BU1vutUQtg5om/gEY0vniQ5CR/Qyu/OGe+bWpbMKhpHXtQX1Un61A3G75wIdnfqFIWm7ZsSOF+DIRtT1NVyOVo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pLIrZqN2; 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="pLIrZqN2" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D1870C4CEF1; Thu, 18 Sep 2025 17:42:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217367; bh=K7Y2tHH1QdiWTJIMeRn3LNuEAmQjWNDw6PGQh+nNJeQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pLIrZqN2FJmO7FCVEmfaaDyw9ntwDb1ntb8Pvic2tjPVgOhYnA7xJT2KwO2hE95qM Khw1i2fVwtHaYWO+d0kHpUTjr/NjBswbD/tiklOlZ0EHo7IhAsonVqxIuSsjz982F1 aLWcp4brULtIA8qkLHRgODs93tSnL+ZoVJb4d1yQDOsuNpNs7KIH4dAVeKEzsNDj3d gT9NQWGaRGK02cM+06AP9cjENUHz2QLJv7CIrg+tLfLkK4cg+0FX5ZgfVTocv+mYRE Colb29OKDwHzabVBg0oZoWvm+4t6sq7VYBWY98cCtQgs6QRUmLlssTjD2zG0uHnbfP oQJ/D6V2F3S8g== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:21 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-5-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=13748; i=matttbe@kernel.org; h=from:subject:message-id; bh=K7Y2tHH1QdiWTJIMeRn3LNuEAmQjWNDw6PGQh+nNJeQ=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuHRz3JCwyVJunOPvfEq4v32p9BX5/AWKNvf1ZCfPe lrXpcDTUcrCIMbFICumyCLdFpk/83kVb4mXnwXMHFYmkCEMXJwCMBHbd4wMG2Zyz7yl1JnwdlLj viu6h+0OXZaW7+14pDX36UkHGw/FTIb/pVf2fouK3c1/41nUHmM3hW8GtnXzw5MPiq6unPPl1VJ rLgA= 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) --- 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 2e0b7509b8a91cba14f656480f425e0f7241890e..ea40f31f17ba0d6c82db250d17f= 5a051ce6fabfa 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_s= ubflows, - subflows_max, READ_ONCE(pm->accept_subflow)); + limit_extra_subflows, READ_ONCE(pm->accept_subflow)); =20 /* try to avoid acquiring the lock below */ if (!READ_ONCE(pm->accept_subflow)) @@ -507,8 +507,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 6439f877f334083d86c85d3c19caebba8da7902c..e61d417da2154809ad83da5a1b8= eede1216a2b5a 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 @@ -270,18 +270,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) { @@ -309,7 +309,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) { @@ -349,7 +349,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; @@ -398,14 +398,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) { @@ -431,7 +432,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(); @@ -446,13 +447,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]; @@ -473,7 +475,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 @@ -531,14 +533,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, @@ -573,7 +575,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); } } @@ -1273,13 +1275,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); @@ -1306,7 +1308,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); @@ -1415,7 +1417,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); @@ -1450,7 +1452,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); @@ -1486,7 +1488,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 05:56: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 552E22FF167 for ; Thu, 18 Sep 2025 17:42:48 +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=1758217368; cv=none; b=Glfr1AErqqQU13fnZgi40bxLyyOOhCPHjsm01hEYrtCdsT7aGs2M9YPavj+AeQsRuaOPDNZnKAggC6YIKWXfjMgFOBNS/s6cvhqHZqciVreFxDB7MWTcicx603H7yh0IXaHlkoMvzvbP5ugVvNT2YQg4t8WRm6V2E4tFi/KL0OI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217368; c=relaxed/simple; bh=o7yRTrAyyRKFeBWMuzmL5+OpCH6sBT7WZih6K07HQWA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T+B64EWFFubRRofZ7LxqyM67H09obLmYWJli+AbX7+m+GfVQ4Op/8cSujuYYFzlNAniMRjNxDPxyHhHoeDc6StYXV1B1sU06hu1Off02qyWeWzFvbHp/+dZC7bKWuhpq0Ss9+maFM0/SEOJB9ODjocQTRf2WFjcDMHlXVTutV5I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RbCsUlTc; 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="RbCsUlTc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ACD58C4CEE7; Thu, 18 Sep 2025 17:42:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217368; bh=o7yRTrAyyRKFeBWMuzmL5+OpCH6sBT7WZih6K07HQWA=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RbCsUlTcT9dTctSmnJFBHb4lGcMHNrqqvU0slVzT9oZhcSZz8YiKHadkvwZ8g7GAP XRHN/cgBflwWbv8c5lJPDCcQ/p9drnC7xU6OPCA0S/VDOL7n/zkxpe45iveyt4xLcf 0d0I937DCpHFIcIWGde0ITlb6dpry8tyJ6nz0Yn71xo5/DwrUz7a59sK/1/TG3tHsV 6EFe6X2wwAWyuoW2whZ31+hoqK+2j3FMHFtrFshFyL3J12lq445Tk4wI8nVCjJpL// pQqlAJrSC/9aq9y0nfdxFJbK0GcmBIfuUOVj3g1lk57c1FAslS/pcTxgyJ05Ifaa9S 38X6omv3lRHCg== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:22 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-6-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@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=o7yRTrAyyRKFeBWMuzmL5+OpCH6sBT7WZih6K07HQWA=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuPQ4ztX0lmZ7+I2J/3bXPhHFlCPyR78scDgyqbPsJ ZPy48TEjlIWBjEuBlkxRRbptsj8mc+reEu8/Cxg5rAygQxh4OIUgIkEn2b4n6f48bPkBA82jk2O bwIv6O69/XKX4CXGfUv+CW/crL58ZhjD/8j/ZYuK20xYLsVcVHD8ZHWHX6ai98adzdGbG07W7Ld z4wUA 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) --- 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 e61d417da2154809ad83da5a1b8eede1216a2b5a..eb046d4b0d72ffe20a56a07781a= 8862b389c93bf 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) { @@ -271,15 +271,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 @@ -308,11 +308,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 @@ -686,8 +686,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; @@ -1086,8 +1086,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; @@ -1173,7 +1173,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; } @@ -1497,7 +1497,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 05:56: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 6710A21FF3F for ; Thu, 18 Sep 2025 17:42:49 +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=1758217369; cv=none; b=gfH/AR2Jd5p2CsWqLpptx4VAwo5aTbJGSeD9YMzA83zdsPSE/GRKeEiaAaJOTiAnftzgNZhhMgeusanuP6/+cu85r8b+c5AUG+Zx2h+C3WwJw6FuU/uXuObnMDJ2fbHTFdgCVA4o8aN0QrTZx+Cdi13GqwivMSQoNxCZmb5e8bw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217369; c=relaxed/simple; bh=jxRRANn4Qwl166UwwFtoMrDgbF8sMoelM8UuOCJaGOc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NORJyae27R6SsFieYHYbt5+AzTALIzpinl1lYNbvv/8lwrKYvw6E3iYAJWbKkQpO50MpExXICzLapI1U1ZD7jvJ5UAJ1Kt0KMUKvt+uHJTpKOBE9zjJnS8eSKyYSIeymdcoqAMx3vR2lZ2iQRLvFs0m7/P+hhv+tXrhRw+75p3M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gmxMiHbR; 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="gmxMiHbR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 87862C4CEE7; Thu, 18 Sep 2025 17:42:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217369; bh=jxRRANn4Qwl166UwwFtoMrDgbF8sMoelM8UuOCJaGOc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gmxMiHbRVNRYUYOEICUTgHPllrRySmp9MLdCCP2B+5Gn9p/ELhS+AYoc7qmdNlbjj vMBuGcajUJirmhVc/BF+CD6METk9JqrRUaiVhbkUASgRca9t0X7lcnoPJpJvbT/GvV oTFhsme0u9FNX0Ff/2PF2wfK3BhY+FSQDnpg85plTzRq8Q6t4ZbBCutgUlk0k3KMDz RVvfMEjhbPNk3NyYrx9iMO63+gAX8bgNI2zRk0NGkkgWTqSy0zPW071dmxwrIWomfX C54XznWXez2+GkR3nOZaz0j1/5DzUEc6cfY8wqRvn+/5Bx1kGYjqqz9/ewJxsrHFIr V05gySwpSqhgg== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:23 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-7-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> To: MPTCP Upstream Cc: "Matthieu Baerts (NGI0)" X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7580; i=matttbe@kernel.org; h=from:subject:message-id; bh=jxRRANn4Qwl166UwwFtoMrDgbF8sMoelM8UuOCJaGOc=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuPQVVgfttp1c0jepUnNNzJKYSx+i+q8kLHr2keuN+ PeLcgk3O0pZGMS4GGTFFFmk2yLzZz6v4i3x8rOAmcPKBDKEgYtTACYip8vIsEHg7v9FT30Zdnze LPVOmcEmN4i7t4x1oiTvmRj5/F135jH8j5a//v33wscVaiWV76YkCt7g7it8arZq4SG1lfOuTQ9 8xwIA 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) --- include/uapi/linux/mptcp.h | 1 + net/mptcp/pm_kernel.c | 26 +++++++++++++------------- net/mptcp/protocol.h | 4 ++-- 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 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 eb046d4b0d72ffe20a56a07781a8862b389c93bf..fbe7a0a930b23a5aaaba9420ccb= 4c914695675a4 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) { @@ -534,16 +534,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; @@ -574,7 +574,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); } @@ -586,7 +586,7 @@ void mptcp_pm_nl_rm_addr(struct mptcp_sock *msk, u8 rm_= id) /* 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 < mptcp_pm_get_limit_add_addr_accepted(m= sk)) WRITE_ONCE(msk->pm.accept_addr, true); } } @@ -1270,7 +1270,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; @@ -1280,7 +1280,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: @@ -1304,7 +1304,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, @@ -1499,7 +1499,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 05:56: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 006C52F5495 for ; Thu, 18 Sep 2025 17:42:49 +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=1758217370; cv=none; b=VHLdFq7TVlDVeZVhkrHrsO6O7mHavEHc7F8C9ldNwQSX6zv1fMFzenlPAfDd5WhsRpXq1CGAqy9P0fcGC2HvDRgpacQXjTk0jtO+sEB27dAbBMA/EAH98FJLFTzpY7rGaXr0c2LcjKh3HmHdD7Ah0EnIFmyKS1aJjQu/jctcQUQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217370; c=relaxed/simple; bh=8DSVpJBqnwkTzgyLiRbfNeIeiH4x3RCvbvVZUMv6Yj4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RjvLsHPWDkdT9bSppFs3VaWoudvqarICT2WcV2MQKXLXpPtREB2gLpR3NpT9jmhJ15gW5lol6t7S7/bcaud1JTb/yi7WNy67TCleT+5MTPkgCZT5eb9LXog7q/zj1r6OM03rkMEVD/VgL0jnbz4AwMqmMiIpvKOMZdEhRvqqwaU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Iqv7PgEV; 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="Iqv7PgEV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62E65C4CEF1; Thu, 18 Sep 2025 17:42:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217369; bh=8DSVpJBqnwkTzgyLiRbfNeIeiH4x3RCvbvVZUMv6Yj4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Iqv7PgEVnQYvqrSUemy7XflQzFBSsCMibjucdrUrQWnESKn1JEyEoFK8DqThwBB1s y+nbzQhUT8nee3AuGKv9o1jp77d0EdBpdjTi+UcAIFgJnuejRGmqWKo5ENMc7QFDLx W/Y82YB/boBHj9bmVywolr9Enj7Z+z+RDFIFzhiSfgms98BZPVtEzhXHF36GihNYtm FNlZFDZbeYqDeWxQquSue0BKNWVYpEbaCCtDujFluZSiUpFmmvEQgClDaafCN2Doa6 dasKqLACC+EIbtZ1qPUmm0KV52453yapFBxj5Nznx31ub491YhoweC4b32WeUnt5UC 1PeBtU/905zpA== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:24 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-8-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@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=8DSVpJBqnwkTzgyLiRbfNeIeiH4x3RCvbvVZUMv6Yj4=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuPT7z0nZz7j060u2d5NCnGoKfm0/6rj2gmu4w95Dl w83xzTN6ShlYRDjYpAVU2SRbovMn/m8irfEy88CZg4rE8gQBi5OAZhIYTHD/4DLF52XbYxadyG1 smbdsVvnp6l9Wd7wTuXDerYs1gmbZrsx/PftFrD6kvp5aue7H/asPOcrDG5se9W9I1Ui++2JV2F +yWwA 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) --- 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 fbe7a0a930b23a5aaaba9420ccb4c914695675a4..e65449a1395270d46ee550a0814= c94525586b4b4 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) { @@ -272,15 +272,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 */ @@ -307,7 +307,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 @@ -348,7 +348,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; @@ -445,7 +445,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; @@ -456,7 +456,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)) @@ -690,8 +690,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++; @@ -1090,8 +1090,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--; @@ -1174,7 +1174,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 @@ -1495,7 +1495,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 05:56:21 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 27C8C215077 for ; Thu, 18 Sep 2025 17:42:50 +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=1758217371; cv=none; b=YJiji4Z+WmWomEGthMf1ayC7WYcLPqN4am7YYaEFDhiM0lbWrE3ukJPl16B+gqjtdScGxjGjiOJW246IyyOgUDiONywJCoF+dS5cT5bOJySQT76Cu7iBJMen/KLDCd/RqbHh2xwXLUJOYX/3d+f0YaWpYPL7dRiTUVURqMscwdc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217371; c=relaxed/simple; bh=Tw1T8wn6kyQwhoSTdmUHkaaZcY5A7FRxPAOV0rZVTkE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q0pXkhUMDXgmgSuy+El7XAdYegjZ6HHesInnNI2o9fz8WMth9rQSt+JYwz/9fD0EAcq1zNWoou98CnUBLQ2Q3DIwTHWMGZCYjfmZezixRg7BZu35SQP/ZDjD76YOvvlshjxbkXwvxuYc7/kYo5ZD+ic6Bg+Vop7DWKBpI3nNd6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XCobSEzU; 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="XCobSEzU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3DD2BC4CEF0; Thu, 18 Sep 2025 17:42:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217370; bh=Tw1T8wn6kyQwhoSTdmUHkaaZcY5A7FRxPAOV0rZVTkE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XCobSEzUPgGZekzP+y7KJKx6Se3qstpFZ4WaOjqSs1yHtrXUUccbp7CfznD9nHY7+ NvnHSCd7pJVztdtOJGNVXooQKzWQYYkYzWHjFY74j9nzjYgj4HLrwndSrclMGw3ioB HmNRRRFxc/YXarc93f0svS2hl1gUy0RICk28gDo0rHctHgIoe+W94BG0WVPAeZYRmh s/P9maIkdOBJdr2PAKni8y42iAV3VNegaf6+de+S8MumJNB7t7GkN/nY9HqtgrOnXi xAc+EdqKHyPDeRn9M2/Yd2k1NAeAokIc+I/srZ500avAEz0KTnrP8g2ZH32kwqGT3K uxYtMP46tcL6g== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:25 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-9-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@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=Tw1T8wn6kyQwhoSTdmUHkaaZcY5A7FRxPAOV0rZVTkE=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuEyQ01rmkbgyOH//137jyLzf9oe1OXfKKP+c9frMr +PMsp+vdJSyMIhxMciKKbJIt0Xmz3xexVvi5WcBM4eVCWQIAxenAEzktQrDP1vzSSHB1rtP9q5Y /nFx77QJu4NKuiYG5qzLuR6/i0tkcgHD/1Bl0QnKNeHKR68trAy3FVb+4HYgbNXU+czfREJj2bS cGAE= 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) --- 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 e65449a1395270d46ee550a0814c94525586b4b4..eee931f1466afc166ad34658e80= 71e9b30cf9906 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 @@ -246,7 +246,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; @@ -259,7 +259,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; @@ -409,7 +409,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 @@ -634,7 +634,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 @@ -696,9 +696,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: @@ -1184,7 +1184,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); @@ -1449,7 +1449,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; @@ -1475,7 +1475,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 05:56:21 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 CEE2C26E6F4 for ; Thu, 18 Sep 2025 17:42:51 +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=1758217371; cv=none; b=hAbGv4Hhtk5QLIUKnNiB+BFF2k376oh9dWjXBdr1vn7bk/vLigWeGQLCoQVaFiQBNsCmeAUp/NXh81W26WXFXCmIOO+tZHT6ER6CuS9j1sNdv3/LVSrcvEXzWhTzLopopTJS6lgg3vHBtSxogFEfz/jvz3SjiuY5JdmE+YYWOHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1758217371; c=relaxed/simple; bh=uNDnyYt+fKdOhHhST42KX8J1tSFV4irpTlJRLdgXVl0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ip0TcgAfOd0vZtm63zlczZvBiliujXN8jlrAdVMNwEpE4Gpmkjhd/ioFm4v2W93XPCm6SxXg+p8ApC/mlyh+XjDpEwy6Q2RxG2JOZoCx1rZUdMBC/+fKR8tTxhCPHaWzKJtFrw4SQr/hR9nU7ov4WthVYQGrhfZEj+NcI6+7qF4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gWBSJ6gX; 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="gWBSJ6gX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 19243C4CEE7; Thu, 18 Sep 2025 17:42:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1758217371; bh=uNDnyYt+fKdOhHhST42KX8J1tSFV4irpTlJRLdgXVl0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gWBSJ6gXpUxN32TW0Jj7FVO1u+oggSN8R4tt7T6dXaCozVp23xhub+VqWF/JvSSZu y6qJaalyt+v1XVx7uVsWZb0frzXWD8AoiatymEmw8jWdKDU+De89eAyd0QmxLhth4Y 3OMaQIAXyhTRcYKM6yEoBaDkMH41a2ksajwDk0r8+S9HIf/t08VZvBJVezFWQfcHdt tQ+Zdh0Q7MIA1Pnujfv8ZPyPCVG52+jAE/QYR9J+3AGX+0JxRpUZFQZIv8adjkgNY7 0yjOzHPb0C2OYpsS5H55SO4Qnrq0IusEllO7kLKENa1x5fNcEXAEzbGnsTAidtEgaF Rk7R9KaYWm0YQ== From: "Matthieu Baerts (NGI0)" Date: Thu, 18 Sep 2025 19:42:26 +0200 Subject: [PATCH mptcp-next 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: <20250918-pm-kern-endp-add_addr-v1-10-e12e58770a11@kernel.org> References: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@kernel.org> In-Reply-To: <20250918-pm-kern-endp-add_addr-v1-0-e12e58770a11@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=uNDnyYt+fKdOhHhST42KX8J1tSFV4irpTlJRLdgXVl0=; b=owGbwMvMwCVWo/Th0Gd3rumMp9WSGDLOuEwsdPOewNqk9bcuOT+rQLVwx+vNwY0HH4b41r7rO s7Ht7u5o5SFQYyLQVZMkUW6LTJ/5vMq3hIvPwuYOaxMIEMYuDgFYCJyGxj+O7u39i5g5Fk298HS ctlFcvOiYx66zZ05vfT3keZXJaKX7Rn+x4pceeg+UbJ8l/3s8l2CB5ozg5eEHzJ8UCe98e/ns5v iOQA= 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) --- 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 eee931f1466afc166ad34658e8071e9b30cf9906..1f214e4c7078ad7518b2a501efa= 86633ad9e96ba 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; @@ -620,7 +620,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; } @@ -659,7 +659,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; @@ -694,7 +694,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 @@ -1094,7 +1094,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); @@ -1175,7 +1175,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