From nobody Mon Sep 16 18:57:49 2024 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (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 8B75A10E9 for ; Sat, 30 Dec 2023 02:49:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="rwQP/sUu" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1703904558; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fhFcg1lf0oz36e4EdnbO4QVX48RSgjKf8OPDSUsbLAc=; b=rwQP/sUuuh+cWEVDAKAAss7bsxDN7D40rlRs3WCLmiXE5+iaGfOir2lDq2vkXDW0JAj2wt A8t8v1JEjn06CQJkpHHgSoPWga+adjZu5DgpyFlnVru+zmb/N6kZSWb/BfPhnuezFZVFPz CSlb7Tazw73Y+LxKDbYTAr/LWRt8gjg= From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v7 03/24] mptcp: test set_id flag when appending addr Date: Sat, 30 Dec 2023 10:47:58 +0800 Message-Id: <28d19e02971710fa95575e944808fa6c9970bd1f.1703904325.git.geliang.tang@linux.dev> In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" This patch tests MPTCP_PM_ADDR_FLAG_SET_ID flag when appending a new address in mptcp_pm_nl_append_new_local_addr() in pm_netlink.c and in mptcp_userspace_pm_append_new_local_addr() in pm_userspace.c. If this flag is set, do not alloc new address ID from id_bitmap, just keep the userspace set address ID. Fixes: e5ed101a6028 ("mptcp: userspace pm allow creating id 0 subflow") Signed-off-by: Geliang Tang --- net/mptcp/pm_netlink.c | 7 +++++-- net/mptcp/pm_userspace.c | 9 +++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index dedc5a038b10..8a311b497603 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -949,7 +949,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, } } =20 - if (!entry->addr.id) { + if (!entry->addr.id && !(entry->flags & MPTCP_PM_ADDR_FLAG_SET_ID)) { find_next: entry->addr.id =3D find_next_zero_bit(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, @@ -960,9 +960,12 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm= _nl_pernet *pernet, } } =20 - if (!entry->addr.id) + if (!entry->addr.id && !(entry->flags & MPTCP_PM_ADDR_FLAG_SET_ID)) goto out; =20 + if (entry->flags & MPTCP_PM_ADDR_FLAG_SET_ID) + entry->flags &=3D ~MPTCP_PM_ADDR_FLAG_SET_ID; + __set_bit(entry->addr.id, pernet->id_bitmap); if (entry->addr.id > pernet->next_id) pernet->next_id =3D entry->addr.id; diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 8134dbdc7005..ce8ae7aa5aad 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -41,8 +41,11 @@ static int mptcp_userspace_pm_append_new_local_addr(stru= ct mptcp_sock *msk, spin_lock_bh(&msk->pm.lock); list_for_each_entry(e, &msk->pm.userspace_pm_local_addr_list, list) { addr_match =3D mptcp_addresses_equal(&e->addr, &entry->addr, true); - if (addr_match && entry->addr.id =3D=3D 0) + if (addr_match && entry->addr.id =3D=3D 0 && + !(entry->flags & MPTCP_PM_ADDR_FLAG_SET_ID)) entry->addr.id =3D e->addr.id; + else if (entry->flags & MPTCP_PM_ADDR_FLAG_SET_ID) + entry->flags &=3D ~MPTCP_PM_ADDR_FLAG_SET_ID; id_match =3D (e->addr.id =3D=3D entry->addr.id); if (addr_match && id_match) { match =3D e; @@ -64,10 +67,12 @@ static int mptcp_userspace_pm_append_new_local_addr(str= uct mptcp_sock *msk, } =20 *e =3D *entry; - if (!e->addr.id) + if (!e->addr.id && !(e->flags & MPTCP_PM_ADDR_FLAG_SET_ID)) e->addr.id =3D find_next_zero_bit(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, 1); + else if (e->flags & MPTCP_PM_ADDR_FLAG_SET_ID) + e->flags &=3D ~MPTCP_PM_ADDR_FLAG_SET_ID; list_add_tail_rcu(&e->list, &msk->pm.userspace_pm_local_addr_list); msk->pm.local_addr_used++; ret =3D e->addr.id; --=20 2.39.2