From nobody Wed Apr 29 15:19:18 2026 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 21D793644D1 for ; Fri, 17 Apr 2026 23:06: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=1776467211; cv=none; b=MrhrsMu4CJDw4j/3S5KaTBLOFIZcUIHCw5S41w+PvyNT2Wyq8BFvZH1Cg/uzbnGP+l+E+QRwLhVg5ltLBbLTidZz4lo4geyJSJEwgd1AKEIn5AAS8cPmvKwu5oJc8J5T70YQ4tAgfP6AOljSG6TA7ZPHRfzwm6GrYGil8U22bXo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776467211; c=relaxed/simple; bh=ppm4ec2WvVA4bz/8hRCnbNXZ2n6i4EcneNAlXKnmC9c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fvsI1KdACelYauFXmS8DjbxV+SzGkRjiIVG+ZeH/uOoejZror0qwDroUbvl//pUJgCTGXcm35pt9NdhIb9egXsx6KjRF66vsBDZl5qrkrMnddphXsuSI4fzPX5j0voXfdZrnsZhddQ9Bb+xrKABDgA/rctitrPkGSQRUjlKU0Jw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tn8/KMxU; 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="tn8/KMxU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D2477C19425; Fri, 17 Apr 2026 23:06:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776467210; bh=ppm4ec2WvVA4bz/8hRCnbNXZ2n6i4EcneNAlXKnmC9c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tn8/KMxU/PDspiRM4Cez0GjW6ukxpsVdCMDtnpyNkk3KOgW+GUfni0deGbxgTHa86 Gx41ZnygVjjgVwtxg7c171ATrBin4pnR1j/67qYIOJIQGGlUK8hdDfI5VW+h61Oi4T CjCdhsyB+5ssM7rDbyK4i3F1KINshX3VaTft3ZrFS7SwTXEdOzUoM/mNlpsw0dLYa2 EOeb+j6d+EMyvMt+l8HosBzMOp5ik8UXMipqfKpWehk8rU9cTOJxNJ71sMRtkLmh47 PY2w91jVGsK1lZCq7QL7elQ8mF3h77spR2i78GX/Ak2M4L2SZ/iIegjbwXx5HESmeq j2G10pfUuwKbw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 1/3] mptcp: pm: userspace: drop delete_local_addr helper Date: Sat, 18 Apr 2026 07:06:22 +0800 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Address entries should not be removed from local_addr_list when a subflow is deleted by the userspace PM, should only be removed when sending a REMOVE_ADDR. So mptcp_userspace_pm_delete_local_addr() helper shouldn't be called in mptcp_pm_nl_subflow_create_doit() and mptcp_pm_nl_subflow_destroy_doit(). Since this helper is open-coding in mptcp_pm_nl_remove_doit(), it can be dropped now. Address entries are removed from local_addr_list when sending a REMOVE_ADDR by the userspace PM, the local_addr_used counter of PM should also be decremented accordingly. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/403 Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 37 +++++-------------------------------- 1 file changed, 5 insertions(+), 32 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d838e8ea65fd..b33c883aec98 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -90,30 +90,6 @@ static int mptcp_userspace_pm_append_new_local_addr(stru= ct mptcp_sock *msk, return ret; } =20 -/* If the subflow is closed from the other peer (not via a - * subflow destroy command then), we want to keep the entry - * not to assign the same ID to another address and to be - * able to send RM_ADDR after the removal of the subflow. - */ -static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *addr) -{ - struct sock *sk =3D (struct sock *)msk; - struct mptcp_pm_addr_entry *entry; - - entry =3D mptcp_userspace_pm_lookup_addr(msk, &addr->addr); - if (!entry) - return -EINVAL; - - /* TODO: a refcount is needed because the entry can - * be used multiple times (e.g. fullmesh mode). - */ - list_del_rcu(&entry->list); - sock_kfree_s(sk, entry, sizeof(*entry)); - msk->pm.local_addr_used--; - return 0; -} - static struct mptcp_pm_addr_entry * mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int = id) { @@ -331,6 +307,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct= genl_info *info) } =20 list_del_rcu(&match->list); + msk->pm.local_addr_used--; spin_unlock_bh(&msk->pm.lock); =20 mptcp_pm_remove_addr_entry(msk, match); @@ -412,14 +389,13 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *s= kb, struct genl_info *info) err =3D __mptcp_subflow_connect(sk, &local, &addr_r); release_sock(sk); =20 - if (err) + if (err) { GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err); + goto create_err; + } =20 spin_lock_bh(&msk->pm.lock); - if (err) - mptcp_userspace_pm_delete_local_addr(msk, &entry); - else - msk->pm.extra_subflows++; + msk->pm.extra_subflows++; spin_unlock_bh(&msk->pm.lock); =20 create_err: @@ -538,9 +514,6 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *sk= b, struct genl_info *info goto release_sock; } =20 - spin_lock_bh(&msk->pm.lock); - mptcp_userspace_pm_delete_local_addr(msk, &addr_l); - spin_unlock_bh(&msk->pm.lock); mptcp_subflow_shutdown(sk, ssk, RCV_SHUTDOWN | SEND_SHUTDOWN); mptcp_close_ssk(sk, ssk, mptcp_subflow_ctx(ssk)); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_RMSUBFLOW); --=20 2.51.0 From nobody Wed Apr 29 15:19:18 2026 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 2E00737DEB5 for ; Fri, 17 Apr 2026 23:06:52 +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=1776467212; cv=none; b=INlqIrFb9ToAIiAy7DLxvpc5e86NFXgHoFGxyS1o5qT5bhM4/jjH+nfVcRzsO9qjPy4ACwoComVsceavd7N+U9tanEFGBDr3TS89r7HyJLJcuPnR3lCFo2tANGTuo4ei139JMiWwDswHvVk2V6c/q9e4+HAnxQ/xAOvZSWbUZ3g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776467212; c=relaxed/simple; bh=D92+IkrAl+fSRyt9zNw6g8h9W5N9h8rh4xSH9hwRfXY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=koJdYVATzvRgGrjzcHaUmMy25Z7rvKxytft/IoQKoFFRbA5nbtRn9YZmJCkUrubWrsbxDUT82A10tDl6L9zqvynM+js6AIuosOo4rqRCwmiKJqpKxTppmNFNr95arC2QbQ3+Zb5LrgRdva8+yUJE79YLyas12IV5abiveK0hTO0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JQk/Xltf; 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="JQk/Xltf" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2A4BCC2BCB5; Fri, 17 Apr 2026 23:06:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776467211; bh=D92+IkrAl+fSRyt9zNw6g8h9W5N9h8rh4xSH9hwRfXY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JQk/Xltfq7iY2tBzW7XW4u11C42oDiPodeET4LGQG9Nbvph19agLjyDubrw4BwAQL K6f4SyQvdQYV5vi8Bu0VC2ht/bkJNflGmLTfngy8pHLi3wEq5dQjntYQ8PMGwoU8vt jYsGz/w1YiRL2PRxB2o1eJ9WPj+yWzkQCNYBqaft/0X9ojyggfHNZy3MHoTrKsxpg7 6zaEaxjP95csgyobCfQh8MjjNK1VQflJzTh1Rrl8G1Af3MVQQ//OivWeNtdaESwoaY SD9edeZ+AbhbRWCylx11a1cNwgM14utdsndcgZ6XJtSbBhIcu8rbytRgQgwgo2pUgl tBJv/YZir/dmA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 2/3] selftests: mptcp: join: update userspace dump_addr outputs Date: Sat, 18 Apr 2026 07:06:23 +0800 Message-ID: <386dae09d4e6123a8c941ee9d594b2dc5bf5946d.1776466833.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Now address entries only be removed from local_addr_list when sending a REMOVE_ADDR by the userspace PM, they're no longer removed when a subflow is deleted. To make userspace PM selftests in mptcp_join.sh pass, this patch updates the outputs of dump_addr. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index beec41f6662a..9802a991892d 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -4034,9 +4034,9 @@ userspace_tests() userspace_pm_chk_get_addr "${ns1}" "20" "id 20 flags signal 10.0.3.1" userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $MPTCP_LIB_EVENT_SUB_ESTABLISH= ED userspace_pm_chk_dump_addr "${ns1}" \ - "id 20 flags signal 10.0.3.1" "after rm_sf 10" + $'id 10 flags signal 10.0.2.1\nid 20 flags signal 10.0.3.1' "after rm_s= f 10" userspace_pm_rm_addr $ns1 20 - userspace_pm_chk_dump_addr "${ns1}" "" "after rm_addr 20" + userspace_pm_chk_dump_addr "${ns1}" "id 10 flags signal 10.0.2.1" "after= rm_addr 20" chk_rm_nr 1 1 invert chk_mptcp_info subflows 0 subflows 0 chk_subflows_total 1 1 @@ -4064,7 +4064,7 @@ userspace_tests() userspace_pm_chk_get_addr "${ns2}" "20" "id 20 flags subflow 10.0.3.2" userspace_pm_rm_sf $ns2 10.0.3.2 $MPTCP_LIB_EVENT_SUB_ESTABLISHED userspace_pm_chk_dump_addr "${ns2}" \ - "" \ + "id 20 flags subflow 10.0.3.2" \ "after rm_sf 20" chk_rm_nr 0 1 chk_mptcp_info subflows 0 subflows 0 --=20 2.51.0 From nobody Wed Apr 29 15:19:18 2026 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 B2724318EE6 for ; Fri, 17 Apr 2026 23:06:53 +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=1776467213; cv=none; b=eQX2T65bzp8hWK4PdQ7Z1Rcstf1kozGp9HKzmXCpTOSaodJ9LgOE67/lPWDgCUi8fxq2y/wAsgMu0iI6Hh7yB6T5u6bMr2hyoAjrORjxxZx51MLD9jGD5LD+uwsqif4+MdTjuqkeatPt0rnxdXgnlobYNAOhtUInycVTehozH2s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776467213; c=relaxed/simple; bh=3wV2/MjD/Za2zuJtrTsKwOBlvZmDmVcNuqk7sluPGtA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kfsTWgxK6mZIKrgc0X3esvUgSOz/5PXWK25ADVQK+5ik901Dmhf5W2Lz4uXhCSY9jX9jXLCJTFM58Bmz4D9vP2+yMvtdQ49gunBLgPCEP61PlhIde3MK1BVLZvSMXplgcRq0kpENIuzKcr2A1VlAO4QQP7fYouOMstaFbgrtcco= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hzrJxMM9; 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="hzrJxMM9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 669B8C2BCB3; Fri, 17 Apr 2026 23:06:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1776467213; bh=3wV2/MjD/Za2zuJtrTsKwOBlvZmDmVcNuqk7sluPGtA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hzrJxMM99FUqwZPfDg6z7ZeoUkHRDUW1cYs8PUh4uosdRUUXPg6L4733C6Fr5pUIg VXKxqGrIFIbsdWRx1fXxyhG2AZ9fFIlr92F76zuvtEhKlYcQ0jSRuKhF1F4NxCEdeP quj1logtLTK6Ec1jNciaWNbfMIWVV1d1Td/lhWQcMg7Ogr7mmZ9nT/TDXqZLGcG46t px2ydy85gF0TiHD6WmJx6QWRYp/PDXFu6v8QNn85774DXu9vRyN1P5+v1DmA2iXBfx mXCcXc8S2U8ZiW4+YsDZ7DV5v1EigEs9rH+XrtNCHx4dSMxDld5qN5g6pChzaatzLr 4AFjLKLiDjFZw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v4 3/3] selftests: mptcp: userspace: send RM_ADDR between server and client Date: Sat, 18 Apr 2026 07:06:24 +0800 Message-ID: <1019210f324b665fb2e3b5c341177976c557644f.1776466833.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Now address entries only be removed from local_addr_list when sending a REMOVE_ADDR by the userspace PM, they're no longer removed when a subflow is deleted. To make the original userspace PM selftests pass, this patch sends RM_ADDR from server to client machine at the end of each test, and always sends RM_ADDR from client to server machine to cleanup address IDs for the next new test. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/userspace_pm.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/userspace_pm.sh b/tools/test= ing/selftests/net/mptcp/userspace_pm.sh index e9ae1806ab07..7490b80b3e45 100755 --- a/tools/testing/selftests/net/mptcp/userspace_pm.sh +++ b/tools/testing/selftests/net/mptcp/userspace_pm.sh @@ -642,6 +642,8 @@ test_subflows() "dead:beef:2::1" "dead:beef:2::2" "$client6_port" "23"\ "$client_addr_id" "ns1" "ns2" =20 + # RM_ADDR from server to client machine + ip netns exec "$ns1" ./pm_nl_ctl rem id 23 token "$server6_token" # RM_ADDR from client to server machine ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\ "$client6_token" @@ -680,6 +682,8 @@ test_subflows() verify_subflow_events "$server_evts" "$SUB_CLOSED" "$server4_token" "$AF_= INET" "10.0.2.1"\ "10.0.2.2" "$new4_port" "23" "$client_addr_id" "ns1" "ns2" =20 + # RM_ADDR from server to client machine + ip netns exec "$ns1" ./pm_nl_ctl rem id 23 token "$server4_token" # RM_ADDR from client to server machine ip netns exec "$ns2" ./pm_nl_ctl rem id $client_addr_id token\ "$client4_token" @@ -721,6 +725,8 @@ test_subflows() # RM_ADDR from server to client machine ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\ "$server4_token" + # RM_ADDR from client to server machine + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client4_token" sleep 0.5 =20 # Attempt to add a listener at dead:beef:2::1: @@ -760,6 +766,8 @@ test_subflows() # RM_ADDR6 from server to client machine ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\ "$server6_token" + # RM_ADDR6 from client to server machine + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client6_token" sleep 0.5 =20 # Attempt to add a listener at 10.0.2.1: @@ -797,6 +805,8 @@ test_subflows() # RM_ADDR from server to client machine ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\ "$server4_token" + # RM_ADDR from client to server machine + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client4_token" } =20 test_subflows_v4_v6_mix() @@ -844,6 +854,8 @@ test_subflows_v4_v6_mix() # RM_ADDR from server to client machine ip netns exec "$ns1" ./pm_nl_ctl rem id $server_addr_id token\ "$server6_token" + # RM_ADDR from client to server machine + ip netns exec "$ns2" ./pm_nl_ctl rem id 23 token "$client6_token" sleep 0.5 } =20 --=20 2.51.0