From patchwork Thu Feb 20 10:36:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983682 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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 mptcp_sock *msk, u8 id) msk->pm.local_addr_used--; } +static int mptcp_pm_nl_address_removed(struct mptcp_sock *msk, + const struct mptcp_pm_addr_entry *local) +{ + bool remove_subflow; + + remove_subflow = 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 = { .nr = 1 }; + bool remove_subflow; + + list.ids[0] = mptcp_endp_get_local_id(msk, &local->addr); + remove_subflow = 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 == local->addr.id) + msk->mpc_endpoint_id = 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 = &entry->addr; - struct mptcp_rm_list list = { .nr = 1 }; long s_slot = 0, s_num = 0; struct mptcp_sock *msk; @@ -1518,31 +1554,13 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net, while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { struct sock *sk = (struct sock *)msk; - bool remove_subflow; if (mptcp_pm_is_userspace(msk)) goto next; lock_sock(sk); - remove_subflow = 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] = 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 == entry->addr.id) - msk->mpc_endpoint_id = 0; + mptcp_pm_nl_address_removed(msk, entry); + mptcp_pm_nl_subflow_closed(msk, entry); release_sock(sk); next: From patchwork Thu Feb 20 10:36:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983683 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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 genl_info *info) return pm_nl_get_pernet(genl_info_net(info)); } +static int mptcp_pm_nl_address_announced(struct mptcp_sock *msk, + struct mptcp_pm_param *param) +{ + struct mptcp_addr_info *addr = ¶m->addr; + struct mptcp_addr_info mpc_addr; + + /* if the endp linked to the init sf is re-added with a != 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 = 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(struct net *net, while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { struct sock *sk = (struct sock *)msk; - struct mptcp_addr_info mpc_addr; + struct mptcp_pm_param param; if (!READ_ONCE(msk->fully_established) || mptcp_pm_is_userspace(msk)) goto next; - /* if the endp linked to the init sf is re-added with a != 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 = addr->id; - mptcp_pm_create_subflow_or_signal_addr(msk); - spin_unlock_bh(&msk->pm.lock); + mptcp_pm_param_set_contexts(¶m, NULL, addr); + msk->pm.ops && msk->pm.ops->address_announced ? + msk->pm.ops->address_announced(msk, ¶m) : + mptcp_pm_nl_address_announced(msk, ¶m); release_sock(sk); next: @@ -2394,6 +2409,7 @@ static struct pernet_operations mptcp_pm_pernet_ops = { }; static struct mptcp_pm_ops mptcp_netlink_pm = { + .address_announced = mptcp_pm_nl_address_announced, .get_local_id = mptcp_pm_nl_get_local_id, .get_priority = mptcp_pm_nl_get_priority, .type = MPTCP_PM_TYPE_KERNEL, From patchwork Thu Feb 20 10:36:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983684 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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 mptcp_sock *msk, u8 id) } 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 = ¶m->entry; bool remove_subflow; remove_subflow = 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, while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) { struct sock *sk = (struct sock *)msk; + struct mptcp_pm_param param; if (mptcp_pm_is_userspace(msk)) goto next; lock_sock(sk); - mptcp_pm_nl_address_removed(msk, entry); + mptcp_pm_param_set_contexts(¶m, entry, NULL); + msk->pm.ops && msk->pm.ops->address_removed ? + msk->pm.ops->address_removed(msk, ¶m) : + mptcp_pm_nl_address_removed(msk, ¶m); mptcp_pm_nl_subflow_closed(msk, entry); release_sock(sk); @@ -2410,6 +2415,7 @@ static struct pernet_operations mptcp_pm_pernet_ops = { static struct mptcp_pm_ops mptcp_netlink_pm = { .address_announced = mptcp_pm_nl_address_announced, + .address_removed = mptcp_pm_nl_address_removed, .get_local_id = mptcp_pm_nl_get_local_id, .get_priority = mptcp_pm_nl_get_priority, .type = MPTCP_PM_TYPE_KERNEL, From patchwork Thu Feb 20 10:36:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983685 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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); } -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; } /* Fill all the local addresses into the array addrs[], @@ -927,6 +930,7 @@ static void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, void mptcp_pm_nl_work(struct mptcp_sock *msk) { struct mptcp_pm_data *pm = &msk->pm; + struct mptcp_pm_param param; msk_owned_by_me(msk); @@ -954,7 +958,9 @@ void mptcp_pm_nl_work(struct mptcp_sock *msk) } if (pm->status & BIT(MPTCP_PM_SUBFLOW_ESTABLISHED)) { pm->status &= ~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, ¶m) : + mptcp_pm_nl_subflow_established(msk, ¶m); } spin_unlock_bh(&msk->pm.lock); @@ -2416,6 +2422,7 @@ static struct pernet_operations mptcp_pm_pernet_ops = { static struct mptcp_pm_ops mptcp_netlink_pm = { .address_announced = mptcp_pm_nl_address_announced, .address_removed = mptcp_pm_nl_address_removed, + .subflow_established = mptcp_pm_nl_subflow_established, .get_local_id = mptcp_pm_nl_get_local_id, .get_priority = mptcp_pm_nl_get_priority, .type = MPTCP_PM_TYPE_KERNEL, From patchwork Thu Feb 20 10:36:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983686 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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_sock *msk, } 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 = ¶m->entry; struct mptcp_rm_list list = { .nr = 1 }; bool remove_subflow; @@ -1586,7 +1587,9 @@ static int mptcp_nl_remove_subflow_and_signal_addr(struct net *net, msk->pm.ops && msk->pm.ops->address_removed ? msk->pm.ops->address_removed(msk, ¶m) : mptcp_pm_nl_address_removed(msk, ¶m); - mptcp_pm_nl_subflow_closed(msk, entry); + msk->pm.ops && msk->pm.ops->subflow_closed ? + msk->pm.ops->subflow_closed(msk, ¶m) : + mptcp_pm_nl_subflow_closed(msk, ¶m); release_sock(sk); next: @@ -2423,6 +2426,7 @@ static struct mptcp_pm_ops mptcp_netlink_pm = { .address_announced = mptcp_pm_nl_address_announced, .address_removed = mptcp_pm_nl_address_removed, .subflow_established = mptcp_pm_nl_subflow_established, + .subflow_closed = mptcp_pm_nl_subflow_closed, .get_local_id = mptcp_pm_nl_get_local_id, .get_priority = mptcp_pm_nl_get_priority, .type = MPTCP_PM_TYPE_KERNEL, From patchwork Thu Feb 20 10:36:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983687 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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; } +static int mptcp_userspace_pm_address_announced(struct mptcp_sock *msk, + struct mptcp_pm_param *param) +{ + struct mptcp_pm_addr_entry *local = ¶m->entry; + int err; + + err = 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 = -EINVAL; @@ -224,26 +248,16 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) goto announce_err; } - err = 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(¶m, &addr_val, NULL); + err = msk->pm.ops && msk->pm.ops->address_announced ? + msk->pm.ops->address_announced(msk, ¶m) : + mptcp_userspace_pm_address_announced(msk, ¶m); release_sock(sk); + if (err) + NL_SET_ERR_MSG_ATTR(info->extack, addr, + "did not match address and id"); - err = 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, } static struct mptcp_pm_ops mptcp_userspace_pm = { + .address_announced = mptcp_userspace_pm_address_announced, .get_local_id = mptcp_userspace_pm_get_local_id, .get_priority = mptcp_userspace_pm_get_priority, .type = MPTCP_PM_TYPE_USERSPACE, From patchwork Thu Feb 20 10:36:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983688 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v1 7/9] mptcp: pm: userspace: address_removed interface Date: Thu, 20 Feb 2025 18:36:56 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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(struct mptcp_sock *msk) { struct mptcp_rm_list list = { .nr = 0 }; struct mptcp_subflow_context *subflow; - struct sock *sk = (struct sock *)msk; bool has_id_0 = false; - int err = -EINVAL; - lock_sock(sk); mptcp_for_each_subflow(msk, subflow) { if (READ_ONCE(subflow->local_id) == 0) { has_id_0 = true; @@ -279,7 +276,7 @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk) } } if (!has_id_0) - goto remove_err; + return -EINVAL; list.ids[list.nr++] = 0; @@ -287,11 +284,7 @@ static int mptcp_userspace_pm_remove_id_zero_address(struct mptcp_sock *msk) mptcp_pm_remove_addr(msk, &list); spin_unlock_bh(&msk->pm.lock); - err = 0; - -remove_err: - release_sock(sk); - return err; + return 0; } void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, @@ -314,20 +307,46 @@ void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk, spin_unlock_bh(&msk->pm.lock); } +static int mptcp_userspace_pm_address_removed(struct mptcp_sock *msk, + struct mptcp_pm_param *param) +{ + struct mptcp_pm_addr_entry *entry; + u8 id = param->addr.id; + + if (id == 0) + return mptcp_userspace_pm_remove_id_zero_address(msk); + + spin_lock_bh(&msk->pm.lock); + entry = 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 = -EINVAL; struct sock *sk; - u8 id_val; if (GENL_REQ_ATTR_CHECK(info, MPTCP_PM_ATTR_LOC_ID)) return err; id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; - id_val = nla_get_u8(id); + addr.id = nla_get_u8(id); msk = mptcp_userspace_pm_get_sock(info); if (!msk) @@ -335,36 +354,16 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) sk = (struct sock *)msk; - if (id_val == 0) { - err = mptcp_userspace_pm_remove_id_zero_address(msk); - goto out; - } - lock_sock(sk); - - spin_lock_bh(&msk->pm.lock); - match = 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(¶m, NULL, &addr); + err = msk->pm.ops && msk->pm.ops->address_removed ? + msk->pm.ops->address_removed(msk, ¶m) : + mptcp_userspace_pm_address_removed(msk, ¶m); release_sock(sk); - - sock_kfree_s(sk, match, sizeof(*match)); - - err = 0; -out: if (err) NL_SET_ERR_MSG_ATTR_FMT(info->extack, id, "address with id %u not found", - id_val); + addr.id); sock_put(sk); return err; @@ -705,6 +704,7 @@ int mptcp_userspace_pm_get_addr(u8 id, struct mptcp_pm_addr_entry *addr, static struct mptcp_pm_ops mptcp_userspace_pm = { .address_announced = mptcp_userspace_pm_address_announced, + .address_removed = mptcp_userspace_pm_address_removed, .get_local_id = mptcp_userspace_pm_get_local_id, .get_priority = mptcp_userspace_pm_get_priority, .type = MPTCP_PM_TYPE_USERSPACE, From patchwork Thu Feb 20 10:36:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983689 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v1 8/9] mptcp: pm: userspace: subflow_established interface Date: Thu, 20 Feb 2025 18:36:57 +0800 Message-ID: X-Mailer: git-send-email 2.43.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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, struct genl_info *info) return err; } +static int mptcp_userspace_pm_subflow_established(struct mptcp_sock *msk, + struct mptcp_pm_param *param) +{ + struct mptcp_pm_addr_entry *entry = ¶m->entry; + struct mptcp_addr_info *remote = ¶m->addr; + struct sock *sk = (struct sock *)msk; + struct mptcp_pm_local local; + int err; + + err = mptcp_userspace_pm_append_new_local_addr(msk, entry, false); + if (err < 0) + return err; + + local.addr = entry->addr; + local.flags = entry->flags; + local.ifindex = entry->ifindex; + + err = __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 = { 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 = -EINVAL; struct sock *sk; @@ -412,31 +440,16 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb, struct genl_info *info) goto create_err; } - err = 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 = entry.addr; - local.flags = entry.flags; - local.ifindex = entry.ifindex; - lock_sock(sk); - err = __mptcp_subflow_connect(sk, &local, &addr_r); + mptcp_pm_param_set_contexts(¶m, &entry, &addr_r); + err = msk->pm.ops && msk->pm.ops->subflow_established ? + msk->pm.ops->subflow_established(msk, ¶m) : + mptcp_userspace_pm_subflow_established(msk, ¶m); release_sock(sk); if (err) GENL_SET_ERR_MSG_FMT(info, "connect error: %d", err); - 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 = { .address_announced = mptcp_userspace_pm_address_announced, .address_removed = mptcp_userspace_pm_address_removed, + .subflow_established = mptcp_userspace_pm_subflow_established, .get_local_id = mptcp_userspace_pm_get_local_id, .get_priority = mptcp_userspace_pm_get_priority, .type = MPTCP_PM_TYPE_USERSPACE, From patchwork Thu Feb 20 10:36:58 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Geliang Tang X-Patchwork-Id: 13983690 X-Patchwork-Delegate: matthieu.baerts@tessares.net 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 ; 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 To: mptcp@lists.linux.dev Cc: Geliang Tang 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: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Geliang Tang 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 --- 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_sock *msk, return NULL; } +static int mptcp_userspace_pm_subflow_closed(struct mptcp_sock *msk, + struct mptcp_pm_param *param) +{ + struct mptcp_pm_addr_entry *local = ¶m->entry; + struct mptcp_addr_info *remote = ¶m->addr; + struct sock *ssk, *sk = (struct sock *)msk; + + ssk = 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 = -EINVAL; + struct sock *sk; 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 } lock_sock(sk); - ssk = mptcp_nl_find_ssk(msk, &addr_l.addr, &addr_r); - if (!ssk) { - GENL_SET_ERR_MSG(info, "subflow not found"); - err = -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(¶m, &addr_l, &addr_r); + err = msk->pm.ops && msk->pm.ops->subflow_closed ? + msk->pm.ops->subflow_closed(msk, ¶m) : + mptcp_userspace_pm_subflow_closed(msk, ¶m); release_sock(sk); + if (err) + GENL_SET_ERR_MSG(info, "subflow not found"); destroy_err: sock_put(sk); @@ -719,6 +733,7 @@ static struct mptcp_pm_ops mptcp_userspace_pm = { .address_announced = mptcp_userspace_pm_address_announced, .address_removed = mptcp_userspace_pm_address_removed, .subflow_established = mptcp_userspace_pm_subflow_established, + .subflow_closed = mptcp_userspace_pm_subflow_closed, .get_local_id = mptcp_userspace_pm_get_local_id, .get_priority = mptcp_userspace_pm_get_priority, .type = MPTCP_PM_TYPE_USERSPACE,