From nobody Thu May 16 08:39:00 2024 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 9C1078F4F for ; Thu, 18 Jan 2024 06:12: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=1705558330; cv=none; b=Xb1bn8/q8Cw92scYVuGewglx3s1pxyIbp/ebKanr1AAYTFkJqYTBWC0npv1oi1UQ3GhoSi+MavYk698lhnyverRO9hQIbaq+XyDwU7nnnLG9f9vo4YNEIH0fDBsZrXhlGDRi9JHgqtxCUkF5FVfXsoEalt6GSLw9fATtpbwcaBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558330; c=relaxed/simple; bh=c6y3uYM4LtlWZlCsKB2PtSfYpeWHPGbBGRR9dzI75OU=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=HIVrObX51IceGK+gRhz9kFJbs2OioJe/Vo5h1xlM3szsYJxszpNNiXEJ8XyCuIngVqDYKjpghg+kUN2Nw8om6u8mWKd8EX95kUnj57QR4BgUYGELnkRDKaVmTFPMgzBZaf8ENEIRiwJlEFCG3kDHLnIiqi9RJCPek0MfyUVf/Qw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=W4obPH4F; 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="W4obPH4F" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3EB92C43390; Thu, 18 Jan 2024 06:12:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558330; bh=c6y3uYM4LtlWZlCsKB2PtSfYpeWHPGbBGRR9dzI75OU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W4obPH4FNLerpjFAejsJTDRNylgR14jo7JhwrOLFuk8F9Txg6Jv4w/C5ySShjlDjU ZFymuqG7c1HEwJ+PId6FbyIkr+Zv+YsIWo1kuIcAVqC6IwaRoZ++1kGDEtOdJwqBJ9 tEyT+6mK+xVk7DjDAn25sR6Ou5Wlvch0rrfmehsA6t1JCl2igp9C541jWxEDLXPlwx m8RoWPelQeUlrdbNdhDEmPgJRhmge6i8pz04Lt9mR9SGBy1ZvtLhL9R/6gvtNC7TXa S98qTqEU07KVpFLg1J24V1BVrRQ8bsm20poDAzSwKWwVWnwTJCl7G65+ko14mgSjqz 1DO+v92qkIo2w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 01/23] mptcp: add pm_has_addr_attr_id helper Date: Thu, 18 Jan 2024 14:11:41 +0800 Message-Id: <9d4caf4cbb5f75d8bc057cdd2f073c243a2dcf92.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds a new helper mptcp_pm_has_addr_attr_id() to check whether an address ID is set from PM or not. It will be used in the next two commits. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 12 ++++++++++++ net/mptcp/protocol.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 4ae19113b8eb..6856d10368be 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -533,6 +533,18 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk) bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); } =20 +bool mptcp_pm_has_addr_attr_id(const struct nlattr *attr, + struct genl_info *info) +{ + struct nlattr *tb[MPTCP_PM_ADDR_ATTR_MAX + 1]; + + if (!nla_parse_nested_deprecated(tb, MPTCP_PM_ADDR_ATTR_MAX, attr, + mptcp_pm_address_nl_policy, info->extack) && + tb[MPTCP_PM_ADDR_ATTR_ID]) + return true; + return false; +} + void mptcp_pm_data_init(struct mptcp_sock *msk) { spin_lock_init(&msk->pm.lock); diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d442d876f465..0d634e01c47d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -887,6 +887,8 @@ int mptcp_pm_parse_addr(struct nlattr *attr, struct gen= l_info *info, int mptcp_pm_parse_entry(struct nlattr *attr, struct genl_info *info, bool require_family, struct mptcp_pm_addr_entry *entry); +bool mptcp_pm_has_addr_attr_id(const struct nlattr *attr, + struct genl_info *info); bool mptcp_pm_addr_families_match(const struct sock *sk, const struct mptcp_addr_info *loc, const struct mptcp_addr_info *rem); --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 E88358F4F for ; Thu, 18 Jan 2024 06:12: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=1705558332; cv=none; b=sqN02SckkXjcLKLTEX5kovzuV1NLm0SoWu1FnCZZs5E205Pm/9m3qW7qgJ4epw2ZX2+11Qi1X4Qo84u3l3846DRYbzXRlT7+cyj54NxOMP+z7jcaGyh2qRMYRku6jyVgWvIEV+z0EeEtDw/1Jjppf9cP7Od70L/bCXCsLh+WO2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558332; c=relaxed/simple; bh=Ikwz+OjNnryV8x48fw54k45/9ukZa+8huwLsHZAJRKg=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=GAzzz87+3LQyFySA3jm7+S4RUI3KdCddTXfeDzxtzS4e83PtATT5Y4FpwAjMkXI9UpGacsFtdu6dleDJiNnAJaLf5oYFr9FsCMvxT09gefxqcgwO2rRBApWiEr42JPnREV8iLsX0Yp8Z2iYoFBSxpc8Q7U6w3hXNhmjPzqiETU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gCLb0Rma; 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="gCLb0Rma" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 937C4C433F1; Thu, 18 Jan 2024 06:12:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558331; bh=Ikwz+OjNnryV8x48fw54k45/9ukZa+8huwLsHZAJRKg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gCLb0Rma8emmppCzvfyMPsPldfYz49vgv2bAkFK2kTLTsowZWorhicdZ47QOeVyRe tbDCzAp8KTTN/990afLwmJVg8XDUjt9iL78i4+SjiAW0A/NDOsDulirHjHJ8x8HPf0 wPx+TL8O4y9/k3sWA56rJk/sFyq9m0sQj5JWfY5+IP6k7TbFY4W4Fm9WFMxif1CnWC ICTCl7MBwKF1gsWEzckgT4IBXpv1PBivHQ8lvRsNRKiNCD4HvWeaUNDpWaXpY36BsJ e+J+pFUoxJpqvg9ffftCS8OMv4OjsNKbASEGvvSuzql9jVQQ+VUNXHYoUoPFWKIkmI hYrcAZn6ykcAg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 02/23] mptcp: add needs_id for userspace appending addr Date: Thu, 18 Jan 2024 14:11:42 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang When userspace PM requires to create an ID 0 subflow in "userspace pm create id 0 subflow" test like this: userspace_pm_add_sf $ns2 10.0.3.2 0 An ID 1 subflow, in fact, is created. Since in mptcp_pm_nl_append_new_local_addr(), 'id 0' will be treated as no ID is set by userspace, and will allocate a new ID immediately: if (!e->addr.id) e->addr.id =3D find_next_zero_bit(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, 1); To solve this issue, a new parameter needs_id is added for mptcp_userspace_pm_append_new_local_addr() to distinguish between whether userspace PM has set an ID 0 or whether userspace PM has not set any address. In mptcp_userspace_pm_get_local_id(), needs_id is always true, but in mptcp_pm_nl_announce_doit() and mptcp_pm_nl_subflow_create_doit(), pass mptcp_pm_has_addr_attr_id() to needs_it. Fixes: e5ed101a6028 ("mptcp: userspace pm allow creating id 0 subflow") Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 4f3901d5b8ef..8ca6e28a121e 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -26,7 +26,8 @@ void mptcp_free_local_addr_list(struct mptcp_sock *msk) } =20 static int mptcp_userspace_pm_append_new_local_addr(struct mptcp_sock *msk, - struct mptcp_pm_addr_entry *entry) + struct mptcp_pm_addr_entry *entry, + bool needs_id) { DECLARE_BITMAP(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1); struct mptcp_pm_addr_entry *match =3D NULL; @@ -41,7 +42,7 @@ static int mptcp_userspace_pm_append_new_local_addr(struc= t 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 && needs_id) entry->addr.id =3D e->addr.id; id_match =3D (e->addr.id =3D=3D entry->addr.id); if (addr_match && id_match) { @@ -64,7 +65,7 @@ static int mptcp_userspace_pm_append_new_local_addr(struc= t mptcp_sock *msk, } =20 *e =3D *entry; - if (!e->addr.id) + if (!e->addr.id && needs_id) e->addr.id =3D find_next_zero_bit(id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, 1); @@ -153,7 +154,7 @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *= msk, if (new_entry.addr.port =3D=3D msk_sport) new_entry.addr.port =3D 0; =20 - return mptcp_userspace_pm_append_new_local_addr(msk, &new_entry); + return mptcp_userspace_pm_append_new_local_addr(msk, &new_entry, true); } =20 int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) @@ -198,7 +199,8 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, stru= ct genl_info *info) goto announce_err; } =20 - err =3D mptcp_userspace_pm_append_new_local_addr(msk, &addr_val); + err =3D mptcp_userspace_pm_append_new_local_addr(msk, &addr_val, + !mptcp_pm_has_addr_attr_id(addr, info)); if (err < 0) { GENL_SET_ERR_MSG(info, "did not match address and id"); goto announce_err; @@ -378,7 +380,8 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb= , struct genl_info *info) } =20 local.addr =3D addr_l; - err =3D mptcp_userspace_pm_append_new_local_addr(msk, &local); + err =3D mptcp_userspace_pm_append_new_local_addr(msk, &local, + !mptcp_pm_has_addr_attr_id(laddr, info)); if (err < 0) { GENL_SET_ERR_MSG(info, "did not match address and id"); goto create_err; --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 4F5798F4F for ; Thu, 18 Jan 2024 06:12: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=1705558333; cv=none; b=MbTVEgEindjgd8xGZa8/oirjOusVNThth5tmDREB0IlTm9EcknB9YEXduqW1TeB2Ed8HKWKz57/De//r1pOlaAJBagkV2LS6C2Bd4sgsVLdFM+AFyHoCffLDGD7Xz7AvsAbo2pKIMhoHGirnp8QjvtQqR/KIRefV88j2ZnVnnD4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558333; c=relaxed/simple; bh=D2GzIVrh4Im2X+tPCjz233MT623AzRSIbh7TFww4deg=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=Q5wOEnF32PWSyel4hGwEIZbnDweEMX3eVqIDiUZmd/7aL06CzXeUUwfgfW24EYqdRBySEIY4F9ZXBQcreQkVUExlW/ykFZU89TVVc16GuWGym8LqIC2OWW77JtPmxB8aq5yxmJIXgX2uCQngAmDCijCdF2x8KgNoZaz2sROrR1g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ilws5T0s; 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="ilws5T0s" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E6F06C433B1; Thu, 18 Jan 2024 06:12:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558332; bh=D2GzIVrh4Im2X+tPCjz233MT623AzRSIbh7TFww4deg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ilws5T0sYJBqYHExZJDehOD4zMUu67Q9WSIdeoxJCFbXG4QhsHavBz0n3J0jWLGKo RgC0oLYcrZKOH105DmwsoqWhEiI1W7W1qebh2epls8hvDiIErGnsoRadvhj+uz5iAd 5+Y4KyPek1sTi89r2BGIX7RpFFG7CUrtemLHCw/MQSPFUuIlIVNtf+nsZDXGfrR4jh 5mIzXskNdNzPhA7RE6KsuS47UUk5w82xbO7BWf+aATZilMOnXUYXmtwoYkiT2/icXf BcNiiCA6aBET2AhQJJcuGznwEhOaj2wk/245QGLXHNijtozoCMlS60svCkisFbT2kE 7330uh5ZRZd4w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 03/23] mptcp: add needs_id for netlink appending addr Date: Thu, 18 Jan 2024 14:11:43 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Just the same as userspace PM, a new parameter needs_id is added for in-kernel PM mptcp_pm_nl_append_new_local_addr() too. In mptcp_pm_nl_get_local_id(), needs_id is always true, but in mptcp_pm_nl_add_addr_doit(), pass mptcp_pm_has_addr_attr_id() to needs_it. Signed-off-by: Geliang Tang --- net/mptcp/pm_netlink.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 287a60381eae..d158bfab1abc 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -901,7 +901,8 @@ static void __mptcp_pm_release_addr_entry(struct mptcp_= pm_addr_entry *entry) } =20 static int mptcp_pm_nl_append_new_local_addr(struct pm_nl_pernet *pernet, - struct mptcp_pm_addr_entry *entry) + struct mptcp_pm_addr_entry *entry, + bool needs_id) { struct mptcp_pm_addr_entry *cur, *del_entry =3D NULL; unsigned int addr_max; @@ -949,7 +950,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, } } =20 - if (!entry->addr.id) { + if (!entry->addr.id && needs_id) { find_next: entry->addr.id =3D find_next_zero_bit(pernet->id_bitmap, MPTCP_PM_MAX_ADDR_ID + 1, @@ -960,7 +961,7 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, } } =20 - if (!entry->addr.id) + if (!entry->addr.id && needs_id) goto out; =20 __set_bit(entry->addr.id, pernet->id_bitmap); @@ -1092,7 +1093,7 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, = struct mptcp_addr_info *skc entry->ifindex =3D 0; entry->flags =3D MPTCP_PM_ADDR_FLAG_IMPLICIT; entry->lsk =3D NULL; - ret =3D mptcp_pm_nl_append_new_local_addr(pernet, entry); + ret =3D mptcp_pm_nl_append_new_local_addr(pernet, entry, true); if (ret < 0) kfree(entry); =20 @@ -1326,7 +1327,8 @@ int mptcp_pm_nl_add_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) goto out_free; } } - ret =3D mptcp_pm_nl_append_new_local_addr(pernet, entry); + ret =3D mptcp_pm_nl_append_new_local_addr(pernet, entry, + !mptcp_pm_has_addr_attr_id(attr, info)); if (ret < 0) { GENL_SET_ERR_MSG_FMT(info, "too many addresses or duplicate one: %d", re= t); goto out_free; --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 9D7098F40 for ; Thu, 18 Jan 2024 06:12:14 +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=1705558334; cv=none; b=KMAsZ95dU2S6uJdM3fKkULeVUsH1iFweNLHlQZHPdoKF3glrEqzSMn5T8RgMulj7Ub7Jq1VT0GzTvV3OZDhfnUaUFFnhHJmYHV2SD5fX9Q9Zaf79Vx68ufE/mjfV35KZaZb5l5EpX+U16AwcOyRj9xTA3mBVUWwC9bBNyOeFw/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558334; c=relaxed/simple; bh=rD0TpaNkyE0+BpftNU6Yeko+KpNJntQ9/V5qYFGwr+o=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=g22knEGDyC4/cEOsS8yV5DtMCPJ2MCQhosUqDVxJtqiuRF0HCFQUN5J/+XuZ5uuCveI4xYB9ineJY4quv10d7TI0uzlxp6I/fTvd6mbQ0cmhXLqn50/iX4o1+UqNLLRo4dKpTRVLKbu2eq/GX+4F+ceUsd6IA326kO0wbEVUij0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZStBDTUJ; 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="ZStBDTUJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5CB75C433A6; Thu, 18 Jan 2024 06:12:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558334; bh=rD0TpaNkyE0+BpftNU6Yeko+KpNJntQ9/V5qYFGwr+o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZStBDTUJR7NMlctRFO6j78pUJ97YdgYesYsx1X8g0JU8YyNvlBxa4Vli1yaKK3+dL Vj1XAwmL0fbpPnlprga8qQ1imPjzql4YQ9LFGJOIhJILqO1dOER3AZzvY99dKpvrkS yyNNEh50keav1IYcMgT8tQl8PGAw0JL4HGOSGQaSgSQ/EHyZtllUyy73O/z1cYHcNV Stlaw1nXbgxldHipGGIst1+EEbbaciTx44Hf9GSN6I0k+VeSEwEvj50WRAHneDawQP FnJo4KhkFzUnI2s+++NvnOJq+Znpwk6RvwQTTdJrz9ew/xfqyKFZCxFyYbERejfK+z gj0CFfbt10F3w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 04/23] mptcp: map v4 address to v6 when destroying subflow Date: Thu, 18 Jan 2024 14:11:44 +0800 Message-Id: <5b291bca5a8a69217ae9e1090c94fb8e10b0b4ce.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Address family of server side mismatches with that of client side, like in "userspace pm add & remove address" test: userspace_pm_add_addr $ns1 10.0.2.1 10 userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $SUB_ESTABLISHED That's because on the server side, the family is set to AF_INET6 and the v4 address is mapped in a v6 one. This patch fixes this issue. In mptcp_pm_nl_subflow_destroy_doit(), before checking local address family with remote address family, map an IPv4 address to an IPv6 address if the pair is a v4-mapped address. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/387 Fixes: 702c2f646d42 ("mptcp: netlink: allow userspace-driven subflow establ= ishment") Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 8ca6e28a121e..7bb3574cc65a 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -497,6 +497,16 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *s= kb, struct genl_info *info goto destroy_err; } =20 +#if IS_ENABLED(CONFIG_MPTCP_IPV6) + if (addr_l.family =3D=3D AF_INET && ipv6_addr_v4mapped(&addr_r.addr6)) { + ipv6_addr_set_v4mapped(addr_l.addr.s_addr, &addr_l.addr6); + addr_l.family =3D AF_INET6; + } + if (addr_r.family =3D=3D AF_INET && ipv6_addr_v4mapped(&addr_l.addr6)) { + ipv6_addr_set_v4mapped(addr_r.addr.s_addr, &addr_r.addr6); + addr_r.family =3D AF_INET6; + } +#endif if (addr_l.family !=3D addr_r.family) { GENL_SET_ERR_MSG(info, "address families do not match"); err =3D -EINVAL; --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 B74D28F40 for ; Thu, 18 Jan 2024 06:12: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=1705558335; cv=none; b=YN5Dz3k/emLZCK+tVvp+OWH1UUZcq9fsx9vYtXfo37iezFhnDJCGu0XEiWfT4pA5yq1Pg+WpIQeR2KnPVBZxNBhk4Ig4wHcHtqUsk50K2ooUlgju5NLCB5aKsC5/9NUB5FjKBKVHQS8YC+cqnz0He+p35x6VDvCqVcMdvfngUHA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558335; c=relaxed/simple; bh=/OB0qIt3eBzgYQ7vAdDyvyp4bI2k1bL58iTq644CVZ4=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=BVmpIpxcJRtat9/7WF+B4KgppNn8EMqtKHjvnfbFEQ5Z9M11ixa9Qu3dWvoADE6DuT2B3drlOxm+CMQXok0gQHhLS0JhkDSCZ5Bh9quwp+qGzO70fRc6M9KI0h4h0JLEcvo4oLPnpNlCcdAYYJ5U5Rd0X/s4Cr+c34dCjFxL2Ho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cF4dPNit; 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="cF4dPNit" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B40FBC433F1; Thu, 18 Jan 2024 06:12:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558335; bh=/OB0qIt3eBzgYQ7vAdDyvyp4bI2k1bL58iTq644CVZ4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cF4dPNitYydLvs9nzZkuVNWD5vyle9V1VIyKBT4TIIkm2uHrLbFhjDQpy5CSBEXFa P4ewHNfuA55e51FguUm8zRl/ez564hFTqhn2/AZv5/ksTs7UIys8WpL43gl0BHzlWG NVxE8MngTyjzOLLT0P/3CseC/D4bbxjV7cyJdFOBbfEod31eJXkLP2ZkKUX0Ovfnde 8EOWDBy8uFMr3GSIrDBU4CZWs43cqAJ9bVcDPcb7PyhfFswbRPiXV54Evtpa8lNfhj WR6DKNESrhG6SqS9VfNio9pwm7eGHySiLr6Kt2Zufq2Roc6OGpOAebZYWgcj0RRII5 PsxWhvuYKw/Lg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 05/23] selftests: mptcp: rm subflow with v4/v4mapped addr Date: Thu, 18 Jan 2024 14:11:45 +0800 Message-Id: <4fb4501fdec6f950e7fece31b78b645235c10917.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Now both a v4 address and a v4-mapped address are supported when destroying a userspace pm subflow, this patch adds random tests for both addresses. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/387 Fixes: 48d73f609dcc ("selftests: mptcp: update userspace pm addr tests") Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 3a5b63026191..915ec79f5030 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3340,12 +3340,13 @@ userspace_pm_rm_sf() { local evts=3D$evts_ns1 local t=3D${3:-1} - local ip=3D4 + local ip local tk da dp sp local cnt =20 [ "$1" =3D=3D "$ns2" ] && evts=3D$evts_ns2 - if mptcp_lib_is_v6 $2; then ip=3D6; fi + [ -n "$(mptcp_lib_evts_get_info "saddr4" "$evts" $t)" ] && ip=3D4 + [ -n "$(mptcp_lib_evts_get_info "saddr6" "$evts" $t)" ] && ip=3D6 tk=3D$(mptcp_lib_evts_get_info token "$evts") da=3D$(mptcp_lib_evts_get_info "daddr$ip" "$evts" $t) dp=3D$(mptcp_lib_evts_get_info dport "$evts" $t) @@ -3448,7 +3449,11 @@ userspace_tests() chk_subflows_total 2 2 chk_mptcp_info add_addr_signal 1 add_addr_accepted 1 userspace_pm_rm_addr $ns1 10 - userspace_pm_rm_sf $ns1 "::ffff:10.0.2.1" $SUB_ESTABLISHED + if [ $((RANDOM%2)) -eq 0 ]; then + userspace_pm_rm_sf $ns1 ::ffff:10.0.2.1 $SUB_ESTABLISHED + else + userspace_pm_rm_sf $ns1 10.0.2.1 $SUB_ESTABLISHED + fi chk_rm_nr 1 1 invert chk_mptcp_info subflows 0 subflows 0 chk_subflows_total 1 1 --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 83D1E8F40 for ; Thu, 18 Jan 2024 06:12:17 +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=1705558337; cv=none; b=GPpcns5WkgB0rl8VnEPru3horjpJI5/fCM9PEHe3vxswwZmSp82bITlv6Yg3EOVuJkuBMRFjakOsdTe3vktQSrNVk0B/TuhjluYUeZ+nQU3hR4t8sdUSmfo5cRvnF809jQzh5G0lBIj5f27pNy5g2MajVsBdYRLWeSwJFfEORoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558337; c=relaxed/simple; bh=R1YiAPoeYvtDLUT2Kdo7R4fxqxuI943y84vpRK1qB2E=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=IUVRuT5XQ56WnvxCZlvnksNSs6rqow+G2o/Sh23EUundnDsgKqqHQZyf/7qoAGVY/QLyCkATdO0MOO5pDOm/kIaHvZb9ZAWCa66n5Be4fpsO1c4oNEsuNcVTco8Axy7T8Ridm511blpKDtAz5T/rNJ+1rnppIF41fw8P1Xpi/OE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=j7Ky8rug; 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="j7Ky8rug" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1AE73C433B1; Thu, 18 Jan 2024 06:12:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558337; bh=R1YiAPoeYvtDLUT2Kdo7R4fxqxuI943y84vpRK1qB2E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=j7Ky8rugSgDUT8/gy+V1UNoRPs79YJ6JhvAHkFzy8jQajZ8dTy5r4Z9bUIv5KaK3v EtG/UGzWUsqMdVM/6Fbv36VpOP7Gf4E0+vPIguP9TaL4c4F5oIFY1KIYH+sqbDPqRm GL8WEPYYHhWAjPMe4K0g2E0qtVNTkW9WiirVftxBiy1uwKv/gnih3mopsGU05egr4N bllP9oM2HSXH0WI3x8zSkvHsldFcIQtVa+qjym9hK1pbt+P+O5QABZhHzdAaiVfA3M QkJfm7IDsUmovVz9+BR9Y7xqy1hQsb6byTkXiVNBpRfKjhlesNO3w2v07XX5j2Kcji VzHTejCUYRvAg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 06/23] mptcp: export mptcp_genl_family & mptcp_nl_fill_addr Date: Thu, 18 Jan 2024 14:11:46 +0800 Message-Id: <04e2fc9358a9068a4d12296cf443460d53ed51fb.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch exports struct mptcp_genl_family and mptcp_nl_fill_addr() helper to allow them can be used in pm_userspace.c. Signed-off-by: Geliang Tang --- net/mptcp/pm_netlink.c | 9 +++------ net/mptcp/protocol.h | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index d158bfab1abc..1c3091fc4e1d 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -18,9 +18,6 @@ #include "protocol.h" #include "mib.h" =20 -/* forward declaration */ -static struct genl_family mptcp_genl_family; - static int pm_nl_pernet_id; =20 struct mptcp_pm_add_entry { @@ -1621,8 +1618,8 @@ int mptcp_pm_nl_flush_addrs_doit(struct sk_buff *skb,= struct genl_info *info) return 0; } =20 -static int mptcp_nl_fill_addr(struct sk_buff *skb, - struct mptcp_pm_addr_entry *entry) +int mptcp_nl_fill_addr(struct sk_buff *skb, + struct mptcp_pm_addr_entry *entry) { struct mptcp_addr_info *addr =3D &entry->addr; struct nlattr *attr; @@ -2266,7 +2263,7 @@ void mptcp_event(enum mptcp_event_type type, const st= ruct mptcp_sock *msk, nlmsg_free(skb); } =20 -static struct genl_family mptcp_genl_family __ro_after_init =3D { +struct genl_family mptcp_genl_family __ro_after_init =3D { .name =3D MPTCP_PM_NAME, .version =3D MPTCP_PM_VER, .netnsok =3D true, diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 0d634e01c47d..bfb1bfea83c3 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -341,6 +341,8 @@ struct mptcp_sock { #define mptcp_for_each_subflow_safe(__msk, __subflow, __tmp) \ list_for_each_entry_safe(__subflow, __tmp, &((__msk)->conn_list), node) =20 +extern struct genl_family mptcp_genl_family; + static inline void msk_owned_by_me(const struct mptcp_sock *msk) { sock_owned_by_me((const struct sock *)msk); @@ -964,6 +966,8 @@ void __mptcp_fastopen_gen_msk_ackseq(struct mptcp_sock = *msk, struct mptcp_subflo const struct mptcp_options_received *mp_opt); void mptcp_fastopen_subflow_synack_set_params(struct mptcp_subflow_context= *subflow, struct request_sock *req); +int mptcp_nl_fill_addr(struct sk_buff *skb, + struct mptcp_pm_addr_entry *entry); =20 static inline bool mptcp_pm_should_add_signal(struct mptcp_sock *msk) { --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 C15298F40 for ; Thu, 18 Jan 2024 06:12:18 +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=1705558338; cv=none; b=nGUY9w+40TJGpcjJIigqeJ3nttduFNrsylJBDs/yAp0wa7O7VNm+if5PdAa0AZZkAv0DOwUqWrbd/bzZwSu1rhflfdzyGUl6d/Hzks717rsAb3FfAPw5wEL+kadKc1oVYKsocdMpQeMV52H87d3YI39bngI5/4LMyxZSbAEDyfM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558338; c=relaxed/simple; bh=W/APShdzsrPHD0Vt6vCOHuhqdGiBreiDvU0CRPdO/gw=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=Z9uRp3Igbg5MfVWuUGJXrUj2iUUGSIwmi5UlStgS2dygltk2igclKnT4Q+BXLtOWIk18qxq4BIhvrzMDLntJDAdEoVrMrVHvHoNGUUemjMuq950hjv2THSkG7rNoiKR+y56UNgMV29o1CkTSmnxpuYp8sxF6ODnGJ7rq5n+F7rY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L6HxQyAc; 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="L6HxQyAc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7B06DC433A6; Thu, 18 Jan 2024 06:12:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558338; bh=W/APShdzsrPHD0Vt6vCOHuhqdGiBreiDvU0CRPdO/gw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=L6HxQyAcN/MrYia9ybb33XPeOvn1zXAHOgLaHtrLwme3pHvm4SIwbLvKTJQovMVRN FMQhYf2gPf0LXR2351vA3Tn4Niz0t9IlHPvL+wZboiZ3dH5rb5dasEIFsgrxcijIKf THs+RH3H9dmkRw3hiLKSm/IowyX+8cUrHI+JXOtaradK9Pzw7/yyxr3/XSVTF4f4oK vrpXMB/2iEfBbuPvU+lFVp+nZmzvlk98wBMkjgPiKZ1qPLiUkUEbbEFf9Am/c7nKm+ OiMHkSScXntFNZPJKapN6zQHMpYtcRqmaWuvIZCI8Smml4LAslH2Xagu4i9U7cklCD V4SLRj1BsKLZQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 07/23] mptcp: implement mptcp_userspace_pm_dump_addr Date: Thu, 18 Jan 2024 14:11:47 +0800 Message-Id: <603ed98d214c9038bf0091dec4de50d7441a4d88.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch implements mptcp_userspace_pm_dump_addr() to dump addresses from userspace pm address list. Use mptcp_token_get_sock() to get the msk from the given token, if userspace PM is enabled in it, traverse each address entry in address list, put every entry to userspace using mptcp_pm_nl_put_entry_msg(). Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 60 ++++++++++++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 2 ++ 2 files changed, 62 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 7bb3574cc65a..f1582f40f70e 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -574,3 +574,63 @@ int mptcp_userspace_pm_set_flags(struct net *net, stru= ct nlattr *token, sock_put(sk); return ret; } + +int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, + struct netlink_callback *cb) +{ + struct id_bitmap { + DECLARE_BITMAP(map, MPTCP_PM_MAX_ADDR_ID + 1); + } *bitmap; + const struct genl_info *info =3D genl_info_dump(cb); + struct net *net =3D sock_net(msg->sk); + struct mptcp_pm_addr_entry *entry; + struct mptcp_sock *msk; + struct nlattr *token; + int ret =3D -EINVAL; + struct sock *sk; + void *hdr; + + bitmap =3D (struct id_bitmap *)cb->ctx; + token =3D info->attrs[MPTCP_PM_ATTR_TOKEN]; + + msk =3D mptcp_token_get_sock(net, nla_get_u32(token)); + if (!msk) { + NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token"); + return ret; + } + + sk =3D (struct sock *)msk; + + if (!mptcp_pm_is_userspace(msk)) { + GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); + goto out; + } + + lock_sock(sk); + spin_lock_bh(&msk->pm.lock); + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (test_bit(entry->addr.id, bitmap->map)) + continue; + + hdr =3D genlmsg_put(msg, NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, &mptcp_genl_family, + NLM_F_MULTI, MPTCP_PM_CMD_GET_ADDR); + if (!hdr) + break; + + if (mptcp_nl_fill_addr(msg, entry) < 0) { + genlmsg_cancel(msg, hdr); + break; + } + + __set_bit(entry->addr.id, bitmap->map); + genlmsg_end(msg, hdr); + } + spin_unlock_bh(&msk->pm.lock); + release_sock(sk); + ret =3D msg->len; + +out: + sock_put(sk); + return ret; +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index bfb1bfea83c3..6d21223ec65d 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1032,6 +1032,8 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, = unsigned int remaining, int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_inf= o *skc); int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_a= ddr_info *skc); +int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, + struct netlink_callback *cb); =20 void __init mptcp_pm_nl_init(void); void mptcp_pm_nl_work(struct mptcp_sock *msk); --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 3252C8F40 for ; Thu, 18 Jan 2024 06:12:19 +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=1705558340; cv=none; b=OFK6NDq7FuuCrQNxvNc3K9e0VKAoazpSRZGKTcOlF4TQgEokHgrdQtLE6CchXoGqSZkmapNMFZPrv4p+/VGVNznOi7G2fMqOvhJ/YLxV45X72jZT7IDnAcCn3o7Z7O9VZNJeMnwVntg4GOty71JjLaKjlVxHoMK2cXTkj68pIDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558340; c=relaxed/simple; bh=aZ7hkh0awxFpyFz4tZITiwTCKprCqkdXtReB0vIBLZg=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=NaT9cxAtZm7SLjPN7tFeKOkQBj3i83fJhVebvQ3R6lH5uf5gu9tf0JEyjLa5GMKqnoEYzGXUvdTDZgcaioVt8nHBNyskqIQDe1/WJl03QX5ELoYQT5lLJWp0gCtEO0b7aDj4mnToxn2pX0FB2essbQdGhQLeMVfX7eqqDkS1Mko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=OylIRJ5e; 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="OylIRJ5e" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DF0ECC433B1; Thu, 18 Jan 2024 06:12:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558339; bh=aZ7hkh0awxFpyFz4tZITiwTCKprCqkdXtReB0vIBLZg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OylIRJ5ee9Sd/aTTeEykjf7AzqTSYfC3riMPuz2KZZhSYEYYcxZTBLZYIwzILAXtq HLvdUuXLmaADxVheg4G1R3wWRHKvNHSFt7GbqSCLaqC44bMIyWL5WxxHjf157zcDol aeuNOKJnoGsajE0o6jBPHio9WqNlMeyjO83q87XbwXDrbODVoYTY2miYtZuj2tEbyn PcQGhSAI7CDIwNchbFF4dr3iVzFRQcIYVP5ag7yC3b3MJNmi+DzpzvPaYcRnx1tLaX qOobCIz9h8estoWinQ0F239JwT3OrBl7oFZZaG/mAj1BS/43/ILeW7KHWFfvSCI7Kq 9dFLtgIoUI0aA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 08/23] mptcp: add token for get-addr in yaml Date: Thu, 18 Jan 2024 14:11:48 +0800 Message-Id: <7931494153892a3cbd6d3acb0c7925af2d5c9309.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds token paramenter together with addr in get-addr section in mptcp_pm.yaml, then use the following commands to update mptcp_pm_gen.c and mptcp_pm_gen.h: ./tools/net/ynl/ynl-gen-c.py --mode kernel \ --spec Documentation/netlink/specs/mptcp_pm.yaml --source \ -o net/mptcp/mptcp_pm_gen.c ./tools/net/ynl/ynl-gen-c.py --mode kernel \ --spec Documentation/netlink/specs/mptcp_pm.yaml --header \ -o net/mptcp/mptcp_pm_gen.h Signed-off-by: Geliang Tang --- Documentation/netlink/specs/mptcp_pm.yaml | 3 ++- net/mptcp/mptcp_pm_gen.c | 7 ++++--- net/mptcp/mptcp_pm_gen.h | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Documentation/netlink/specs/mptcp_pm.yaml b/Documentation/netl= ink/specs/mptcp_pm.yaml index 49f90cfb4698..af525ed29792 100644 --- a/Documentation/netlink/specs/mptcp_pm.yaml +++ b/Documentation/netlink/specs/mptcp_pm.yaml @@ -292,13 +292,14 @@ operations: - name: get-addr doc: Get endpoint information - attribute-set: endpoint + attribute-set: attr dont-validate: [ strict ] flags: [ uns-admin-perm ] do: &get-addr-attrs request: attributes: - addr + - token reply: attributes: - addr diff --git a/net/mptcp/mptcp_pm_gen.c b/net/mptcp/mptcp_pm_gen.c index 670da7822e6c..c30a2a90a192 100644 --- a/net/mptcp/mptcp_pm_gen.c +++ b/net/mptcp/mptcp_pm_gen.c @@ -32,8 +32,9 @@ const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP= _PM_ENDPOINT_ADDR + 1] }; =20 /* MPTCP_PM_CMD_GET_ADDR - do */ -const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOINT_ADDR= + 1] =3D { - [MPTCP_PM_ENDPOINT_ADDR] =3D NLA_POLICY_NESTED(mptcp_pm_address_nl_policy= ), +const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_TOKEN + = 1] =3D { + [MPTCP_PM_ATTR_ADDR] =3D NLA_POLICY_NESTED(mptcp_pm_address_nl_policy), + [MPTCP_PM_ATTR_TOKEN] =3D { .type =3D NLA_U32, }, }; =20 /* MPTCP_PM_CMD_FLUSH_ADDRS - do */ @@ -110,7 +111,7 @@ const struct genl_ops mptcp_pm_nl_ops[11] =3D { .doit =3D mptcp_pm_nl_get_addr_doit, .dumpit =3D mptcp_pm_nl_get_addr_dumpit, .policy =3D mptcp_pm_get_addr_nl_policy, - .maxattr =3D MPTCP_PM_ENDPOINT_ADDR, + .maxattr =3D MPTCP_PM_ATTR_TOKEN, .flags =3D GENL_UNS_ADMIN_PERM, }, { diff --git a/net/mptcp/mptcp_pm_gen.h b/net/mptcp/mptcp_pm_gen.h index ac9fc7225b6a..e24258f6f819 100644 --- a/net/mptcp/mptcp_pm_gen.h +++ b/net/mptcp/mptcp_pm_gen.h @@ -18,7 +18,7 @@ extern const struct nla_policy mptcp_pm_add_addr_nl_polic= y[MPTCP_PM_ENDPOINT_ADD =20 extern const struct nla_policy mptcp_pm_del_addr_nl_policy[MPTCP_PM_ENDPOI= NT_ADDR + 1]; =20 -extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ENDPOI= NT_ADDR + 1]; +extern const struct nla_policy mptcp_pm_get_addr_nl_policy[MPTCP_PM_ATTR_T= OKEN + 1]; =20 extern const struct nla_policy mptcp_pm_flush_addrs_nl_policy[MPTCP_PM_END= POINT_ADDR + 1]; =20 --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 922398F40 for ; Thu, 18 Jan 2024 06:12:21 +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=1705558341; cv=none; b=RuGIJ1mEDqF2wH51iUwTMavfazfWON/9eSDCePNlATBiCMqXLYxvCYKuVj1ca/P9gZlB2oTaJ25Ai+oJcjgEhB08QYB6p8SJCP9l6o58CDkvRWaOAb10fwzu/A+qz3GFDN//D++3ORacNmc9MwVUJhKm2KNbJuJVix1AMwwrMnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558341; c=relaxed/simple; bh=o9CBd1NO651N5VsFvB/EA6MeWlTwr2IJgduTHWT6/lc=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=Gve0d+JpnFloudV1DN2nYY0Wcra7/mYvg3S2Ee+Y7MdsD6R9+ORBkJqxuh1aurH0UC/4OxB5EbKurG2qNqPfZv1qySXfmogyR8qS4zuEqGPuacvFNcyZkJ+mKTVfFPhywlV0Uxe57Y7lDS235BZxY9As6PugFRIM3/IPKMwk0Cw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KkkrqEtd; 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="KkkrqEtd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48DA2C433A6; Thu, 18 Jan 2024 06:12:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558341; bh=o9CBd1NO651N5VsFvB/EA6MeWlTwr2IJgduTHWT6/lc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KkkrqEtdAD5snK73QI9KS4gq63YGmb0C3om7p+wV1nNZmZt1uq7wqojbmMgYG4m6t ymbQBcsEf3vrdq3qZtIycl6K09MKRXjcd6mhLdkKMloYp5Jnh6iy4WbItP3wMrgQF7 8z6AZzudbfVLRc/746cbSMHu9SVeg1sIxeKPP70tAKTZWxo1tWnH5hDc0893kP5IAS 9vfdJB/fsC/ZRQm4wDdALDbXWCErepK/T8+i6OLl+m7hMFg3b64I++qYu2hy6KlnH4 OSWLxQeqH2+vXYcbyxBEnupfjoo9AKPaw7dmfcann3uE/HYAVwoASndpVMT+OZ/8me DGOoitfbdElOg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 09/23] mptcp: dump addrs in userspace pm list Date: Thu, 18 Jan 2024 14:11:49 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch renames mptcp_pm_nl_get_addr_dumpit() as a dedicated in-kernel netlink PM dump addrs function mptcp_pm_nl_dump_addr(), and invoke a newly added wrapper mptcp_pm_dump_addr() in mptcp_pm_nl_get_addr_dumpit(). Invoke in-kernel PM dump addrs function mptcp_pm_nl_dump_addr() or userspace PM dump addrs function mptcp_userspace_pm_dump_addr() based on whether the token parameter is passed in or not in the wrapper. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 9 +++++++++ net/mptcp/pm_netlink.c | 10 ++++++++-- net/mptcp/protocol.h | 3 +++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 6856d10368be..481f8becc3b4 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -441,6 +441,15 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_= sock *msk, unsigned int id return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex); } =20 +int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) +{ + const struct genl_info *info =3D genl_info_dump(cb); + + if (info->attrs[MPTCP_PM_ATTR_TOKEN]) + return mptcp_userspace_pm_dump_addr(msg, cb); + return mptcp_pm_nl_dump_addr(msg, cb); +} + int mptcp_pm_set_flags(struct net *net, struct nlattr *token, struct mptcp_pm_addr_entry *loc, struct mptcp_pm_addr_entry *rem, u8 bkup) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 1c3091fc4e1d..6fedf271e26d 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1707,8 +1707,8 @@ int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, st= ruct genl_info *info) return ret; } =20 -int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, - struct netlink_callback *cb) +int mptcp_pm_nl_dump_addr(struct sk_buff *msg, + struct netlink_callback *cb) { struct net *net =3D sock_net(msg->sk); struct mptcp_pm_addr_entry *entry; @@ -1750,6 +1750,12 @@ int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, return msg->len; } =20 +int mptcp_pm_nl_get_addr_dumpit(struct sk_buff *msg, + struct netlink_callback *cb) +{ + return mptcp_pm_dump_addr(msg, cb); +} + static int parse_limit(struct genl_info *info, int id, unsigned int *limit) { struct nlattr *attr =3D info->attrs[id]; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 6d21223ec65d..0dc3891a45d4 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1032,6 +1032,9 @@ bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, = unsigned int remaining, int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct mptcp_addr_inf= o *skc); int mptcp_userspace_pm_get_local_id(struct mptcp_sock *msk, struct mptcp_a= ddr_info *skc); +int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); +int mptcp_pm_nl_dump_addr(struct sk_buff *msg, + struct netlink_callback *cb); int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); =20 --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 E73698F40 for ; Thu, 18 Jan 2024 06:12:22 +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=1705558343; cv=none; b=T/rdp/HU9aeq48cpZWBpAI1/qH8FtDDrnjUqp3L7xWglXsWLagimF2uylvHraJ8E3aJaOYdqgxKXSrbQ4hIXRJoFWFKnv383JHd3FS7G5zl/Y/esYpc1aryQoa5Jt6YmugFtw5SrFmOsb20LKh5IaxKhQI50PIClWt5uY4GBIBs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558343; c=relaxed/simple; bh=3fKvukoQ+7FVQf5NasRfHkCE/Po8JfVoKycNgzHFYnQ=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=JaHyatebkTR7hX/w7unZCKryqcRZq8dJUySQnfIVq+F6iZPO/hezTKLocNtbtTaeZLdO2Nngev8cRZlCaRzYvhPf6MGah46VUs8QFgNq+GBcuj5NamvmjrPuBsxqPxmNQpJHu0oNSUDcJZGiZMmblzFUua4oGUVTcn2S7a+efVg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MumpKQzY; 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="MumpKQzY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9F7EFC433B1; Thu, 18 Jan 2024 06:12:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558342; bh=3fKvukoQ+7FVQf5NasRfHkCE/Po8JfVoKycNgzHFYnQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MumpKQzYQRCrd+rs458t3FG4HdadGgcdgLbUhv9HDE9zZEKVnscKN0HZtFIEdpw5O Auu8rMMRfgdtVBsFwiSoO+Q+KcXEzM0mblmAbqi1gMrthbp+2whAwL/SqSHviQ6Y8I 7zVi7l1HmYhwTzATMEn7sSA5KavCyjgA9/dUQJuJYH+ntOJXPIo6XCylri2pZ2mbz9 mIoV+VxukfsbXBtrq+FEsbab44mXOcsdbMQh+bhK3Fa1D5isKwRxmJ9mFLkOmXqy2K Y/u/tB5Yg3fw5467fthfoNwBImn2lrhRh4XxOVRbLc9Br7miK51X9C/vuE3L+i7Cbx TtQ41Il421mSg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 10/23] mptcp: check userspace pm subflow flag Date: Thu, 18 Jan 2024 14:11:50 +0800 Message-Id: <8df3db253cf4e880813e2b499b12887904474736.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Just like MPTCP_PM_ADDR_FLAG_SIGNAL flag is checked in userspace PM announce mptcp_pm_nl_announce_doit(), MPTCP_PM_ADDR_FLAG_SUBFLOW flag should be checked in mptcp_pm_nl_subflow_create_doit() too. If MPTCP_PM_ADDR_FLAG_SUBFLOW flag is not set, there's no flags field in the output of dump_addr. This looks a bit strange: id 10 flags 10.0.3.2 This patch uses mptcp_pm_parse_entry() instead of mptcp_pm_parse_addr() to get the flags of the entry. Add MPTCP_PM_ADDR_FLAG_SUBFLOW flag check in mptcp_pm_nl_subflow_create_doit(). Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index f1582f40f70e..ca0d6e1dfade 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -361,11 +361,18 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *s= kb, struct genl_info *info) goto create_err; } =20 - err =3D mptcp_pm_parse_addr(laddr, info, &addr_l); + err =3D mptcp_pm_parse_entry(laddr, info, true, &local); if (err < 0) { NL_SET_ERR_MSG_ATTR(info->extack, laddr, "error parsing local addr"); goto create_err; } + addr_l =3D local.addr; + + if (!(local.flags & MPTCP_PM_ADDR_FLAG_SUBFLOW)) { + GENL_SET_ERR_MSG(info, "invalid addr flags"); + err =3D -EINVAL; + goto create_err; + } =20 err =3D mptcp_pm_parse_addr(raddr, info, &addr_r); if (err < 0) { @@ -379,7 +386,6 @@ int mptcp_pm_nl_subflow_create_doit(struct sk_buff *skb= , struct genl_info *info) goto create_err; } =20 - local.addr =3D addr_l; err =3D mptcp_userspace_pm_append_new_local_addr(msk, &local, !mptcp_pm_has_addr_attr_id(laddr, info)); if (err < 0) { --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 5CB9C8F40 for ; Thu, 18 Jan 2024 06:12:23 +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=1705558345; cv=none; b=gcd6IZ5nPMk7QzW9dBSbvnyuqx18YzcZ832/XDCgWq90WrLAxwTywQj4ekmOSfxT68QxZ24NzN15xpjyAx5iOJbusmL5atgVkFYp/7Pwx0P0WbCrmeX1tNnRICn8Wf+sPP0nRVCiBdUXz2KOy6dYHyRKyJV7epKxoxs0P63/vGE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558345; c=relaxed/simple; bh=JRMj/SLzyGIOFS6blXMUY3ImOv8wI4WGrPWCLtVXACs=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=uPj5rPpfJIv2+fr3P8ysHrUjzylYbmOGSYqzYcAqfM9/i+Zm4lF3vEK4fBq990uayC7NKRYcDANGf6XDPKZ6nyQ0DAsRo61qlpr7iGPGZCkCkTIiPTM6vmT5snSZXgmyLNTxoxSW0ke7t3xwey87xt6+YcwtfNIJBrPLZuem+Ho= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F/Oit81k; 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="F/Oit81k" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 008FCC433A6; Thu, 18 Jan 2024 06:12:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558343; bh=JRMj/SLzyGIOFS6blXMUY3ImOv8wI4WGrPWCLtVXACs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=F/Oit81kCyyB910C1hYkuMJKemJJsk4+xfO4KE7pi7VJ1PEQ7lReBgA3pH+Wpwl26 a5RAOiu2yI9Na6UR1dK7yY5MYPlUK4VjKShwl2FclBA8pFT7CReRQ8rUwNgXgds0yW q2cbB4vbVGvFOMLBOWJAYwGoblogBRCaTh7k6sqA1DqWO1E9u8T+PXcwnGt4CY5kn4 +9m+Ehz3rVZ3cctXALsAt8hZqRPuNzN8rDh3r4aiuAY7RlQAzm3VIRzJIyBU0SN9k4 CS7ckUdPayD+jMTz/1j3xdd16zASyUEXPyU6HvwsGva7F8+3eP34leG5sqWNMQpCS0 1LlWrnuv4W1LQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 11/23] selftests: mptcp: add userspace pm subflow flag Date: Thu, 18 Jan 2024 14:11:51 +0800 Message-Id: <4330616e91c0ae496a82619423ae00448b905a0b.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds the address flag MPTCP_PM_ADDR_FLAG_SUBFLOW in csf() in pm_nl_ctl.c when subflow is created by a userspace PM. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index 49369c4a5f26..e97856323ec3 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -453,6 +453,7 @@ int csf(int fd, int pm_family, int argc, char *argv[]) char data[NLMSG_ALIGN(sizeof(struct nlmsghdr)) + NLMSG_ALIGN(sizeof(struct genlmsghdr)) + 1024]; + u_int32_t flags =3D MPTCP_PM_ADDR_FLAG_SUBFLOW; const char *params[5]; struct nlmsghdr *nh; struct rtattr *addr; @@ -558,6 +559,13 @@ int csf(int fd, int pm_family, int argc, char *argv[]) off +=3D NLMSG_ALIGN(rta->rta_len); } =20 + /* addr flags */ + rta =3D (void *)(data + off); + rta->rta_type =3D MPTCP_PM_ADDR_ATTR_FLAGS; + rta->rta_len =3D RTA_LENGTH(4); + memcpy(RTA_DATA(rta), &flags, 4); + off +=3D NLMSG_ALIGN(rta->rta_len); + addr->rta_len =3D off - addr_start; } =20 --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 907EA8F51 for ; Thu, 18 Jan 2024 06:12:25 +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=1705558345; cv=none; b=XfcIuiVIgZ67Wsvxokn2OwqfvxY8N4ohjsa6gduBz1OS06z+7Sfdi+EwNieJx5/z75CXDlGLCjk5Jog0HXudxBAw8CyIMO1Ol2B+ygS3UN45XlSuQ1w9guFuanznYmMj/NcDFFMY8GwUkMYu8EkzC3bWEIJFiOEqHIVQ57qhhFA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558345; c=relaxed/simple; bh=tERbG7TJiLpb8EzivoIRerccEx0mGGYaF5MyxCkw9Rk=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=QiMt3HjvbJTrp44LCs2uDO1Nz6risJaiET48q+fDA9VPEowKTfS404SHpdP1xRjeFnXmYqhR39V8x3POi2E67GpQ+dw3WC+BS2pU9T/rhFf4TdZOtRGCWKEpOudViX5TKdO6EaODglunY/8Wqo75rEPc1cArb9RSebbAZ8CAv9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=YdZ0g0Lh; 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="YdZ0g0Lh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 59017C433F1; Thu, 18 Jan 2024 06:12:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558345; bh=tERbG7TJiLpb8EzivoIRerccEx0mGGYaF5MyxCkw9Rk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YdZ0g0LhGToCnIFS/HJvFOt0q0X1NCFSmZRCIwMqCuW5VWP0V6YZAAGDLrSWYjbXR 3S9injopvUjrKzGdj7jLYO3bln3NmW1b81b7oNo8FKmvn7FWcbEDr76JZNBCt19+GB ed6z2paRR6kMlugLJ3Kp34R1Nny/LhEmNZcvneX/o2wXugdEW3E33cuBbbj6zCTJJd vCI6n6KzH/0yUs36/4QRoty6Ft7feWDulfP5UhvB4Zz33IvYcjbn+bYjSVVLe7kaFh Nm7Proee/NqN8Cz1VjWsYUj0lG2SyXvTL3iux1qqF/H0RxE6uonC+eZER6Y0HDBA6T prLUm/rJk3JpA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 12/23] selftests: mptcp: add token for dump_addr Date: Thu, 18 Jan 2024 14:11:52 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang The command dump_addr() of pm_nl_ctl can be used like this in in-kernel PM: pm_nl_ctl dump This patch adds token argument for it to support userspace PM: pm_nl_ctl dump token $token If 'token $token' is passed to dump_addr(), copy it into the kernel netlink. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index e97856323ec3..8d7d1b4ed28e 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -1127,8 +1127,16 @@ int dump_addrs(int fd, int pm_family, int argc, char= *argv[]) 1024]; pid_t pid =3D getpid(); struct nlmsghdr *nh; + u_int32_t token =3D 0; + struct rtattr *rta; int off =3D 0; =20 + if (argc !=3D 2 && argc !=3D 4) + syntax(argv); + + if (argc =3D=3D 4 && !strcmp(argv[2], "token")) + token =3D strtoul(argv[3], NULL, 10); + memset(data, 0, sizeof(data)); nh =3D (void *)data; off =3D init_genl_req(data, pm_family, MPTCP_PM_CMD_GET_ADDR, @@ -1138,6 +1146,15 @@ int dump_addrs(int fd, int pm_family, int argc, char= *argv[]) nh->nlmsg_pid =3D pid; nh->nlmsg_len =3D off; =20 + /* token */ + if (token) { + rta =3D (void *)(data + off); + rta->rta_type =3D MPTCP_PM_ATTR_TOKEN; + rta->rta_len =3D RTA_LENGTH(4); + memcpy(RTA_DATA(rta), &token, 4); + off +=3D NLMSG_ALIGN(rta->rta_len); + } + print_addrs(nh, pm_family, do_nl_req(fd, nh, off, sizeof(data))); return 0; } --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 B7D4B8F51 for ; Thu, 18 Jan 2024 06:12:26 +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=1705558346; cv=none; b=B6R9eCEIMdjp5np/OCOnsabppvLvxq58N/cPvVscPm+6inhoUWI0R5/u+vnwRS85ghzrt1mjMQ9mMW51hV8XdjjeKtp3a49czK5nVJDrRgH3CqNgSSfwSqxy7QARjfFe8p/fIVkR+2KUNXBeED0ZyBBWEIzNRxYwHvNnKERq6zg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558346; c=relaxed/simple; bh=T9k/GMdCd2AwDOgtpravWZEHCJsp8pFYszNmnMGiuio=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=DkhkqdslrhpvjilNnMXt3ldimWf3AmehXmVbZBAib8F6bn+ANbVTUqMYrxbFhBDjdtoJ4SBqn2T5hpY+4WbBLlpaR9tRd18Z9+MqxLB+qwK6rnFjY8N7qVQOgec/QRKf0Fk9uZduID/wSvI1m4tzjzREpw6zX41QxHXtuZITc/Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jTEdIUAn; 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="jTEdIUAn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BEFD3C433F1; Thu, 18 Jan 2024 06:12:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558346; bh=T9k/GMdCd2AwDOgtpravWZEHCJsp8pFYszNmnMGiuio=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jTEdIUAnWb6zOugydOE9yiAKOhbAXuXay5GfhWyVOhU8acm2OAzNXwp1RH5WddTKx zdTn/UiJgyDA8S/eA97oR1HW9AGMSWZbE0yayYHOIW6Kj3KIC2xKmVhEfG4cvdORW3 QCuTdHs8jFeukukAhBUqeHgp/NkPHIoyLcIf9I7Qx/ASm7AawQP8bMEjRLJE3TP2ue nHaCxpE2RRkGNYcqxMJeOpLCFsElccd9CjFrNsvdD3URiz7Ktaj9RwBnnSkKJ+vgtX kwZA/weSU7CkCYeYvzh05xKLietrKu2ZbcMwVaXcaQyeDJgZGdLFLCl8aLkiQMo6BF Uk98LvDSDpj1w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 13/23] selftests: mptcp: add check_output helper Date: Thu, 18 Jan 2024 14:11:53 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Similar to check() in pm_netlink.sh, add a new helper check_output() in mptcp_join.sh to check the output of the given commands. Signed-off-by: Geliang Tang --- .../testing/selftests/net/mptcp/mptcp_join.sh | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 915ec79f5030..f4043baa59c6 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -21,6 +21,7 @@ cinfail=3D"" cinsent=3D"" tmpfile=3D"" cout=3D"" +check_output_err=3D"" capout=3D"" ns1=3D"" ns2=3D"" @@ -186,6 +187,7 @@ init() { cout=3D$(mktemp) evts_ns1=3D$(mktemp) evts_ns2=3D$(mktemp) + check_output_err=3D$(mktemp) =20 trap cleanup EXIT =20 @@ -199,6 +201,7 @@ cleanup() rm -f "$sin" "$sout" "$cinsent" "$cinfail" rm -f "$tmpfile" rm -rf $evts_ns1 $evts_ns2 + rm -f $check_output_err cleanup_partial } =20 @@ -3358,6 +3361,30 @@ userspace_pm_rm_sf() wait_rm_sf $1 "${cnt}" } =20 +check_output() +{ + local cmd=3D"$1" + local expected=3D"$2" + local msg=3D"$3" + local out=3D`$cmd 2>$check_output_err` + local cmd_ret=3D$? + + printf "%-42s" "$msg" + if [ $cmd_ret -ne 0 ]; then + mptcp_lib_print_err "[ FAIL ] command execution '$cmd' stderr " + cat $check_output_err + ret=3D${KSFT_FAIL} + return $cmd_ret + elif [ "$out" =3D "$expected" ]; then + mptcp_lib_print_ok "[ OK ]" + return 0 + else + mptcp_lib_print_err "[ FAIL ] expected '$expected' got '$out'" + ret=3D${KSFT_FAIL} + return 1 + fi +} + userspace_tests() { # userspace pm type prevents add_addr --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 54E6B8F51 for ; Thu, 18 Jan 2024 06:12:28 +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=1705558348; cv=none; b=J0SOZIy7mjfrJco/eNDcuag7xd2T9AkvviS2PJhnChac1gDb5vTvE/+pShm6nHCpzqZS2Ec+36uBLZYC956BlAR9MNya6r/cKl1w6DTWJyBLgTdEE70VrU3yXUUgkNxNM2zs2GLpZ7IAv+w2dwlIAIEF8p8wr73KFUyJvpwSRw8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558348; c=relaxed/simple; bh=eEF+kQ86yyD7TIQk0f5UX8EXFVpTF/MVPzfSM/OMBNk=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=ovnjC5W/oRmNVidpOXx7CWeaKKJI2OxTOT+fLX8Q3L/GLAypAH5sHnWQsEnifN+mHKEYO9vXM25Cakvf1yea4A6Hr9XRTMRTMKRnhmuiA71bOkMrezzze+s+0rR8s7u6nITtXZ2hLaZjCM7KmebDRk6Ci8K0hK0FmbDqaWYnfuc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ItRheYPE; 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="ItRheYPE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1A8A1C433B2; Thu, 18 Jan 2024 06:12:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558347; bh=eEF+kQ86yyD7TIQk0f5UX8EXFVpTF/MVPzfSM/OMBNk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ItRheYPEKwygLfYcLzsPkMtLglfES1Kv8LMOtZme1kN07gR+P4AMLJkF/lv82N8I3 jJEHezvGULEoiCRjnz6hNOYD6t24cIoc9DlCqaLW5+qgMINKcrJEcdxbePYYv4B/aT M6INd6t61i5t0EOVshsHNbBB+TDlbh5/fG/Y7X5fw5BHrMTr/Fm4hSLbmnfTOU6iRH WggBxYE2wY92lsS1QX1LjHRUBN7k3PKcKbeBGOJngvQMamwo1NGdRtSNSPfhnJId6f MbtGDEQB2NLhOB1fgEaieJhKLpjE9PSC9lFv59sv3usksmDqEhh+C/CSvFCkDPtVVn S2UAmShuNwCXg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 14/23] selftests: mptcp: dump after creating id 0 subflow Date: Thu, 18 Jan 2024 14:11:54 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds a new helper userspace_pm_dump() to dump addresses for the userspace PM. Use this helper to check whether an ID 0 subflow is listed in the output of dump command after creating an ID 0 subflow in "userspace pm create id 0 subflow" test. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index f4043baa59c6..a92fb5469621 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3361,6 +3361,18 @@ userspace_pm_rm_sf() wait_rm_sf $1 "${cnt}" } =20 +# $1: ns +userspace_pm_dump() +{ + local evts=3D$evts_ns1 + local tk + + [ "$1" =3D=3D "$ns2" ] && evts=3D$evts_ns2 + tk=3D$(mptcp_lib_evts_get_info token "$evts") + + ip netns exec $1 ./pm_nl_ctl dump token $tk +} + check_output() { local cmd=3D"$1" @@ -3522,6 +3534,9 @@ userspace_tests() chk_mptcp_info subflows 0 subflows 0 chk_subflows_total 1 1 userspace_pm_add_sf $ns2 10.0.3.2 0 + check_output "userspace_pm_dump $ns2" \ + "id 0 flags subflow 10.0.3.2" \ + " dump addrs id 0 subflow" chk_join_nr 1 1 1 chk_mptcp_info subflows 1 subflows 1 chk_subflows_total 2 2 --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 765C88F4F for ; Thu, 18 Jan 2024 06:12:29 +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=1705558349; cv=none; b=hLgejUqKDxkA2EzlbP7Bx9XgvG0soa+7xx2Sq1H1y/SumgtVt8Bjz4t01Qp9ydVhsqL7Wbsq3Z+crv9q418DYfO7b9R6BafvJ7bJa64NHSdDkNlJy64LUK5+8XVsoU+TjcQv6+AovZPb0Ph7rkbKljKDCHN76HY8dIa0jORuqlk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558349; c=relaxed/simple; bh=5k466pzbsTo7vHRUFh3719eMpMsDDPQyCTTC5vt4/Fw=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=YMFLp0I9cfUtG44439YI4+T6w95P1rlCFX+a5/pX+x3cZ6rNdn1hjqQ0IkvJCz6sY0NJJ1FRL/WMYhfmiVwEzPkn9DZIakxYyeb+dT/TwrvbD+TqshI/ZNsQYrh9BZdVUEL89tj7OFTywtGPWM+NtnAW1xP5RI+Nx/iDEEc2pMA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZP0nRtlY; 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="ZP0nRtlY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 78BECC433A6; Thu, 18 Jan 2024 06:12:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558349; bh=5k466pzbsTo7vHRUFh3719eMpMsDDPQyCTTC5vt4/Fw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZP0nRtlY/n/Au3dT159aqpPLtOjYVOz7yr3ASv6PBO11KZ0+tvScxYDkvYFq1zyUi 68lXcpKU066qsd3E2eTciN8FqEeLsJPW/bgBN9U4OlOovb3umLFWYXG9m870icJVrl qs9PbC+Az9aZXquIcAhAHmYvP6STDWosjlWbyrgQSU0u1Tan3nuLATNW0uy+W47WuN 379ojvDMOc6yCc7079/L275jayTERRU6XOdaMoU93lYgjP2ym4dbujBK7H+uhVsMGX /FveO3swBYSyYa4fwOU8O+UTyhcjBCO+3slzdu5YTXhg5QFazZM0JwwQfdIclDMkxt rDztILdKU3Cpw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 15/23] selftests: mptcp: dump userspace addrs list Date: Thu, 18 Jan 2024 14:11:55 +0800 Message-Id: <544973adc086c0fff7cd2896ff260434bb1231dc.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds two new tests for userspace pm dump address and subflow. Use userspace_pm_add_addr() and userspace_pm_add_sf() to add an address and a suflow. Signed-off-by: Geliang Tang --- .../testing/selftests/net/mptcp/mptcp_join.sh | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index a92fb5469621..cec4bfc5193b 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3593,6 +3593,50 @@ userspace_tests() kill_events_pids wait $tests_pid fi + + # userspace pm dump address + if reset_with_events "userspace pm dump address" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then + set_userspace_pm $ns1 + pm_nl_set_limits $ns2 1 1 + speed=3D5 \ + run_tests $ns1 $ns2 10.0.1.1 & + local tests_pid=3D$! + wait_mpj $ns1 + userspace_pm_add_addr $ns1 10.0.2.1 10 + chk_join_nr 1 1 1 + chk_add_nr 1 1 + chk_mptcp_info subflows 1 subflows 1 + chk_subflows_total 2 2 + chk_mptcp_info add_addr_signal 1 add_addr_accepted 1 + local dump=3D"id 10 flags signal 10.0.2.1" + check_output "userspace_pm_dump $ns1" \ + "$dump" " dump addrs signal" + kill_events_pids + wait $tests_pid + fi + + # userspace pm dump subflow + if reset_with_events "userspace pm dump subflow" && + continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then + set_userspace_pm $ns2 + pm_nl_set_limits $ns1 0 1 + speed=3D5 \ + run_tests $ns1 $ns2 10.0.1.1 & + local tests_pid=3D$! + wait_mpj $ns2 + chk_mptcp_info subflows 0 subflows 0 + chk_subflows_total 1 1 + userspace_pm_add_sf $ns2 10.0.3.2 20 + chk_join_nr 1 1 1 + chk_mptcp_info subflows 1 subflows 1 + chk_subflows_total 2 2 + local dump=3D"id 20 flags subflow 10.0.3.2" + check_output "userspace_pm_dump $ns2" \ + "$dump" " dump addrs subflow" + kill_events_pids + wait $tests_pid + fi } =20 endpoint_tests() --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 3F94E8F40 for ; Thu, 18 Jan 2024 06:12:30 +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=1705558351; cv=none; b=bV2TGDrkkWAQzH+ZhvIf7nC3LFZkb/Ah1FurknGcvdrYe6QvkGKLiPi71LQRentO4ZF+dDz5L2PnDZ/uKZE4XEXEn9JND6Djxl1UlGrQQ4icLfZL5SXmClU9jVmKZ1bs0r+amMx2Nkb8PMxRoxB11lv4oYTMgWlgOpxPCLj07Jg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558351; c=relaxed/simple; bh=9w6i/K4JXfNNU/2JdoJLlyE+spjQx4z8xVbbLIFwh54=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=Plg+8n+1QR8PIZGfpojKBucCrnKq7fwYtohVR4L+M0nJDm5mEPjE4o6vu5aGBIRsDS+gHBahzvWPXE7XCt9m0R2mIDWRYzpvFGLHJDo6BP5nB2PwWqUH0cGT+V9YX/jXzuxx83afUmj7keIhYeonV82/2wGNAhOeW7N+Uvx3JYs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=igcm2LeT; 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="igcm2LeT" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E7E34C43601; Thu, 18 Jan 2024 06:12:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558350; bh=9w6i/K4JXfNNU/2JdoJLlyE+spjQx4z8xVbbLIFwh54=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=igcm2LeTkk1fte0Cua+DzEeAqUr7DtW2SBqlAVQgo8BbxDg7QUjPDXcDEeQAa3Wxi QMrErDVyKLftxwhxPUXwKtbeyynkCvq/V0NqnuS9m8EY9/mZb3B14o4i7K6jx01ORv aNAVgJhiAwoiKtS+Em7r3QQaV2g3J3w68X34HL6V7xbtav4E0HI222B3WEzQXW0fYp NNeQ4PzjYsxVUcnKam+Q86pIfkMMEyKYCSLh+mEOqEs93PIJnAivPf92mSiT+oJCsz hB9dbRA3ATEyFt+JewCRWeomryQm2ri0RGo7RH8DPt2eSZ9iUl5zGhnvGppqF6dx6N JrF5BSsynYO1A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 16/23] mptcp: add userspace_pm_lookup_addr_by_id helper Date: Thu, 18 Jan 2024 14:11:56 +0800 Message-Id: <1b48e005d654f6e68a515eb3aa819bca58af09ff.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Corresponding __lookup_addr_by_id() helper in the in-kernel netlink PM, this patch adds a new helper mptcp_userspace_pm_lookup_addr_by_id() to lookup the address entry with the given id on the userspace pm local address list. Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index ca0d6e1dfade..d1457a443b78 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -106,19 +106,26 @@ static int mptcp_userspace_pm_delete_local_addr(struc= t mptcp_sock *msk, return -EINVAL; } =20 +static struct mptcp_pm_addr_entry * +mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int = id) +{ + struct mptcp_pm_addr_entry *entry; + + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (entry->addr.id =3D=3D id) + return entry; + } + return NULL; +} + int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, u8 *flags, int *ifindex) { - struct mptcp_pm_addr_entry *entry, *match =3D NULL; + struct mptcp_pm_addr_entry *match; =20 spin_lock_bh(&msk->pm.lock); - list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { - if (id =3D=3D entry->addr.id) { - match =3D entry; - break; - } - } + match =3D mptcp_userspace_pm_lookup_addr_by_id(msk, id); spin_unlock_bh(&msk->pm.lock); if (match) { *flags =3D match->flags; @@ -262,7 +269,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct= genl_info *info) { struct nlattr *token =3D info->attrs[MPTCP_PM_ATTR_TOKEN]; struct nlattr *id =3D info->attrs[MPTCP_PM_ATTR_LOC_ID]; - struct mptcp_pm_addr_entry *match =3D NULL; + struct mptcp_pm_addr_entry *match; struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; LIST_HEAD(free_list); @@ -299,13 +306,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struc= t genl_info *info) =20 lock_sock(sk); =20 - list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { - if (entry->addr.id =3D=3D id_val) { - match =3D entry; - break; - } - } - + match =3D mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); release_sock(sk); --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 534F88F40 for ; Thu, 18 Jan 2024 06:12:32 +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=1705558352; cv=none; b=NzeB1fG8Sm/NyadOrNYyOjnElthYvJIoJwmr8gNxWasQKxpHx7aJ2iPp1vZieZvM3LoQlaF2k55QZZiCI+TRpMx/0pIeTQ//Z0Qnu2dMNwS2/4BE5SGHnHVN85DhUOUBcTRv9dbAzPDCR/lxdYqYPLvPwLqeQ8V7ULrLYeL92c8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558352; c=relaxed/simple; bh=zxyC4CL0nD+8Jn1vLH37dOwErw6hURhDw96BatMMezA=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=TFdR4MRUSDkE6uWOrfiHkp+JAQ+Zmx548w4S4eiui0nl9PBL51gjj/KM5TSuyuM/zWHY57EW735JvY2D5GAzlPoXQAnmYEHDGWMMQzqUEDjGelLZ8xD0x84x9otR5XmF7nNsSGXQxZXYdtWG/WgmJKCO5W1AtjU4gLOAvG8hBDE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cHcKe2CS; 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="cHcKe2CS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48EB5C433A6; Thu, 18 Jan 2024 06:12:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558352; bh=zxyC4CL0nD+8Jn1vLH37dOwErw6hURhDw96BatMMezA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cHcKe2CSAM4LTeO8Wwb4YGQ/rDWD4fghsEwZUMWiKg3sqmb1AyBr2sXlqbzhAw89g LDLi1i+xl4F9jhdtMvytSPVJBisRTEnZhR8E+F4NhTUEjACyKW/Q9T8UCOvrCkqiFP u6RuRHUkHgITnmxhF8gYPAzcGkYfbviIFVPpSM0V65aPFAejZ7iICGQRenR7Cmhtt/ coTA9a9G71ZTl8rWXlFeV/EnrrrgL03ZQ0TvjMEQ2cKBGEdu/r8OKJfvykFgKFczzf +EZie6jVZRzsYUPMcOkuZNTw2+HVkLr5xsxCF+ZW7KxVgFj0nbt4sQXJyhe3ASgvBL v8L1HCHV+Ma7A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 17/23] mptcp: implement mptcp_userspace_pm_get_addr Date: Thu, 18 Jan 2024 14:11:57 +0800 Message-Id: <197456a7042927d2f0669e672eec3b37fc43fa2a.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch implements mptcp_userspace_pm_get_addr() to get an address from userspace pm address list according the given 'token' and 'id'. Use nla_get_u32() to get the u32 value of 'token', then pass it to mptcp_token_get_sock() to get the msk. Pass 'msk' and 'id' to the helper mptcp_userspace_pm_lookup_addr_by_id() to get the address entry. Put this entry to userspace using mptcp_pm_nl_put_entry_info(). Signed-off-by: Geliang Tang --- net/mptcp/pm_userspace.c | 74 ++++++++++++++++++++++++++++++++++++++++ net/mptcp/protocol.h | 2 ++ 2 files changed, 76 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index d1457a443b78..96620038a4e9 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -641,3 +641,77 @@ int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, sock_put(sk); return ret; } + +int mptcp_userspace_pm_get_addr(struct sk_buff *skb, + struct genl_info *info) +{ + struct nlattr *attr =3D info->attrs[MPTCP_PM_ENDPOINT_ADDR]; + struct nlattr *token =3D info->attrs[MPTCP_PM_ATTR_TOKEN]; + struct mptcp_pm_addr_entry addr, *entry; + struct net *net =3D sock_net(skb->sk); + struct mptcp_sock *msk; + struct sk_buff *msg; + int ret =3D -EINVAL; + struct sock *sk; + void *reply; + + msk =3D mptcp_token_get_sock(net, nla_get_u32(token)); + if (!msk) { + NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token"); + return ret; + } + + sk =3D (struct sock *)msk; + + if (!mptcp_pm_is_userspace(msk)) { + GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); + goto out; + } + + ret =3D mptcp_pm_parse_entry(attr, info, false, &addr); + if (ret < 0) + goto out; + + msg =3D nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); + if (!msg) { + ret =3D -ENOMEM; + goto out; + } + + reply =3D genlmsg_put_reply(msg, info, &mptcp_genl_family, 0, + info->genlhdr->cmd); + if (!reply) { + GENL_SET_ERR_MSG(info, "not enough space in Netlink message"); + ret =3D -EMSGSIZE; + goto fail; + } + + lock_sock(sk); + spin_lock_bh(&msk->pm.lock); + entry =3D mptcp_userspace_pm_lookup_addr_by_id(msk, addr.addr.id); + if (!entry) { + GENL_SET_ERR_MSG(info, "address not found"); + ret =3D -EINVAL; + goto unlock_fail; + } + + ret =3D mptcp_nl_fill_addr(msg, entry); + if (ret) + goto unlock_fail; + + genlmsg_end(msg, reply); + ret =3D genlmsg_reply(msg, info); + spin_unlock_bh(&msk->pm.lock); + release_sock(sk); + sock_put(sk); + return ret; + +unlock_fail: + spin_unlock_bh(&msk->pm.lock); + release_sock(sk); +fail: + nlmsg_free(msg); +out: + sock_put(sk); + return ret; +} diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 0dc3891a45d4..e2a8833bca05 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1037,6 +1037,8 @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); +int mptcp_userspace_pm_get_addr(struct sk_buff *skb, + struct genl_info *info); =20 void __init mptcp_pm_nl_init(void); void mptcp_pm_nl_work(struct mptcp_sock *msk); --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 A42988F40 for ; Thu, 18 Jan 2024 06:12:33 +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=1705558353; cv=none; b=jf2NdCnpQEvI/r0Y0shEanV+oJnBE9rOSw6qNll+6/CTrG69OFMl1ZcradLHDGFToPs7pX5BgZ2GSOsiTAaikiVPQf+AzUcyjEcNHgwEC8dK+ila9g1Zq2PChBQy4w/nWSwaLn3yCwNnHcyCOyA0wEZFm7tAz8y/IGDn7Shdt4o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558353; c=relaxed/simple; bh=YwvQ7oPWRudLqfFMGu68GfF9V2i2lmBKHkUq+IOfIdo=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=JAz3Dgli5eztQjPM1raxLE9zyzPq+tEohIrgdOX7y444GhVOahQJ5jIv79brXKkKB1yND3CIhTfwm7ibdU6FQpm2Q4eAL1rgC6smlJDdseeGi0zMVRxTRv8gR0Xh2iOA5qkxEbvUKjCWwX4pJRKiy9z99XNsDnCI2oj8WpLGqpo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hMuh7Ar/; 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="hMuh7Ar/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A9AC4C433F1; Thu, 18 Jan 2024 06:12:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558353; bh=YwvQ7oPWRudLqfFMGu68GfF9V2i2lmBKHkUq+IOfIdo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hMuh7Ar/RM1OaWJwe+wwlqvc9+dKGUvEP9Y01ZaorE9mPp5tLrCcigCql5meiSwWY VLdQKofYHKqssK7Y4YlgoMn8yBqwhxmxvi8fEljeivDyj/arKfMdxEeuQUPEXBawgq y4CwpYIfZNuYZu6juWrdLuG1XU2hEogBE4x1J1ziTGX9zQE9zqgizWXzM1yVOtDdP1 ueMk/NPK/xDPMGz6xLaiZNsi7Wu9JRL5lx7LL8UL6LpNponxoDilo7uSQzWEDcsTiu 56USb8wfYxuW0sJdV+gDupv5/R8XaXc/pqgoXK7d8kuErTph84gsuwSGl5AYUJjCDZ ryQ7iSsj80N4g== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 18/23] mptcp: get addr in userspace pm list Date: Thu, 18 Jan 2024 14:11:58 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch renames mptcp_pm_nl_get_addr_doit() as a dedicated in-kernel netlink PM get addr function mptcp_pm_nl_get_addr(). and invoke a new wrapper mptcp_pm_get_addr() in mptcp_pm_nl_get_addr_doit. If a token is gotten in the wrapper, that means a userspace PM is used. So invoke mptcp_userspace_pm_get_addr() to get addr in userspace PM list. Otherwise, invoke mptcp_pm_nl_get_addr(). Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 7 +++++++ net/mptcp/pm_netlink.c | 7 ++++++- net/mptcp/protocol.h | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 481f8becc3b4..d05c2c221932 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -441,6 +441,13 @@ int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_= sock *msk, unsigned int id return mptcp_pm_nl_get_flags_and_ifindex_by_id(msk, id, flags, ifindex); } =20 +int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info) +{ + if (info->attrs[MPTCP_PM_ATTR_TOKEN]) + return mptcp_userspace_pm_get_addr(skb, info); + return mptcp_pm_nl_get_addr(skb, info); +} + int mptcp_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) { const struct genl_info *info =3D genl_info_dump(cb); diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 6fedf271e26d..c227c8909cd3 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1657,7 +1657,7 @@ int mptcp_nl_fill_addr(struct sk_buff *skb, return -EMSGSIZE; } =20 -int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) +int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info) { struct nlattr *attr =3D info->attrs[MPTCP_PM_ENDPOINT_ADDR]; struct pm_nl_pernet *pernet =3D genl_info_pm_nl(info); @@ -1707,6 +1707,11 @@ int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, s= truct genl_info *info) return ret; } =20 +int mptcp_pm_nl_get_addr_doit(struct sk_buff *skb, struct genl_info *info) +{ + return mptcp_pm_get_addr(skb, info); +} + int mptcp_pm_nl_dump_addr(struct sk_buff *msg, struct netlink_callback *cb) { diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index e2a8833bca05..a11d1a98beca 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -1037,6 +1037,8 @@ int mptcp_pm_nl_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); int mptcp_userspace_pm_dump_addr(struct sk_buff *msg, struct netlink_callback *cb); +int mptcp_pm_get_addr(struct sk_buff *skb, struct genl_info *info); +int mptcp_pm_nl_get_addr(struct sk_buff *skb, struct genl_info *info); int mptcp_userspace_pm_get_addr(struct sk_buff *skb, struct genl_info *info); =20 --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 067AB8F40 for ; Thu, 18 Jan 2024 06:12:35 +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=1705558355; cv=none; b=jn9QLs5emyIWKugISXPkdiTKtWWrcWRXBke8mRDeEBR6kc6PJ9wIxX3adnqLqYb96+ElEs3ei8BwWjZ5E1p8JtYSJysgnxYHF0I+icKkV6Gc2Umqiyni8WUACobUt0ZuZja0bgGBNcTWAr4Oia2yvBGsDgH6olJEGweL4O60ze4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558355; c=relaxed/simple; bh=DoYfkYOQ3ruXSwP0ssiLENI1sxoH9H/fyIQ9Gqc5OqU=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=qPiKJtFR6y4/ah9L9xyL8TJyi8K+jiz1CtcY6pe/hOMedX96iGX6wNwzaGF2P6NVPlmjtGVfBRVak9MrgAe2twYxLYyOrC120FD39GoGClYUylO+DLudREdtUckzl0DpBKt+wxuZzOZ77Q5siE/rxV8rNIXUb6FWsk4ujTTAGkw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qyYeWAEA; 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="qyYeWAEA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08275C433B2; Thu, 18 Jan 2024 06:12:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558354; bh=DoYfkYOQ3ruXSwP0ssiLENI1sxoH9H/fyIQ9Gqc5OqU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qyYeWAEA1qVIl+Zu8AxXdBIn+KuJAW6cLI9mQFEbhIUoXct8zT5VfqNiLTE8Kj7u8 r0g7P0GUPxFpnKGQomEZYLEwuh55jA3nvwKJb8XyoR/5ri8djG2ucfjqvmxPhCvKY0 I7rwqXdYkCA+RJ8Y0zny8fhXgaHfUtt03fLgcMnq7/FXYMb2Rnat+zk523Yys0PSwA cAEhM5ANCqr+nHIwa12Ju13eYJTZvIsf1SrCjIONCAl6CyX1tumq2YvZfPadsTtkkM Blejfwu7Ji4GlqikFa0TIf9BNdAmuLUXZR+QDvMd+JrLF2qeVnGJSI/Vyj6xa5o1Eq Fcsl9Jm1uLNoA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 19/23] selftests: mptcp: add token for get_addr Date: Thu, 18 Jan 2024 14:11:59 +0800 Message-Id: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang The command get_addr() of pm_nl_ctl can be used like this in in-kernel PM: pm_nl_ctl get $id This patch adds token argument for it to support userspace PM: pm_nl_ctl get $id token $token If 'token $token' is passed to get_addr(), copy it into the kernel netlink. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c b/tools/testing/= selftests/net/mptcp/pm_nl_ctl.c index 8d7d1b4ed28e..7426a2cbd4a0 100644 --- a/tools/testing/selftests/net/mptcp/pm_nl_ctl.c +++ b/tools/testing/selftests/net/mptcp/pm_nl_ctl.c @@ -1087,6 +1087,7 @@ int get_addr(int fd, int pm_family, int argc, char *a= rgv[]) 1024]; struct rtattr *rta, *nest; struct nlmsghdr *nh; + u_int32_t token =3D 0; int nest_start; u_int8_t id; int off =3D 0; @@ -1097,10 +1098,12 @@ int get_addr(int fd, int pm_family, int argc, char = *argv[]) MPTCP_PM_VER); =20 /* the only argument is the address id */ - if (argc !=3D 3) + if (argc !=3D 3 && argc !=3D 5) syntax(argv); =20 id =3D atoi(argv[2]); + if (argc =3D=3D 5 && !strcmp(argv[3], "token")) + token =3D strtoul(argv[4], NULL, 10); =20 nest_start =3D off; nest =3D (void *)(data + off); @@ -1116,6 +1119,15 @@ int get_addr(int fd, int pm_family, int argc, char *= argv[]) off +=3D NLMSG_ALIGN(rta->rta_len); nest->rta_len =3D off - nest_start; =20 + /* token */ + if (token) { + rta =3D (void *)(data + off); + rta->rta_type =3D MPTCP_PM_ATTR_TOKEN; + rta->rta_len =3D RTA_LENGTH(4); + memcpy(RTA_DATA(rta), &token, 4); + off +=3D NLMSG_ALIGN(rta->rta_len); + } + print_addrs(nh, pm_family, do_nl_req(fd, nh, off, sizeof(data))); return 0; } --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 62D758F40 for ; Thu, 18 Jan 2024 06:12:36 +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=1705558356; cv=none; b=CeldbeXeuwveVhpy0UUGD8XlrypI/Onitd8ovpRmRtNsO2edWvDqNFbvN8wHLytD+6wsk34PsJvp662BEcsza45qZBAUCD1oi+MsQaqTWRuaGqpWpP2PaO8TVaYB2qyXMiaE9ujjms2xP3EO41v1jbxn7+j1lO4UI+7LIPQBJhc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558356; c=relaxed/simple; bh=WmmoC/rULymSuVHmwj+6Hw2xz4nU1M4q6L3S5+Oc4ko=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=nib06IO6rOjyV6j96GEjg8u/p0Gcia6omFclalkynEkvrUEJVGIQwEjCxSz9iEj4OB53gxGUZCMN4X17FqjuPY0s13QhPysznnOkesywOgfu3XLqNusouyeLe9n6B4+Vg1BuwETi8gl6tEkK2Qb9VmU2vv+hg01hfYss/1IgoYc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qRJy2F2X; 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="qRJy2F2X" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 68D00C433F1; Thu, 18 Jan 2024 06:12:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558356; bh=WmmoC/rULymSuVHmwj+6Hw2xz4nU1M4q6L3S5+Oc4ko=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qRJy2F2XTYSu1crSc6kcAGPOv2AmEXgfDN//nQUyFvGsqLYsSSJRVGfws7hXhXlHE 1Gj6voNxZ8l8/EUQdO4yj8qhv33HzX7betoOxSkh6fYxoL3d2IKUZkEl+1WGvpvrFO TE/UH8sBZl0YFP201cI3wA8gcZkZH7TVZXMKpooczX7nsTL+3NBgCIF6rGQt89fDf1 +ZwQTVP5jw3uWRXN4hKFGqp1yewbTnqxjrrw97XgOQSdXNd0Wo2qj4UuJRAnM8UJKD 9jz3vdlIBpe3K9T9DaSxlHm9v8caN0wAChu2dXYKUTpSCG29b4R6nm+Hom1rAi3S1D uz1EjuZDsTzlw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 20/23] selftests: mptcp: userspace pm get addr tests Date: Thu, 18 Jan 2024 14:12:00 +0800 Message-Id: <8168bdbf409719f5e5f6dfe86809b17d22db7e71.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds a new helper userspace_pm_get_addr() in mptcp_join.sh. In it, parse the token value from the output of 'pm_nl_ctl events', then pass it to pm_nl_ctl get_addr command. Use this helper in userspace pm dump tests. Signed-off-by: Geliang Tang --- tools/testing/selftests/net/mptcp/mptcp_join.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index cec4bfc5193b..0b325b5efccf 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3373,6 +3373,18 @@ userspace_pm_dump() ip netns exec $1 ./pm_nl_ctl dump token $tk } =20 +# $1: ns ; $2: id +userspace_pm_get_addr() +{ + local evts=3D$evts_ns1 + local tk + + [ "$1" =3D=3D "$ns2" ] && evts=3D$evts_ns2 + tk=3D$(mptcp_lib_evts_get_info token "$evts") + + ip netns exec $1 ./pm_nl_ctl get $2 token $tk +} + check_output() { local cmd=3D"$1" @@ -3610,6 +3622,8 @@ userspace_tests() chk_subflows_total 2 2 chk_mptcp_info add_addr_signal 1 add_addr_accepted 1 local dump=3D"id 10 flags signal 10.0.2.1" + check_output "userspace_pm_get_addr $ns1 10" \ + "$dump" " get id 10 addr" check_output "userspace_pm_dump $ns1" \ "$dump" " dump addrs signal" kill_events_pids @@ -3632,6 +3646,8 @@ userspace_tests() chk_mptcp_info subflows 1 subflows 1 chk_subflows_total 2 2 local dump=3D"id 20 flags subflow 10.0.3.2" + check_output "userspace_pm_get_addr $ns2 20" \ + "$dump" " get id 20 addr" check_output "userspace_pm_dump $ns2" \ "$dump" " dump addrs subflow" kill_events_pids --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 157CD8F40 for ; Thu, 18 Jan 2024 06:12:37 +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=1705558358; cv=none; b=pr9d5wqu21YYr3ZKwuWWeaGnLBi6Ljf2wjllUg5dVmSXlc8CTJcTOFMGI54H8bbt0wmZLwFzFznHTFVK+CcVLrxhDwSmJt8yGJeL20dwo7gmVj32fUZMjv2JeE2joYtqoeigzzOuTAeMm+RUDpi6vbqAmXNn2gBEmzb7bI3ZOng= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558358; c=relaxed/simple; bh=1Ihzeopex0iYiWPTgu5kJ0PUnFWIJMnTfQqWnFITcJY=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=KEqEIToSD4rO8s1caP0n7CSQ/odc4JegTEm3Siob9WwKm7U4SQyEF2kXTZfkUWHj66kC49a5bk3XGp0E572Z99F7oRUi4e1fFUtHRwldeFJTD4M4KSBGcNl7GFBpdBsVkCTUzFWC1LZTJhow+sNGyupsrQYUNxH3qBpQrnuh6U0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SdObgcu0; 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="SdObgcu0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B8A85C433A6; Thu, 18 Jan 2024 06:12:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558357; bh=1Ihzeopex0iYiWPTgu5kJ0PUnFWIJMnTfQqWnFITcJY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SdObgcu0vYcg8nk8wzDPkhnkg4tCPAxQ3Fmtdw2KBorpCCxTWKAAywkr0J+rZI1fD Mm3qhIZrsxB0L6pb127qLRO+7gZV1xJk0N1jyWk9EfZ/SWWSToF4QbT/SDfiJnT7nK zUdkJFXEZbxSmxqQsBgJywFWryZdZhqrMJxMf2L9l5EsZaDCIlq0AAmyp67ZIeEV/f 1k0g/qaoUDt/wJDud0ZVcy/2CKEZi2Wqp+I3PBxngRqbQqiGZC3Em1FAC+GJ/v9SEh ljhV6udc1fsk5D97FuYfokp+evRTOfSfDwVvUnwojfk9+HB61ljXzJtOucvLe5FvQ3 higBGyJlHPsCA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 21/23] mptcp: update set_flags interfaces Date: Thu, 18 Jan 2024 14:12:01 +0800 Message-Id: <2eeb7d8c80850814335a00331820619ac925f64d.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch updates set_flags interfaces, make it more similar to the interfaces of dump_addr and get_addr: mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 10 +++---- net/mptcp/pm_netlink.c | 58 +++++++++++++++++----------------------- net/mptcp/pm_userspace.c | 32 +++++++++++++++++----- net/mptcp/protocol.h | 10 +++---- 4 files changed, 58 insertions(+), 52 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index d05c2c221932..30cedafb009e 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -457,13 +457,11 @@ int mptcp_pm_dump_addr(struct sk_buff *msg, struct ne= tlink_callback *cb) return mptcp_pm_nl_dump_addr(msg, cb); } =20 -int mptcp_pm_set_flags(struct net *net, struct nlattr *token, - struct mptcp_pm_addr_entry *loc, - struct mptcp_pm_addr_entry *rem, u8 bkup) +int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info) { - if (token) - return mptcp_userspace_pm_set_flags(net, token, loc, rem, bkup); - return mptcp_pm_nl_set_flags(net, loc, bkup); + if (info->attrs[MPTCP_PM_ATTR_TOKEN]) + return mptcp_userspace_pm_set_flags(skb, info); + return mptcp_pm_nl_set_flags(skb, info); } =20 void mptcp_pm_subflow_chk_stale(const struct mptcp_sock *msk, struct sock = *ssk) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index c227c8909cd3..6e913498ff79 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1875,66 +1875,58 @@ static int mptcp_nl_set_flags(struct net *net, return ret; } =20 -int mptcp_pm_nl_set_flags(struct net *net, struct mptcp_pm_addr_entry *add= r, u8 bkup) +int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) { - struct pm_nl_pernet *pernet =3D pm_nl_get_pernet(net); + struct mptcp_pm_addr_entry addr =3D { .addr =3D { .family =3D AF_UNSPEC }= , }; + struct nlattr *attr =3D info->attrs[MPTCP_PM_ATTR_ADDR]; u8 changed, mask =3D MPTCP_PM_ADDR_FLAG_BACKUP | MPTCP_PM_ADDR_FLAG_FULLMESH; + struct net *net =3D sock_net(skb->sk); struct mptcp_pm_addr_entry *entry; + struct pm_nl_pernet *pernet; u8 lookup_by_id =3D 0; + u8 bkup =3D 0; + int ret; + + pernet =3D pm_nl_get_pernet(net); + + ret =3D mptcp_pm_parse_entry(attr, info, false, &addr); + if (ret < 0) + return ret; =20 - if (addr->addr.family =3D=3D AF_UNSPEC) { + if (addr.addr.family =3D=3D AF_UNSPEC) { lookup_by_id =3D 1; - if (!addr->addr.id) + if (!addr.addr.id) return -EOPNOTSUPP; } =20 + if (addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP) + bkup =3D 1; + spin_lock_bh(&pernet->lock); - entry =3D __lookup_addr(pernet, &addr->addr, lookup_by_id); + entry =3D __lookup_addr(pernet, &addr.addr, lookup_by_id); if (!entry) { spin_unlock_bh(&pernet->lock); return -EINVAL; } - if ((addr->flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && + if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { spin_unlock_bh(&pernet->lock); return -EINVAL; } =20 - changed =3D (addr->flags ^ entry->flags) & mask; - entry->flags =3D (entry->flags & ~mask) | (addr->flags & mask); - *addr =3D *entry; + changed =3D (addr.flags ^ entry->flags) & mask; + entry->flags =3D (entry->flags & ~mask) | (addr.flags & mask); + addr =3D *entry; spin_unlock_bh(&pernet->lock); =20 - mptcp_nl_set_flags(net, &addr->addr, bkup, changed); + mptcp_nl_set_flags(net, &addr.addr, bkup, changed); return 0; } =20 int mptcp_pm_nl_set_flags_doit(struct sk_buff *skb, struct genl_info *info) { - struct mptcp_pm_addr_entry remote =3D { .addr =3D { .family =3D AF_UNSPEC= }, }; - struct mptcp_pm_addr_entry addr =3D { .addr =3D { .family =3D AF_UNSPEC }= , }; - struct nlattr *attr_rem =3D info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; - struct nlattr *token =3D info->attrs[MPTCP_PM_ATTR_TOKEN]; - struct nlattr *attr =3D info->attrs[MPTCP_PM_ATTR_ADDR]; - struct net *net =3D sock_net(skb->sk); - u8 bkup =3D 0; - int ret; - - ret =3D mptcp_pm_parse_entry(attr, info, false, &addr); - if (ret < 0) - return ret; - - if (attr_rem) { - ret =3D mptcp_pm_parse_entry(attr_rem, info, false, &remote); - if (ret < 0) - return ret; - } - - if (addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP) - bkup =3D 1; - - return mptcp_pm_set_flags(net, token, &addr, &remote, bkup); + return mptcp_pm_set_flags(skb, info); } =20 static void mptcp_nl_mcast_send(struct net *net, struct sk_buff *nlskb, gf= p_t gfp) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 96620038a4e9..bb5672a4332e 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -549,14 +549,19 @@ int mptcp_pm_nl_subflow_destroy_doit(struct sk_buff *= skb, struct genl_info *info return err; } =20 -int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, - struct mptcp_pm_addr_entry *loc, - struct mptcp_pm_addr_entry *rem, u8 bkup) +int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *in= fo) { + struct mptcp_pm_addr_entry loc =3D { .addr =3D { .family =3D AF_UNSPEC },= }; + struct mptcp_pm_addr_entry rem =3D { .addr =3D { .family =3D AF_UNSPEC },= }; + struct nlattr *attr_rem =3D info->attrs[MPTCP_PM_ATTR_ADDR_REMOTE]; + struct nlattr *token =3D info->attrs[MPTCP_PM_ATTR_TOKEN]; + struct nlattr *attr =3D info->attrs[MPTCP_PM_ATTR_ADDR]; + struct net *net =3D sock_net(skb->sk); struct mptcp_sock *msk; int ret =3D -EINVAL; struct sock *sk; u32 token_val; + u8 bkup =3D 0; =20 token_val =3D nla_get_u32(token); =20 @@ -569,12 +574,27 @@ int mptcp_userspace_pm_set_flags(struct net *net, str= uct nlattr *token, if (!mptcp_pm_is_userspace(msk)) goto set_flags_err; =20 - if (loc->addr.family =3D=3D AF_UNSPEC || - rem->addr.family =3D=3D AF_UNSPEC) + ret =3D mptcp_pm_parse_entry(attr, info, false, &loc); + if (ret < 0) + goto set_flags_err; + + if (attr_rem) { + ret =3D mptcp_pm_parse_entry(attr_rem, info, false, &rem); + if (ret < 0) + goto set_flags_err; + } + + if (loc.addr.family =3D=3D AF_UNSPEC || + rem.addr.family =3D=3D AF_UNSPEC) { + ret =3D -EINVAL; goto set_flags_err; + } + + if (loc.flags & MPTCP_PM_ADDR_FLAG_BACKUP) + bkup =3D 1; =20 lock_sock(sk); - ret =3D mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); + ret =3D mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup); release_sock(sk); =20 set_flags_err: diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index a11d1a98beca..cd193737b369 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -936,13 +936,9 @@ int mptcp_pm_nl_get_flags_and_ifindex_by_id(struct mpt= cp_sock *msk, unsigned int int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, u8 *flags, int *ifindex); -int mptcp_pm_set_flags(struct net *net, struct nlattr *token, - struct mptcp_pm_addr_entry *loc, - struct mptcp_pm_addr_entry *rem, u8 bkup); -int mptcp_pm_nl_set_flags(struct net *net, struct mptcp_pm_addr_entry *add= r, u8 bkup); -int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, - struct mptcp_pm_addr_entry *loc, - struct mptcp_pm_addr_entry *rem, u8 bkup); +int mptcp_pm_set_flags(struct sk_buff *skb, struct genl_info *info); +int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info); +int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *in= fo); int mptcp_pm_announce_addr(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool echo); --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 1533C8F40 for ; Thu, 18 Jan 2024 06:12:39 +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=1705558359; cv=none; b=LbsdQmUSLCwPkEpxLJdhWDix/m91tEiq24L88oIUJZzHU4k91cSlLY0G08ht4f/+nsIjVimx1R1VCf8JoXwWE+tjDWok0/DdWfXg6YqKq1YnxmWfRtiHAvIJJYg3g1m0vqklYj1fynUYf4udSkiNR1XtjKLDb0rL8TQGFZzyPxk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558359; c=relaxed/simple; bh=eyu4+mR9wo/LMPTYxbqKaR+MnTHC9Kb+tlp2XtfuVE8=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=jXuydDX5TiWcWztdazRZWBYUnAvcPJOKsiGLMWbyJ9yqtQZ/3xC/x9sppTYYHos0OwKtI9pmYXz7NeDIlfKbYw/XLnFzP2FTeOM1JYKYxEbCn+qAU1E5lqYj2T49xd3nTfk5QSxNSFISTQkWsawFUgeEeHrN5XwlGsn7zSVZcPc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Zb/4WAW4; 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="Zb/4WAW4" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 15BB6C433B2; Thu, 18 Jan 2024 06:12:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558358; bh=eyu4+mR9wo/LMPTYxbqKaR+MnTHC9Kb+tlp2XtfuVE8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Zb/4WAW4v05pOQthCoLbTuDu4YNB09TjsYwo71xlgxvZApxG0yL5Q0pdbJjd8UotV kjvOg1QAmPfJY0B58tImt8GPN7IFcjEQ4fopuoq+oJHzD8t2aglVEw44xRoLVBZHeN t9w3AgooqPm22HG51tOapUaDIy4CwL1er9RVphMYWsuwys55+7WQ2yvHVbWSP4Btm4 Thv6ebtNwadyTbcYV0JKvwpNirTqTLxeAuK1vZ9zGUfFeywI/9zSicLSWZP8/CFV0H bWnus6A1T7WzIWT/U9B7DD/Nj0/ceAwR9OyFGmmduOLGrFKsWFtj+T3x9DoPlOq5J5 IoYUD1HxMd60A== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 22/23] mptcp: set error messages for set_flags Date: Thu, 18 Jan 2024 14:12:02 +0800 Message-Id: <8f5a0070ce87532667655e243a9c8f054c24862f.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang In addition to returning the error value, this patch also sets an error messages with GENL_SET_ERR_MSG or NL_SET_ERR_MSG_ATTR both for pm_netlink.c and pm_userspace.c. Signed-off-by: Geliang Tang --- net/mptcp/pm_netlink.c | 6 +++++- net/mptcp/pm_userspace.c | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 6e913498ff79..4ab68f83ddd5 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1896,8 +1896,10 @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struc= t genl_info *info) =20 if (addr.addr.family =3D=3D AF_UNSPEC) { lookup_by_id =3D 1; - if (!addr.addr.id) + if (!addr.addr.id) { + GENL_SET_ERR_MSG(info, "missing required inputs"); return -EOPNOTSUPP; + } } =20 if (addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP) @@ -1907,11 +1909,13 @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, stru= ct genl_info *info) entry =3D __lookup_addr(pernet, &addr.addr, lookup_by_id); if (!entry) { spin_unlock_bh(&pernet->lock); + GENL_SET_ERR_MSG(info, "address not found"); return -EINVAL; } if ((addr.flags & MPTCP_PM_ADDR_FLAG_FULLMESH) && (entry->flags & MPTCP_PM_ADDR_FLAG_SIGNAL)) { spin_unlock_bh(&pernet->lock); + GENL_SET_ERR_MSG(info, "invalid addr flags"); return -EINVAL; } =20 diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index bb5672a4332e..ea9e8612da68 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -566,13 +566,17 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb,= struct genl_info *info) token_val =3D nla_get_u32(token); =20 msk =3D mptcp_token_get_sock(net, token_val); - if (!msk) + if (!msk) { + NL_SET_ERR_MSG_ATTR(info->extack, token, "invalid token"); return ret; + } =20 sk =3D (struct sock *)msk; =20 - if (!mptcp_pm_is_userspace(msk)) + if (!mptcp_pm_is_userspace(msk)) { + GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto set_flags_err; + } =20 ret =3D mptcp_pm_parse_entry(attr, info, false, &loc); if (ret < 0) @@ -586,6 +590,7 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, s= truct genl_info *info) =20 if (loc.addr.family =3D=3D AF_UNSPEC || rem.addr.family =3D=3D AF_UNSPEC) { + GENL_SET_ERR_MSG(info, "address families do not match"); ret =3D -EINVAL; goto set_flags_err; } --=20 2.40.1 From nobody Thu May 16 08:39:00 2024 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 7D9288F40 for ; Thu, 18 Jan 2024 06:12:40 +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=1705558360; cv=none; b=UExk38UhGDC0y3BioC2P6EXJq9XGiIpR9Ga9Hc2FxGwtWYR/Sl56ujsd8xJYvHp52ulwrtDeIfYVmwP8tmSPcqtjwe3oCoepOgFo2TYz4Gx40KZzQ4P0wrq+rXqFbyOMZ3faYwZucpOWGfgtXMN2/yEw7RdI7IJZGdh1C5bdQrs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1705558360; c=relaxed/simple; bh=Y1KCkJpxwWzlU5JBiGBOAc9ZAIbuZZxPpvoYmSCi8mM=; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-Id: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; b=maJxu5OsF10JFjIMUAtRxZ6J9T0+b5OjxwzngYYZLNeuuhyv6JwHD5slLRpHGG4nnYbSUYyS68pZfTtXchK3xIFk633jaBWZsx16hP0Jo8tOr3CYveLQUiaTz4zfvm5kECzGW789/eH4h3owtglMGgQg/+X9Phr+ma0GPCC6wgk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=a9vx1wTk; 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="a9vx1wTk" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6D134C433F1; Thu, 18 Jan 2024 06:12:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1705558360; bh=Y1KCkJpxwWzlU5JBiGBOAc9ZAIbuZZxPpvoYmSCi8mM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a9vx1wTk46a8LsXwy+vx4iH0t9Uf2jgpHw9nHD7/VRq3o+ksz/+raaqe3dALUsLuN oKse17OsWz2uuUv9uyve6xBDatd3warEqDfdriuNtKdV9YgM3MCwRSGg7Myu9SLWY5 9hFqGYeVM+fDkwsukzfjvtS/vTVTpzpkOqbJU64dOCBRF4ExnGrHKQ9qSnQPYfDMWP y5AKb1eaZgwhT69qjT7bm9sBj7sP1hZTLxxsBdqMTqCnuilYqTT1DmRWlMhWYSKDdn KNczaKuSf17yZFUrrFnsfF7ta9UON21NxrtAMecADYh9XeGmkA6A6cMWQeRGz8Icq4 2rZEVVRuRQ9yg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next v10 23/23] selftests: mptcp: flush userspace addrs list Date: Thu, 18 Jan 2024 14:12:03 +0800 Message-Id: <9281e7e64896c26a3d33ea78be3abe3041fe37d8.1705558030.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang This patch adds a new helper userspace_pm_flush() to flush all addresses for the userspace PM. Invoke it in userspace pm dump address and subflow tests. And use dump commands to check if the userspace pm local address list is empty after addresses flushing. Signed-off-by: Geliang Tang --- .../testing/selftests/net/mptcp/mptcp_join.sh | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index 0b325b5efccf..65e8d9d61ac9 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3385,6 +3385,31 @@ userspace_pm_get_addr() ip netns exec $1 ./pm_nl_ctl get $2 token $tk } =20 +# $1: ns ; $2: addr +userspace_pm_flush() +{ + local ns=3D$1 + local line + + userspace_pm_dump $ns | while read -r line; do + local arr=3D($line) + local nr=3D0 + local id + local addr + local i + for i in "${arr[@]}"; do + if [ $i =3D "id" ]; then + id=3D${arr[$nr+1]} + fi + nr=3D$((nr + 1)) + done + addr=3D${arr[$nr-1]} + [ $ip_mptcp -eq 1 ] && addr=3D${arr[0]} + userspace_pm_rm_addr $ns $id + userspace_pm_rm_sf $ns "$addr" $MPTCP_LIB_SUB_ESTABLISHED + done +} + check_output() { local cmd=3D"$1" @@ -3606,8 +3631,8 @@ userspace_tests() wait $tests_pid fi =20 - # userspace pm dump address - if reset_with_events "userspace pm dump address" && + # userspace pm dump & flush address + if reset_with_events "userspace pm dump & flush address" && continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then set_userspace_pm $ns1 pm_nl_set_limits $ns2 1 1 @@ -3626,12 +3651,18 @@ userspace_tests() "$dump" " get id 10 addr" check_output "userspace_pm_dump $ns1" \ "$dump" " dump addrs signal" + userspace_pm_flush $ns1 + check_output "userspace_pm_dump $ns1" \ + "" " dump addrs after flush" + chk_rm_nr 1 1 invert + chk_mptcp_info subflows 0 subflows 0 + chk_subflows_total 1 1 kill_events_pids wait $tests_pid fi =20 - # userspace pm dump subflow - if reset_with_events "userspace pm dump subflow" && + # userspace pm dump & flush subflow + if reset_with_events "userspace pm dump & flush subflow" && continue_if mptcp_lib_has_file '/proc/sys/net/mptcp/pm_type'; then set_userspace_pm $ns2 pm_nl_set_limits $ns1 0 1 @@ -3650,6 +3681,12 @@ userspace_tests() "$dump" " get id 20 addr" check_output "userspace_pm_dump $ns2" \ "$dump" " dump addrs subflow" + userspace_pm_flush $ns2 + check_output "userspace_pm_dump $ns2" \ + "" " dump addrs after flush" + chk_rm_nr 1 1 + chk_mptcp_info subflows 0 subflows 0 + chk_subflows_total 1 1 kill_events_pids wait $tests_pid fi --=20 2.40.1