From nobody Mon May  5 23:57:59 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 5EE1C1F1501
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:06 +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=1740047826; cv=none;
 b=Zb35hWxpIWJE6zqQyLR8xhSX9SUNCOTNXDRsYUSPobv/YmMcIwHuTY/vWeokmAyovoPHmw+455opreyXDNuB3wdZnlPYBHlYK2F1qpeezspO59v4XosAehm9OrXOewIdEBP+nypj9v4S16IWygSf9IKen7dXW11vydlAb7QULYc=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047826; c=relaxed/simple;
	bh=/ZTgXVof5MLJRRJLAzJox/qd/0bvC+gN807X/Zq9VVQ=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=Lfr0QNtvX0cSz0ej+EQqaldlpabHf8xGDndpY5Q2i6tLiBS2QaVFj1g/gaY5rTy3XXBt4lOhkdJt9ZuEVQ7zd2NKutQkMmiShxqjloyx0XbG4gF8gErkxuUFUsS32Uxyvn7K3PKBS0Sq31BkBMPC6XAnhdJg/nMaZ3VEZUMaHmI=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=pCwB4p3M; 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="pCwB4p3M"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6FC27C4CEDD;
	Thu, 20 Feb 2025 10:37:05 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047826;
	bh=/ZTgXVof5MLJRRJLAzJox/qd/0bvC+gN807X/Zq9VVQ=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=pCwB4p3MBWP8Zgi1BqTZPoXxghVfrn/JWK7THazMtXwEehNeDyO15l9jFmYSorMVV
	 1ZCesr2Ct+bBqgViNTY6f6/T0n9ERwTa8qt8RTd3tkJhohjn3FKunYalZNEUtFSTeo
	 Vtj+jatRkh/0lvODpNU5BWaOMypKVrMeCmDMoDvgMp1wgDJRIPGAWtPomDLW4krFRO
	 Sf8OgMQHEPiFXGIf8BZRIjX8bN0G8Vx/mRR0Ewrse1Q5v2pnIvDtjkxxMHfKwNv80q
	 pP0+lmELVc1oQw1jHoaz/tv0kJko10JyDu9F0hAoDiIZMF7noPUUKVT3CaYjLtj9jQ
	 C3DFDqklJnVmw==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 1/9] mptcp: pm: in-kernel: add
 address_removed/subflow_closed
Date: Thu, 20 Feb 2025 18:36:50 +0800
Message-ID: 
 <bb44b29f8dd30c79e29693279941b0ca8e0e03e6.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

This patch defines the code in the loop of traversing all msks in
mptcp_nl_remove_subflow_and_signal_addr() as two new helpers,
mptcp_pm_nl_address_removed() and mptcp_pm_nl_subflow_closed(),
used for signaling a RM_ADDR and closing a subflow respectively.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_netlink.c | 60 +++++++++++++++++++++++++++---------------
 1 file changed, 39 insertions(+), 21 deletions(-)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 3859642792db..3914b80ed225 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1506,11 +1506,47 @@ static void __mark_subflow_endp_available(struct mp=
tcp_sock *msk, u8 id)
 		msk->pm.local_addr_used--;
 }
=20
+static int mptcp_pm_nl_address_removed(struct mptcp_sock *msk,
+				       const struct mptcp_pm_addr_entry *local)
+{
+	bool remove_subflow;
+
+	remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, &local-=
>addr);
+	mptcp_pm_remove_anno_addr(msk, &local->addr, remove_subflow &&
+				  !(local->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
+	return 0;
+}
+
+static int mptcp_pm_nl_subflow_closed(struct mptcp_sock *msk,
+				      const struct mptcp_pm_addr_entry *local)
+{
+	struct mptcp_rm_list list =3D { .nr =3D 1 };
+	bool remove_subflow;
+
+	list.ids[0] =3D mptcp_endp_get_local_id(msk, &local->addr);
+	remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, &local-=
>addr);
+	if (remove_subflow) {
+		spin_lock_bh(&msk->pm.lock);
+		mptcp_pm_nl_rm_subflow_received(msk, &list);
+		spin_unlock_bh(&msk->pm.lock);
+	}
+
+	if (local->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) {
+		spin_lock_bh(&msk->pm.lock);
+		__mark_subflow_endp_available(msk, list.ids[0]);
+		spin_unlock_bh(&msk->pm.lock);
+	}
+
+	if (msk->mpc_endpoint_id =3D=3D local->addr.id)
+		msk->mpc_endpoint_id =3D 0;
+
+	return 0;
+}
+
 static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net,
 						   const struct mptcp_pm_addr_entry *entry)
 {
 	const struct mptcp_addr_info *addr =3D &entry->addr;
-	struct mptcp_rm_list list =3D { .nr =3D 1 };
 	long s_slot =3D 0, s_num =3D 0;
 	struct mptcp_sock *msk;
=20
@@ -1518,31 +1554,13 @@ static int mptcp_nl_remove_subflow_and_signal_addr(=
struct net *net,
=20
 	while ((msk =3D mptcp_token_iter_next(net, &s_slot, &s_num)) !=3D NULL) {
 		struct sock *sk =3D (struct sock *)msk;
-		bool remove_subflow;
=20
 		if (mptcp_pm_is_userspace(msk))
 			goto next;
=20
 		lock_sock(sk);
-		remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, addr);
-		mptcp_pm_remove_anno_addr(msk, addr, remove_subflow &&
-					  !(entry->flags & MPTCP_PM_ADDR_FLAG_IMPLICIT));
-
-		list.ids[0] =3D mptcp_endp_get_local_id(msk, addr);
-		if (remove_subflow) {
-			spin_lock_bh(&msk->pm.lock);
-			mptcp_pm_nl_rm_subflow_received(msk, &list);
-			spin_unlock_bh(&msk->pm.lock);
-		}
-
-		if (entry->flags & MPTCP_PM_ADDR_FLAG_SUBFLOW) {
-			spin_lock_bh(&msk->pm.lock);
-			__mark_subflow_endp_available(msk, list.ids[0]);
-			spin_unlock_bh(&msk->pm.lock);
-		}
-
-		if (msk->mpc_endpoint_id =3D=3D entry->addr.id)
-			msk->mpc_endpoint_id =3D 0;
+		mptcp_pm_nl_address_removed(msk, entry);
+		mptcp_pm_nl_subflow_closed(msk, entry);
 		release_sock(sk);
=20
 next:
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 ABE0A1F150D
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:07 +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=1740047827; cv=none;
 b=ioKCTqKrc7dBLI9aOtuBDYp+I9DD88WwRmGlfgPw6WtSNmcyvxkM+YDINb3vZFo/C6R2ymvu4mQa4z/Jk9G+c6wLENEy9KpiAsx3UjJ5v2kVje+MeMBwALALnECeHsdDfgxDvEODV5IWPBZknY2htTErVyb+UYSeiGMs3v6mLq0=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047827; c=relaxed/simple;
	bh=aAE+JnEY/XiqaoLlRbxwjgpnvo1/AYjNsdDGI62RhKI=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=GypnVsa57ty9tBDI2WiqJcg70onVIvzslvfBAXGXZlkoPu2LSAYHMwXPJoHVmMN2leW2X1LsvMMmw8HWF4fggi+UGGbIqATHs2rrKFnhQkhEAf/c3qc6rDE0KSi3jLyJNi9RzWvyIemOW/ALAwNDDy6rcln9BPzivwKoMC++Urc=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=BDXMkCQZ; 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="BDXMkCQZ"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id AA282C4CEE4;
	Thu, 20 Feb 2025 10:37:06 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047827;
	bh=aAE+JnEY/XiqaoLlRbxwjgpnvo1/AYjNsdDGI62RhKI=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=BDXMkCQZ4tBo5OGG/Sb1GL+e5jaeUMy03kr0uAQpyjLkM01CE5yanQNXE9sIzeLKo
	 X7qqkpsEOyVkXQtr+J0KMHLZ+OI+GUxAHCy7Y/yIemHmDeVdCGRmq2UD3o+KiMDSk9
	 1aveOJYVRbhVw4gfZwHkKhy2yd1LReuCXr/5/S4uwRx6os78mKM1I0+8CHyZBnAsdH
	 RgGyT9LSZsad6pD41VYo+4K8kcu83faanj4PYC5h1dkb4FUusKA63hwcTG8oiE0Px7
	 PM8Y7rVPLr81AW8Ao0OVA3H5+k6scUNU04NGzBxp6X9Ce+Ab059u7343NVmolbXsIi
	 fvjLyFmGXb5TA==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 2/9] mptcp: pm: in-kernel: address_announced
 interface
Date: Thu, 20 Feb 2025 18:36:51 +0800
Message-ID: 
 <5881dc057b4927f30070193bde21703f0079e233.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Extract address_announced() interface of the in-kernel netlink PM from
the helper mptcp_nl_add_subflow_or_signal_addr(), only leave the code
for traversing all msk in the helper.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_netlink.c | 34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 3914b80ed225..107f13560202 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1348,6 +1348,25 @@ static struct pm_nl_pernet *genl_info_pm_nl(struct g=
enl_info *info)
 	return pm_nl_get_pernet(genl_info_net(info));
 }
=20
+static int mptcp_pm_nl_address_announced(struct mptcp_sock *msk,
+					 struct mptcp_pm_param *param)
+{
+	struct mptcp_addr_info *addr =3D &param->addr;
+	struct mptcp_addr_info mpc_addr;
+
+	/* if the endp linked to the init sf is re-added with a !=3D ID */
+	mptcp_local_address((struct sock_common *)msk, &mpc_addr);
+
+	spin_lock_bh(&msk->pm.lock);
+	if (mptcp_addresses_equal(addr, &mpc_addr, addr->port))
+		msk->mpc_endpoint_id =3D addr->id;
+
+	mptcp_pm_create_subflow_or_signal_addr(msk);
+	spin_unlock_bh(&msk->pm.lock);
+
+	return 0;
+}
+
 static int mptcp_nl_add_subflow_or_signal_addr(struct net *net,
 					       struct mptcp_addr_info *addr)
 {
@@ -1356,21 +1375,17 @@ static int mptcp_nl_add_subflow_or_signal_addr(stru=
ct net *net,
=20
 	while ((msk =3D mptcp_token_iter_next(net, &s_slot, &s_num)) !=3D NULL) {
 		struct sock *sk =3D (struct sock *)msk;
-		struct mptcp_addr_info mpc_addr;
+		struct mptcp_pm_param param;
=20
 		if (!READ_ONCE(msk->fully_established) ||
 		    mptcp_pm_is_userspace(msk))
 			goto next;
=20
-		/* if the endp linked to the init sf is re-added with a !=3D ID */
-		mptcp_local_address((struct sock_common *)msk, &mpc_addr);
-
 		lock_sock(sk);
-		spin_lock_bh(&msk->pm.lock);
-		if (mptcp_addresses_equal(addr, &mpc_addr, addr->port))
-			msk->mpc_endpoint_id =3D addr->id;
-		mptcp_pm_create_subflow_or_signal_addr(msk);
-		spin_unlock_bh(&msk->pm.lock);
+		mptcp_pm_param_set_contexts(&param, NULL, addr);
+		msk->pm.ops && msk->pm.ops->address_announced ?
+			msk->pm.ops->address_announced(msk, &param) :
+			mptcp_pm_nl_address_announced(msk, &param);
 		release_sock(sk);
=20
 next:
@@ -2394,6 +2409,7 @@ static struct pernet_operations mptcp_pm_pernet_ops =
=3D {
 };
=20
 static struct mptcp_pm_ops mptcp_netlink_pm =3D {
+	.address_announced	=3D mptcp_pm_nl_address_announced,
 	.get_local_id		=3D mptcp_pm_nl_get_local_id,
 	.get_priority		=3D mptcp_pm_nl_get_priority,
 	.type			=3D MPTCP_PM_TYPE_KERNEL,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 D65B81F03F1
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:08 +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=1740047828; cv=none;
 b=QTjm7MRomvl1hw5TGwC/VSufQtmdrmHG/xjHP4/PIqwUjPNt5n8fE5i3NE4HSBwcxuNyFrOr1yvweE3hU4l5cE/XrBtzdjzyeMCTOXDopLfJKc3AWtmsYJJcrWV6FLqksz5DZfK09d+F45HULYcBQb27CwTijjRGja5KL4Su7oA=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047828; c=relaxed/simple;
	bh=M1doJ8g8LtZ+OwGghIdabIumlqIJmibRcMFYb2IWokI=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=CyZq0JEoNSobWJYYWrE2gGJwLq0TDKicUueTrq6slrqsAnPAEhBB35pjTwYbnRwFTJJQxVuYoPJhzaHJbEN42Vunu6NyKmKnZd9w0hSuxjdXdeSdBj06Np+bweoLJ+UAaQ37Oy7K3E3yAW1500TYXB2eOqtgdnjG1Hr5tg3I0cM=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=unpOSd5t; 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="unpOSd5t"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id E8539C4CEE3;
	Thu, 20 Feb 2025 10:37:07 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047828;
	bh=M1doJ8g8LtZ+OwGghIdabIumlqIJmibRcMFYb2IWokI=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=unpOSd5t5/E2JAaLSlC1EXNP4UgM7iOnPO4ymf1MW5Zv6ChNro5jSaFCGlAzb+Ojs
	 3z3ES7RJoGVXdyY1iMy8weIClfLBxn0IMhig66ulZ+pQ62OFfWnIXbYxtE0RivDasM
	 9a9MKKUpUUwabZUdqGjMe6FbIUPD+oyOWlNdDupS7729G4pe1qgoGEK97CvB9Zg8Ix
	 S1NmyWChwLPwixAAOkrfgObyCBqq5hhyZ8u/sHorPRysAJXnS4tuoaTobDjKkuyTV0
	 3Z1ll/wj5Cw/8NbKcgKadNRnYZe6dw8Gy9hF9DqzqNYhDmSsxjvkYvKyOfmReepeXM
	 ZuMkf+YEaOIOg==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 3/9] mptcp: pm: in-kernel: address_removed
 interface
Date: Thu, 20 Feb 2025 18:36:52 +0800
Message-ID: 
 <294f452c959c08593649eacfe77783cff96c0807.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Update the 2nd parameter of mptcp_pm_nl_address_removed(), and define it
as the address_removed() interface of the in-kernel netlink PM.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_netlink.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 107f13560202..53246a3a1b09 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1522,8 +1522,9 @@ static void __mark_subflow_endp_available(struct mptc=
p_sock *msk, u8 id)
 }
=20
 static int mptcp_pm_nl_address_removed(struct mptcp_sock *msk,
-				       const struct mptcp_pm_addr_entry *local)
+				       struct mptcp_pm_param *param)
 {
+	struct mptcp_pm_addr_entry *local =3D &param->entry;
 	bool remove_subflow;
=20
 	remove_subflow =3D mptcp_lookup_subflow_by_saddr(&msk->conn_list, &local-=
>addr);
@@ -1569,12 +1570,16 @@ static int mptcp_nl_remove_subflow_and_signal_addr(=
struct net *net,
=20
 	while ((msk =3D mptcp_token_iter_next(net, &s_slot, &s_num)) !=3D NULL) {
 		struct sock *sk =3D (struct sock *)msk;
+		struct mptcp_pm_param param;
=20
 		if (mptcp_pm_is_userspace(msk))
 			goto next;
=20
 		lock_sock(sk);
-		mptcp_pm_nl_address_removed(msk, entry);
+		mptcp_pm_param_set_contexts(&param, entry, NULL);
+		msk->pm.ops && msk->pm.ops->address_removed ?
+			msk->pm.ops->address_removed(msk, &param) :
+			mptcp_pm_nl_address_removed(msk, &param);
 		mptcp_pm_nl_subflow_closed(msk, entry);
 		release_sock(sk);
=20
@@ -2410,6 +2415,7 @@ static struct pernet_operations mptcp_pm_pernet_ops =
=3D {
=20
 static struct mptcp_pm_ops mptcp_netlink_pm =3D {
 	.address_announced	=3D mptcp_pm_nl_address_announced,
+	.address_removed	=3D mptcp_pm_nl_address_removed,
 	.get_local_id		=3D mptcp_pm_nl_get_local_id,
 	.get_priority		=3D mptcp_pm_nl_get_priority,
 	.type			=3D MPTCP_PM_TYPE_KERNEL,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 8398B1EE7A9
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:10 +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=1740047830; cv=none;
 b=Rwc8tFOG1QSdUg2pmgxioMuX1bPnvKOKaCXy+zDXANqRMKEULYYJFn25nnIAVcQVje5YjP54J+Bj84QuzBJ7QRvJMejlsKOaXi+LQufHmpmOoRML/lfz4/jlDXpDBFMFyXPlzuCfGErqurocG+fCxTqj/W32MsJldHgl055jmfw=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047830; c=relaxed/simple;
	bh=xDzGAdrjwvPLWNIOFtCx8zLVVkOA5fAFb9RqwPNKryA=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=Qwl5raGrewxa+P1vq5gJo/2fzOg53+PZWQOMGrvZ4SRgXzEDNFYPxZDpff/ytp4fJJTJx5T1nYnXrT4kgSfxZ/laH+6vJoB+6J8zJsz9H+tVUurFF7I8XB1FuQmUio9p43clegmqPda2zdaHq72nAqRkNPnImaFfI0W3E4GbzHY=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=lXZ2ruxL; 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="lXZ2ruxL"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2DF95C4CEE3;
	Thu, 20 Feb 2025 10:37:08 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047829;
	bh=xDzGAdrjwvPLWNIOFtCx8zLVVkOA5fAFb9RqwPNKryA=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=lXZ2ruxLdRIlLz5gqMY0XJkTmzmdD1L9UIE8Cp2ycmgiKh6wnCMPdUcRURRnFwJeN
	 BP9RLTpxF8/jLbA96nx0rRdRN3TgRgpo9wBa2MTr7zjG0EQf3+TzE3d9po92LYqt97
	 slYqWNDZJIE/uMAS4tINJ411UfLKlCecfHEIlD4XKsDezhd2gY5wocAuBHX14DBbWQ
	 zQ0XwC21tsSB98+rNpJVtZQmng4IbqJACbPZXfWC64cTDBqeapFw0yMXF0guFf/v1o
	 wcclEsMXkrc+tosskgmX7YWBKbW1RZch+3eQXIJD+2CUL15viNpuV8YNENEZo8CJ5q
	 oPxXTbmWn05ZA==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 4/9] mptcp: pm: in-kernel: subflow_established
 interface
Date: Thu, 20 Feb 2025 18:36:53 +0800
Message-ID: 
 <91b802cae1b3e338d1d8c311fbabd5842543d9d4.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Update mptcp_pm_nl_subflow_established() to match the parameters and
return value of subflow_established() interface and define it as the
interface of the in-kernel netlink PM.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_netlink.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 53246a3a1b09..9795f08a33a6 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -652,9 +652,12 @@ static void mptcp_pm_nl_fully_established(struct mptcp=
_sock *msk)
 	mptcp_pm_create_subflow_or_signal_addr(msk);
 }
=20
-static void mptcp_pm_nl_subflow_established(struct mptcp_sock *msk)
+static int mptcp_pm_nl_subflow_established(struct mptcp_sock *msk,
+					   struct mptcp_pm_param *param)
 {
 	mptcp_pm_create_subflow_or_signal_addr(msk);
+
+	return 0;
 }
=20
 /* Fill all the local addresses into the array addrs[],
@@ -927,6 +930,7 @@ static void mptcp_pm_nl_rm_subflow_received(struct mptc=
p_sock *msk,
 void mptcp_pm_nl_work(struct mptcp_sock *msk)
 {
 	struct mptcp_pm_data *pm =3D &msk->pm;
+	struct mptcp_pm_param param;
=20
 	msk_owned_by_me(msk);
=20
@@ -954,7 +958,9 @@ void mptcp_pm_nl_work(struct mptcp_sock *msk)
 	}
 	if (pm->status & BIT(MPTCP_PM_SUBFLOW_ESTABLISHED)) {
 		pm->status &=3D ~BIT(MPTCP_PM_SUBFLOW_ESTABLISHED);
-		mptcp_pm_nl_subflow_established(msk);
+		msk->pm.ops && msk->pm.ops->subflow_established ?
+			msk->pm.ops->subflow_established(msk, &param) :
+			mptcp_pm_nl_subflow_established(msk, &param);
 	}
=20
 	spin_unlock_bh(&msk->pm.lock);
@@ -2416,6 +2422,7 @@ static struct pernet_operations mptcp_pm_pernet_ops =
=3D {
 static struct mptcp_pm_ops mptcp_netlink_pm =3D {
 	.address_announced	=3D mptcp_pm_nl_address_announced,
 	.address_removed	=3D mptcp_pm_nl_address_removed,
+	.subflow_established	=3D mptcp_pm_nl_subflow_established,
 	.get_local_id		=3D mptcp_pm_nl_get_local_id,
 	.get_priority		=3D mptcp_pm_nl_get_priority,
 	.type			=3D MPTCP_PM_TYPE_KERNEL,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 A34871F03E5
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:11 +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=1740047831; cv=none;
 b=gQMBYZw4Jty5tjrkhGrVQt8Xslax66n+8Beioc0+eDMIVDX1Io/CiFUPS2JadduvKu48pPmu7sEg/+F0DXIPGexZL1lcTBiHkZyAG/EVfnl/T4JQAXV9cmTyqnESJfiqz6EDFiJdrLMUw08Nfbx9Cq3Fe7k/zQYmj+kt3wVVmeQ=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047831; c=relaxed/simple;
	bh=7JkoS/bIxMPoDoPD5p0DpX7j6bjcV4LPTcSZCM9F584=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=B5M2VW/fv1ztz+E9sKHdwuBbYnCdWCJzhjztNMrI2PIqWrSBcB4IV8EWAZSbnIunuWmTHfrBIjUDpDxw+LmGfN0korfUGmhBtOlgzj2lj9mA8v68kJu+1Nm+gLwio9ssVkHvCsG2lbpVRmNHOIVyt3NpjM0fXIN4mp69Mx8BuBc=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=mT5pXsx6; 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="mT5pXsx6"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66DA6C4CED1;
	Thu, 20 Feb 2025 10:37:10 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047831;
	bh=7JkoS/bIxMPoDoPD5p0DpX7j6bjcV4LPTcSZCM9F584=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=mT5pXsx6mARyrFV56r30GpXoPXpAhB1I4jwfrGHaoHRHJ0O7kzFlKzRCHn3qS5QlT
	 N/Ih4jRLYiSvZXp+gQBbFHfNQgjt+X5tYqrybHVtnSqt64QSgb78a7Lq+xtgcZ5mpJ
	 vdnhfNUsKZj7p23MxyBEmwCo6jSE3Zak/203246kJLXuGV1zliOgI3lABOH8kSGu4t
	 q7bkRVW6Irx5dDWwukAo+z87hN5A8uvT5cc7ex+54tSV95rTAR0lgNEQj86/92OM8n
	 eImOYzebPyWy9NsJy5/dU9CVgfIsxG7Pp8UyppZUToHN9z77dV+WVoPyc42nOdzawa
	 zVgI4H5gPIxeg==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 5/9] mptcp: pm: in-kernel: subflow_closed
 interface
Date: Thu, 20 Feb 2025 18:36:54 +0800
Message-ID: 
 <bc557b86200f66d9541d0b6ba61f756c7d1c8766.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Update the 2nd parameter of mptcp_pm_nl_subflow_closed(), and define it
as the subflow_closed() interface of the in-kernel netlink PM.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_netlink.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 9795f08a33a6..a6344945874a 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -1540,8 +1540,9 @@ static int mptcp_pm_nl_address_removed(struct mptcp_s=
ock *msk,
 }
=20
 static int mptcp_pm_nl_subflow_closed(struct mptcp_sock *msk,
-				      const struct mptcp_pm_addr_entry *local)
+				      struct mptcp_pm_param *param)
 {
+	struct mptcp_pm_addr_entry *local =3D &param->entry;
 	struct mptcp_rm_list list =3D { .nr =3D 1 };
 	bool remove_subflow;
=20
@@ -1586,7 +1587,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(st=
ruct net *net,
 		msk->pm.ops && msk->pm.ops->address_removed ?
 			msk->pm.ops->address_removed(msk, &param) :
 			mptcp_pm_nl_address_removed(msk, &param);
-		mptcp_pm_nl_subflow_closed(msk, entry);
+		msk->pm.ops && msk->pm.ops->subflow_closed ?
+			msk->pm.ops->subflow_closed(msk, &param) :
+			mptcp_pm_nl_subflow_closed(msk, &param);
 		release_sock(sk);
=20
 next:
@@ -2423,6 +2426,7 @@ static struct mptcp_pm_ops mptcp_netlink_pm =3D {
 	.address_announced	=3D mptcp_pm_nl_address_announced,
 	.address_removed	=3D mptcp_pm_nl_address_removed,
 	.subflow_established	=3D mptcp_pm_nl_subflow_established,
+	.subflow_closed		=3D mptcp_pm_nl_subflow_closed,
 	.get_local_id		=3D mptcp_pm_nl_get_local_id,
 	.get_priority		=3D mptcp_pm_nl_get_priority,
 	.type			=3D MPTCP_PM_TYPE_KERNEL,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 EA3EF1F1315
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:12 +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=1740047833; cv=none;
 b=qLe5oZ2GfnctLPVfykmyFr85uhQhXrcg5WX6KevjCxzXtitccEbNdU0q2Phwe2mWiMKgtEm6YngQ/6nDG5duWysisL4+psqK4otnaEh0dHBKKjo6FfsSim1yNG3tndSBG8I0T916D28B6KClYW9XusQ4XMAvbGNCbpbU9Ezf9dw=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047833; c=relaxed/simple;
	bh=LL8DcENybaUZzwCB6kfrhyIT3jPFsiny5ouIaPgF4As=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=WLZ/c0jnWeO/FPQM0ZtEXanzYsG2w72Z6kN+FYZ/XO0J/7ChV1pTU2vR478fQ7M92vpf9SSpWbjgJ0B5Qqa4WJF9p6+XsLhrBgHM6FZ1U2xUN7brM18ZsikXoPKvDCf/Aju3XgSP8X6SkCdIB4s6KNW0JyfGbmstuuSSU8ITBBo=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=LRYmuhBv; 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="LRYmuhBv"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id A10E7C4CEE3;
	Thu, 20 Feb 2025 10:37:11 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047832;
	bh=LL8DcENybaUZzwCB6kfrhyIT3jPFsiny5ouIaPgF4As=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=LRYmuhBvx+YbKBlLcOrAiWeusBWs3qEH49M9eG0nDeBcbF93QrF56gt36h3UG7gAx
	 Y8bVvp6gEzVCCAs8uaJHI2cLW6DU2V0lPXRwis56K73qdo38hm9y0zZszaEHT3OBSM
	 oUab7NYBcicPDg1L7JmDPpknIrWApufBfuHLA15sumokv1l11WmXWm5hxuYs0u1wCu
	 /MGaF8kKPO7RYEDIniRUF02yDPIky1utqt4zB8kNoTSU1JHiUsCNZwjr+SqBfR7a5S
	 wYIjjgmgYnhLZpMdZD+SHmqYAUJlWlg0ZYK0ZmRoApk434X8Q14jcVNJKoAT6esgOj
	 yyeVtq3248lGg==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 6/9] mptcp: pm: userspace: address_announced
 interface
Date: Thu, 20 Feb 2025 18:36:55 +0800
Message-ID: 
 <6d39ed9364b41f84b273598f198fa1aa226a2cbc.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Extract address_announced() interface of the userspace PM from the handler
of netlink command MPTCP_PM_CMD_ANNOUNCE mptcp_pm_nl_announce_doit(), only
leave the code for obtaining msk through "info" and parsing address entry
in the handler.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_userspace.c | 49 ++++++++++++++++++++++++++--------------
 1 file changed, 32 insertions(+), 17 deletions(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index be578f5c3195..baac1027cfb8 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -190,9 +190,33 @@ static struct mptcp_sock *mptcp_userspace_pm_get_sock(=
const struct genl_info *in
 	return msk;
 }
=20
+static int mptcp_userspace_pm_address_announced(struct mptcp_sock *msk,
+						struct mptcp_pm_param *param)
+{
+	struct mptcp_pm_addr_entry *local =3D &param->entry;
+	int err;
+
+	err =3D mptcp_userspace_pm_append_new_local_addr(msk, local, false);
+	if (err < 0)
+		return err;
+
+	spin_lock_bh(&msk->pm.lock);
+
+	if (mptcp_pm_alloc_anno_list(msk, &local->addr)) {
+		msk->pm.add_addr_signaled++;
+		mptcp_pm_announce_addr(msk, &local->addr, false);
+		mptcp_pm_nl_addr_send_ack(msk);
+	}
+
+	spin_unlock_bh(&msk->pm.lock);
+
+	return 0;
+}
+
 int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info)
 {
 	struct mptcp_pm_addr_entry addr_val;
+	struct mptcp_pm_param param;
 	struct mptcp_sock *msk;
 	struct nlattr *addr;
 	int err =3D -EINVAL;
@@ -224,26 +248,16 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, st=
ruct genl_info *info)
 		goto announce_err;
 	}
=20
-	err =3D mptcp_userspace_pm_append_new_local_addr(msk, &addr_val, false);
-	if (err < 0) {
-		NL_SET_ERR_MSG_ATTR(info->extack, addr,
-				    "did not match address and id");
-		goto announce_err;
-	}
-
 	lock_sock(sk);
-	spin_lock_bh(&msk->pm.lock);
-
-	if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) {
-		msk->pm.add_addr_signaled++;
-		mptcp_pm_announce_addr(msk, &addr_val.addr, false);
-		mptcp_pm_nl_addr_send_ack(msk);
-	}
-
-	spin_unlock_bh(&msk->pm.lock);
+	mptcp_pm_param_set_contexts(&param, &addr_val, NULL);
+	err =3D msk->pm.ops && msk->pm.ops->address_announced ?
+	      msk->pm.ops->address_announced(msk, &param) :
+	      mptcp_userspace_pm_address_announced(msk, &param);
 	release_sock(sk);
+	if (err)
+		NL_SET_ERR_MSG_ATTR(info->extack, addr,
+				    "did not match address and id");
=20
-	err =3D 0;
  announce_err:
 	sock_put(sk);
 	return err;
@@ -690,6 +704,7 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_=
addr_entry *addr,
 }
=20
 static struct mptcp_pm_ops mptcp_userspace_pm =3D {
+	.address_announced	=3D mptcp_userspace_pm_address_announced,
 	.get_local_id		=3D mptcp_userspace_pm_get_local_id,
 	.get_priority		=3D mptcp_userspace_pm_get_priority,
 	.type			=3D MPTCP_PM_TYPE_USERSPACE,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 C6A3D1F1508
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:13 +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=1740047833; cv=none;
 b=Kr2BcF/TcApNxWlYWjrXhXBsjpw1TM8floKczvE2PPfdKSZwxYGQUctKl5LPD2gsOPNVyNt4oJo80kTVHk3wsNXlE3jCKKsH5ugql+DclGog4151xtiZrJIQTMJXMwP7f95IL5TISZF/Av+gJ/dXBlZRWaDtbB/S10GKWyYZAVo=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047833; c=relaxed/simple;
	bh=egZ43gRKd1v74mdOUJD4pUrM8ceSnxV3lGaDD3TTqHU=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=swd9bLBKJMWfjaYWM+mUQZyA1wEGNmlYgvkUJ4VaZ+lV31SmE21AWuzAeEQ02mN8y9PBN8Gc1Y0EvV/011lMyqrL2cvvsjxonkrneLTpqpgXAp646sgvfUW8ihLGSpQ3nt/ra72r3bro24vxA9kL4bVPuylVIS5THWV88exAk+w=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=MpkEBtGD; 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="MpkEBtGD"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id DD0EAC4CED1;
	Thu, 20 Feb 2025 10:37:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047833;
	bh=egZ43gRKd1v74mdOUJD4pUrM8ceSnxV3lGaDD3TTqHU=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=MpkEBtGDpQgynJqXci+XE5w8pjYh5IRh+veqKK30yKVMTpJcF2RoGc8es2buF7QD1
	 /AGoaUnOn5KUQR126vnqh3D9pEXz1S6GHz3YNTbDr66VGFedQMH68zqewAsvsGx6GV
	 QVdcSqVZdi/D8w3FWCnl2GYedfjiYNpxOA83lBdGVc0I2YgaXVnGxoqPr7vafj89aj
	 VrB3VkdJRwigty3PPn1URAgYvfkhBXQ1bHbjYQJIl59EmQ1j9qrQnJSHRwdK/dFj8p
	 jZFst9xvwpGr8LbQm4yfh+xeB/GLLpgUorbD5Afcght1j3NCZxDfk+7W2Vlc21eQ6N
	 6+90ctwLnDiPg==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 7/9] mptcp: pm: userspace: address_removed
 interface
Date: Thu, 20 Feb 2025 18:36:56 +0800
Message-ID: 
 <c7bb046b76843959098c2d89ab652304a81d9086.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Extract address_removed() interface of the userspace PM from the handler
of netlink command MPTCP_PM_CMD_REMOVE mptcp_pm_nl_remove_doit(), only
leave the code for parsing address id and obtaining msk through "info"
in the handler.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_userspace.c | 74 ++++++++++++++++++++--------------------
 1 file changed, 37 insertions(+), 37 deletions(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index baac1027cfb8..770d1c3e5c81 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -267,11 +267,8 @@ static int mptcp_userspace_pm_remove_id_zero_address(s=
truct mptcp_sock *msk)
 {
 	struct mptcp_rm_list list =3D { .nr =3D 0 };
 	struct mptcp_subflow_context *subflow;
-	struct sock *sk =3D (struct sock *)msk;
 	bool has_id_0 =3D false;
-	int err =3D -EINVAL;
=20
-	lock_sock(sk);
 	mptcp_for_each_subflow(msk, subflow) {
 		if (READ_ONCE(subflow->local_id) =3D=3D 0) {
 			has_id_0 =3D true;
@@ -279,7 +276,7 @@ static int mptcp_userspace_pm_remove_id_zero_address(st=
ruct mptcp_sock *msk)
 		}
 	}
 	if (!has_id_0)
-		goto remove_err;
+		return -EINVAL;
=20
 	list.ids[list.nr++] =3D 0;
=20
@@ -287,11 +284,7 @@ static int mptcp_userspace_pm_remove_id_zero_address(s=
truct mptcp_sock *msk)
 	mptcp_pm_remove_addr(msk, &list);
 	spin_unlock_bh(&msk->pm.lock);
=20
-	err =3D 0;
-
-remove_err:
-	release_sock(sk);
-	return err;
+	return 0;
 }
=20
 void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
@@ -314,20 +307,46 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *ms=
k,
 	spin_unlock_bh(&msk->pm.lock);
 }
=20
+static int mptcp_userspace_pm_address_removed(struct mptcp_sock *msk,
+					      struct mptcp_pm_param *param)
+{
+	struct mptcp_pm_addr_entry *entry;
+	u8 id =3D param->addr.id;
+
+	if (id =3D=3D 0)
+		return mptcp_userspace_pm_remove_id_zero_address(msk);
+
+	spin_lock_bh(&msk->pm.lock);
+	entry =3D mptcp_userspace_pm_lookup_addr_by_id(msk, id);
+	if (!entry) {
+		spin_unlock_bh(&msk->pm.lock);
+		return -EINVAL;
+	}
+
+	list_del_rcu(&entry->list);
+	spin_unlock_bh(&msk->pm.lock);
+
+	mptcp_pm_remove_addr_entry(msk, entry);
+
+	sock_kfree_s((struct sock *)msk, entry, sizeof(*entry));
+
+	return 0;
+}
+
 int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info)
 {
-	struct mptcp_pm_addr_entry *match;
+	struct mptcp_addr_info addr;
+	struct mptcp_pm_param param;
 	struct mptcp_sock *msk;
 	struct nlattr *id;
 	int err =3D -EINVAL;
 	struct sock *sk;
-	u8 id_val;
=20
 	if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_LOC_ID))
 		return err;
=20
 	id =3D info->attrs[MPTCP_PM_ATTR_LOC_ID];
-	id_val =3D nla_get_u8(id);
+	addr.id =3D nla_get_u8(id);
=20
 	msk =3D mptcp_userspace_pm_get_sock(info);
 	if (!msk)
@@ -335,36 +354,16 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, stru=
ct genl_info *info)
=20
 	sk =3D (struct sock *)msk;
=20
-	if (id_val =3D=3D 0) {
-		err =3D mptcp_userspace_pm_remove_id_zero_address(msk);
-		goto out;
-	}
-
 	lock_sock(sk);
-
-	spin_lock_bh(&msk->pm.lock);
-	match =3D mptcp_userspace_pm_lookup_addr_by_id(msk, id_val);
-	if (!match) {
-		spin_unlock_bh(&msk->pm.lock);
-		release_sock(sk);
-		goto out;
-	}
-
-	list_del_rcu(&match->list);
-	spin_unlock_bh(&msk->pm.lock);
-
-	mptcp_pm_remove_addr_entry(msk, match);
-
+	mptcp_pm_param_set_contexts(&param, NULL, &addr);
+	err =3D msk->pm.ops && msk->pm.ops->address_removed ?
+	      msk->pm.ops->address_removed(msk, &param) :
+	      mptcp_userspace_pm_address_removed(msk, &param);
 	release_sock(sk);
-
-	sock_kfree_s(sk, match, sizeof(*match));
-
-	err =3D 0;
-out:
 	if (err)
 		NL_SET_ERR_MSG_ATTR_FMT(info->extack, id,
 					"address with id %u not found",
-					id_val);
+					addr.id);
=20
 	sock_put(sk);
 	return err;
@@ -705,6 +704,7 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_=
addr_entry *addr,
=20
 static struct mptcp_pm_ops mptcp_userspace_pm =3D {
 	.address_announced	=3D mptcp_userspace_pm_address_announced,
+	.address_removed	=3D mptcp_userspace_pm_address_removed,
 	.get_local_id		=3D mptcp_userspace_pm_get_local_id,
 	.get_priority		=3D mptcp_userspace_pm_get_priority,
 	.type			=3D MPTCP_PM_TYPE_USERSPACE,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 74D801EFFB7
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:15 +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=1740047835; cv=none;
 b=OXVRnTJirWjhPJ/uNTjsq0jX4gUPhyDFH7bITyFoMXJtsdH1WoswsIKZ193w5Ymv5eBH9FsJ2k1VZwMZdhrhjVzntFIXQzp9xKLCcvo97ET92bH9PKjK+WhRkA2WML1youWej+dISYVVUwNCVz+ah1eHMake5d7hc5TbM4xdku8=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047835; c=relaxed/simple;
	bh=PruhMdBdnPaoVGDJvDCLe7gHP2IK4zvgyVnqxB8CQS0=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=m2aCbV0k74ReD0bgFq3RzUTg2Sok0IKxykEg+oAiw4F6Wg0i27zFYI62YpvK+9CaWIySmDK+4+4nrGSITRhYsXxQdrsrtIK+4jBSgDYTK7nE+arcIQdsqhxGppMlKCoZadDARijS8fTquKNtNpQ0GiebwhYY1qwkhbZ/CJhNVIU=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=S1NdcGT6; 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="S1NdcGT6"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 276D5C4CEE3;
	Thu, 20 Feb 2025 10:37:13 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047834;
	bh=PruhMdBdnPaoVGDJvDCLe7gHP2IK4zvgyVnqxB8CQS0=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=S1NdcGT6o/K3Ej8g2v9uJxZWPT2hImwHpyAHRePIVaXwQuDgGzytfFUM4TK1dVAp0
	 kPFtVu/ftNi3WKOHYxAiIlUXyrBz0oKNnsD6lIK5AVQ50vdR1n/ckUXHqT2EhDCyUG
	 algb4YEBR2PvkTo2sNUZuiUfk+I5ew/cNXPLiZynarIoN/J9GLi3nWF3jQ1zSZWxQF
	 Mg4nM/i5nqL3kOjDZMfwhPBp6PtzlspUVtkAXCefizQnb1/+xOecXq0kyRRiWNzpkG
	 41f3nayiiXQSA9o+8a1//i8lwRaNTOEdJKtWCLdwo0Ysjw3KqXiTFgV6BoHFVu2gG/
	 w73DNWbaDeV+Q==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 8/9] mptcp: pm: userspace: subflow_established
 interface
Date: Thu, 20 Feb 2025 18:36:57 +0800
Message-ID: 
 <e726d784c4d20a619cf396b89893a4ae3993c4a2.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Extract subflow_established() interface of the userspace PM from the
handler of netlink command MPTCP_PM_CMD_SUBFLOW_CREATE

        mptcp_pm_nl_subflow_create_doit(),

only leave the code for obtaining msk through "info", parsing local address
entry and parsing remote address info in the handler.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_userspace.c | 54 +++++++++++++++++++++++++---------------
 1 file changed, 34 insertions(+), 20 deletions(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index 770d1c3e5c81..bd497893c927 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -369,12 +369,40 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, stru=
ct genl_info *info)
 	return err;
 }
=20
+static int mptcp_userspace_pm_subflow_established(struct mptcp_sock *msk,
+						  struct mptcp_pm_param *param)
+{
+	struct mptcp_pm_addr_entry *entry =3D &param->entry;
+	struct mptcp_addr_info *remote =3D &param->addr;
+	struct sock *sk =3D (struct sock *)msk;
+	struct mptcp_pm_local local;
+	int err;
+
+	err =3D mptcp_userspace_pm_append_new_local_addr(msk, entry, false);
+	if (err < 0)
+		return err;
+
+	local.addr =3D entry->addr;
+	local.flags =3D entry->flags;
+	local.ifindex =3D entry->ifindex;
+
+	err =3D __mptcp_subflow_connect(sk, &local, remote);
+	spin_lock_bh(&msk->pm.lock);
+	if (err)
+		mptcp_userspace_pm_delete_local_addr(msk, entry);
+	else
+		msk->pm.subflows++;
+	spin_unlock_bh(&msk->pm.lock);
+
+	return err;
+}
+
 int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info =
*info)
 {
 	struct mptcp_pm_addr_entry entry =3D { 0 };
 	struct mptcp_addr_info addr_r;
 	struct nlattr *raddr, *laddr;
-	struct mptcp_pm_local local;
+	struct mptcp_pm_param param;
 	struct mptcp_sock *msk;
 	int err =3D -EINVAL;
 	struct sock *sk;
@@ -412,31 +440,16 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *s=
kb, struct genl_info *info)
 		goto create_err;
 	}
=20
-	err =3D mptcp_userspace_pm_append_new_local_addr(msk, &entry, false);
-	if (err < 0) {
-		NL_SET_ERR_MSG_ATTR(info->extack, laddr,
-				    "did not match address and id");
-		goto create_err;
-	}
-
-	local.addr =3D entry.addr;
-	local.flags =3D entry.flags;
-	local.ifindex =3D entry.ifindex;
-
 	lock_sock(sk);
-	err =3D __mptcp_subflow_connect(sk, &local, &addr_r);
+	mptcp_pm_param_set_contexts(&param, &entry, &addr_r);
+	err =3D msk->pm.ops && msk->pm.ops->subflow_established ?
+	      msk->pm.ops->subflow_established(msk, &param) :
+	      mptcp_userspace_pm_subflow_established(msk, &param);
 	release_sock(sk);
=20
 	if (err)
 		GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err);
=20
-	spin_lock_bh(&msk->pm.lock);
-	if (err)
-		mptcp_userspace_pm_delete_local_addr(msk, &entry);
-	else
-		msk->pm.subflows++;
-	spin_unlock_bh(&msk->pm.lock);
-
  create_err:
 	sock_put(sk);
 	return err;
@@ -705,6 +718,7 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_=
addr_entry *addr,
 static struct mptcp_pm_ops mptcp_userspace_pm =3D {
 	.address_announced	=3D mptcp_userspace_pm_address_announced,
 	.address_removed	=3D mptcp_userspace_pm_address_removed,
+	.subflow_established	=3D mptcp_userspace_pm_subflow_established,
 	.get_local_id		=3D mptcp_userspace_pm_get_local_id,
 	.get_priority		=3D mptcp_userspace_pm_get_priority,
 	.type			=3D MPTCP_PM_TYPE_USERSPACE,
--=20
2.43.0
From nobody Mon May  5 23:57:59 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 AA7B91F0E31
	for <mptcp@lists.linux.dev>; Thu, 20 Feb 2025 10:37:16 +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=1740047836; cv=none;
 b=h5P3wpubmYnhe63duQAPRWqV52ycZnUhgShtNMCaC96fJN1KeROSBBpWSYsMGEHwLr/HhjRAwam9Q46iuHkZZJw09s9H8NGAI0JrIPkLidHk1vdpLCS35v/LJbp6BYClg4EbMwe22DWel3queG53sUk8TTiDv1NgpjwmoggCwsg=
ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org;
	s=arc-20240116; t=1740047836; c=relaxed/simple;
	bh=o4qthuCsK8ZCry973EgmPqhYZV1sKjE5yOz6H+N0IN0=;
	h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:
	 MIME-Version;
 b=NklcbIcPUEDGFckCwvUtiRTKHh49U0IxkQ6hySZPdBVWTf3QT3IfZYPayf7vnywawHeOpka86+sofkxIYOk4l+Aiws+b0qKyzJABG7oh6l6B/ZMm5NDD4YAT+Lx4CG25aqrx4OzpxWW0wCF74a46VlUmfUsZ60cZHy4IpC1gVFM=
ARC-Authentication-Results: i=1; smtp.subspace.kernel.org;
 dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org
 header.b=qFPWDxm0; 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="qFPWDxm0"
Received: by smtp.kernel.org (Postfix) with ESMTPSA id 630F4C4CEE4;
	Thu, 20 Feb 2025 10:37:15 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;
	s=k20201202; t=1740047836;
	bh=o4qthuCsK8ZCry973EgmPqhYZV1sKjE5yOz6H+N0IN0=;
	h=From:To:Cc:Subject:Date:In-Reply-To:References:From;
	b=qFPWDxm0HT6GUmVsNgBdRSww4fARcweRy0FYhH7ThbHBRMuwRv99UgQ4MLnLDSjTh
	 yZsLBWAmOfvJxVahhArcunT1i8oFAvc8RGBVTxJ9tycoS7LvxYUB4yT2MlIfz2n3b2
	 txhy21mvRtxMhrx9vDtcoR35NEiIVMFPKKv3WUy+F76LVF1i4GcvnOihH7zH2Oh9pE
	 +UYQuCcTDbGjgYOGsQwIiMbCCIeG2P+zSP76cEYkIXPXK8NA+fSGWu6IXMId9QL0VA
	 pd1phzg1i0mqXmXm+nN0WbOD5hv1NgJ/AzDrC1AwI1Wip0s5k/Du1qIExDI4HIuYXL
	 /2Lk69Ec9XvKg==
From: Geliang Tang <geliang@kernel.org>
To: mptcp@lists.linux.dev
Cc: Geliang Tang <tanggeliang@kylinos.cn>
Subject: [PATCH mptcp-next v1 9/9] mptcp: pm: userspace: subflow_closed
 interface
Date: Thu, 20 Feb 2025 18:36:58 +0800
Message-ID: 
 <2bf0f00efec0394db5b33d5cd6fc74178ea9c736.1740047738.git.tanggeliang@kylinos.cn>
X-Mailer: git-send-email 2.43.0
In-Reply-To: <cover.1740047738.git.tanggeliang@kylinos.cn>
References: <cover.1740047738.git.tanggeliang@kylinos.cn>
Precedence: bulk
X-Mailing-List: mptcp@lists.linux.dev
List-Id: <mptcp.lists.linux.dev>
List-Subscribe: <mailto:mptcp+subscribe@lists.linux.dev>
List-Unsubscribe: <mailto:mptcp+unsubscribe@lists.linux.dev>
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="utf-8"

From: Geliang Tang <tanggeliang@kylinos.cn>

Extract subflow_closed() interface of the userspace PM from the handler of
netlink command MPTCP_PM_CMD_SUBFLOW_DESTROY

	mptcp_pm_nl_subflow_destroy_doit(),

only leave the code for obtaining msk through "info", parsing local address
entry and parsing remote address info in the handler.

This interface is invoked under holding the msk socket lock.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/pm_userspace.c | 45 ++++++++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 15 deletions(-)

diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c
index bd497893c927..9fd93acad38a 100644
--- a/net/mptcp/pm_userspace.c
+++ b/net/mptcp/pm_userspace.c
@@ -501,14 +501,36 @@ static struct sock *mptcp_nl_find_ssk(struct mptcp_so=
ck *msk,
 	return NULL;
 }
=20
+static int mptcp_userspace_pm_subflow_closed(struct mptcp_sock *msk,
+					     struct mptcp_pm_param *param)
+{
+	struct mptcp_pm_addr_entry *local =3D &param->entry;
+	struct mptcp_addr_info *remote =3D &param->addr;
+	struct sock *ssk, *sk =3D (struct sock *)msk;
+
+	ssk =3D mptcp_nl_find_ssk(msk, &local->addr, remote);
+	if (!ssk)
+		return -ESRCH;
+
+	spin_lock_bh(&msk->pm.lock);
+	mptcp_userspace_pm_delete_local_addr(msk, local);
+	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);
+
+	return 0;
+}
+
 int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *skb, struct genl_info=
 *info)
 {
 	struct mptcp_pm_addr_entry addr_l;
 	struct mptcp_addr_info addr_r;
 	struct nlattr *raddr, *laddr;
+	struct mptcp_pm_param param;
 	struct mptcp_sock *msk;
-	struct sock *sk, *ssk;
 	int err =3D -EINVAL;
+	struct sock *sk;
=20
 	if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR) ||
 	    GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_ADDR_REMOTE))
@@ -559,21 +581,13 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *=
skb, struct genl_info *info
 	}
=20
 	lock_sock(sk);
-	ssk =3D mptcp_nl_find_ssk(msk, &addr_l.addr, &addr_r);
-	if (!ssk) {
-		GENL_SET_ERR_MSG(info, "subflow not found");
-		err =3D -ESRCH;
-		goto release_sock;
-	}
-
-	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);
-release_sock:
+	mptcp_pm_param_set_contexts(&param, &addr_l, &addr_r);
+	err =3D msk->pm.ops && msk->pm.ops->subflow_closed ?
+	      msk->pm.ops->subflow_closed(msk, &param) :
+	      mptcp_userspace_pm_subflow_closed(msk, &param);
 	release_sock(sk);
+	if (err)
+		GENL_SET_ERR_MSG(info, "subflow not found");
=20
 destroy_err:
 	sock_put(sk);
@@ -719,6 +733,7 @@ static struct mptcp_pm_ops mptcp_userspace_pm =3D {
 	.address_announced	=3D mptcp_userspace_pm_address_announced,
 	.address_removed	=3D mptcp_userspace_pm_address_removed,
 	.subflow_established	=3D mptcp_userspace_pm_subflow_established,
+	.subflow_closed		=3D mptcp_userspace_pm_subflow_closed,
 	.get_local_id		=3D mptcp_userspace_pm_get_local_id,
 	.get_priority		=3D mptcp_userspace_pm_get_priority,
 	.type			=3D MPTCP_PM_TYPE_USERSPACE,
--=20
2.43.0