From nobody Tue May 14 12:26:28 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 3C2403C1D for ; Wed, 21 Feb 2024 06:31: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=1708497082; cv=none; b=LylVbXPUceaMwOvFu0t3zGFzwQT38k63IdcalEnG5idlzvPniq69HIIXP7EqUlKikC7Z/IejDFhidghyapbdOhMhH1hYXiSF1SypQwexwGPWgNUxfqzJSEc3rvGxEwQJ+yD1Z/6NMlL7JwUH/nSTnhPcqzTT5SQu7w09OnMvz5k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497082; c=relaxed/simple; bh=MQH2DyIEuqM8zxy/9qZ9uOZnuvNFpDxYAdujiAjV4A0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=sZdTSTPmyYcAhRUXEGrxJbMUM7VLAO8jWSHFSVt0ISo0kjnoUoOg4/TmbNMeqhMP5UlrxAJD7DdJssiTRslvyXZ3LrsAGthWJAPn2Yz6nUzRRwu7stKx1PLCZsn6Yvh9EY38OLF0PFqGz11fVuiW9UX8IDm1fbgQnrYpVfsthuo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I0zKK8SL; 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="I0zKK8SL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 436F3C433F1; Wed, 21 Feb 2024 06:31:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497082; bh=MQH2DyIEuqM8zxy/9qZ9uOZnuvNFpDxYAdujiAjV4A0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I0zKK8SLc1i9GOTADxYMPDAXbw3wTVEGauqk+LQEmofypsCtHMj3xeGE9oItULqmJ PUxK5yoUgqnNzPk44yAAPu46aMYB/Dndqwn/3SG+TOpPFBriBZ8dHwfkKbxhIKaARt OcQRVy9aA7vI6f8Mn+2WyEF+wTDwhvlkqVA/k7LajpynCJKYorLjLxfIThbpULk5Br vrcDPkhOXsYwKDZPrim9mkktxv0niarLjW7pH5miFzcTNU+q5xScUGDwQnHIJI6le5 8aHOlCRvauKsPFLDmzf1LCDN+8z1nKJhNussdpi/DH7ZBBeyfEtk9kkMnsY0mzNs7L e6bLROsXoJ6HA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 1/8] mptcp: make pm_remove_addrs_and_subflows static Date: Wed, 21 Feb 2024 14:31:08 +0800 Message-Id: <56aeab5adc9179f4c99bbcc57247223192555dc3.1708497039.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 mptcp_pm_remove_addrs_and_subflows() is only used in pm_netlink.c, it's no longer used in pm_userspace.c any more since the commit 8b1c94da1e48 ("mptcp: only send RM_ADDR in nl_cmd_remove"). So this patch changes it to a static function. Signed-off-by: Geliang Tang --- net/mptcp/pm_netlink.c | 4 ++-- net/mptcp/protocol.h | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index f04e354b0c64..16f8bd47f4b8 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1547,8 +1547,8 @@ void mptcp_pm_remove_addrs(struct mptcp_sock *msk, st= ruct list_head *rm_list) } } =20 -void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk, - struct list_head *rm_list) +static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk, + struct list_head *rm_list) { struct mptcp_rm_list alist =3D { .nr =3D 0 }, slist =3D { .nr =3D 0 }; struct mptcp_pm_addr_entry *entry; diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index d611968ae6a4..746d0d1f94ec 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -988,8 +988,6 @@ int mptcp_pm_announce_addr(struct mptcp_sock *msk, int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_lis= t *rm_list); int mptcp_pm_remove_subflow(struct mptcp_sock *msk, const struct mptcp_rm_= list *rm_list); void mptcp_pm_remove_addrs(struct mptcp_sock *msk, struct list_head *rm_li= st); -void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk, - struct list_head *rm_list); =20 void mptcp_free_local_addr_list(struct mptcp_sock *msk); =20 --=20 2.40.1 From nobody Tue May 14 12:26:28 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 887813C1D for ; Wed, 21 Feb 2024 06:31: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=1708497083; cv=none; b=BzC2nrQnHYc6zKV2+Spo5Y7RroAQJTGo64ROwEVLjsbsnDA1/nSKx/2eGPEjPjljDjRyB3bVAGE/B8d6WNSPhCRhZUncMD0BH/ilsCXdd8q2xhdQX0JQjD9U8Y2WrApnwwU0bpccRgGiGJjEE2rhrq463qc/621l1KHMFV4tVQo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497083; c=relaxed/simple; bh=V+LVlg96JbbxV9/NAT+eYZJ9otqIxXDrJP/t59ex8bQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=IdzLqKiUoeGj6Lwa8UapncB9IoKCFmSdrsYaAgcYLZ699wPVFdQdDFc68Eo8ENmc9iFhxvY/aEoNwX2zbCBmaHVvt69Q6vlv+kTXK9aR4W6dAkKxxKHPzc7bD2IJfO6Z/G0uwWIs/IX+TlaZ+XKmqoOET9V7tNHveh7I2xvjoaI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TuGTE40/; 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="TuGTE40/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9119DC43399; Wed, 21 Feb 2024 06:31:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497083; bh=V+LVlg96JbbxV9/NAT+eYZJ9otqIxXDrJP/t59ex8bQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TuGTE40/dgr+kVEHB8h1c15ybjm00sKysVzxYvPo2ALaHgAEZ7rr0OPSyi9/zi0Sj q1zUVQvm7htXTOIgvoini//pz+69Z5mo1ewef2L1whun5SJ7dazltDu6NeFRRuudBr /7r6rw36QEpUfXfI+1ADdYw+oUwtykoXc61R5l0u8DDLnoat2dPAl6SD1VsuI6lqVB GP8HzNELI+/pM+VIj8V5uZylOhvcFXG3EVpVUz34oKjnd3bmrWYBXpMF6TZYTcY+d8 EnvQM7JFIcWKk7RH/ZMsypbV+FYvy0VdwEcLzoibOrM/NP+9vUn9hRf0MHOJeESmKq Nu6XOOxpFtgFw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 2/8] mptcp: drop duplicate header inclusions Date: Wed, 21 Feb 2024 14:31:09 +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 headers net/tcp.h, net/genetlink.h and uapi/linux/mptcp.h are included in protocol.h already, no need to include them again directly. This patch removes these duplicate header inclusions. Signed-off-by: Geliang Tang --- net/mptcp/diag.c | 1 - net/mptcp/mptcp_diag.c | 1 - net/mptcp/pm.c | 1 - net/mptcp/pm_netlink.c | 3 --- net/mptcp/protocol.c | 1 - net/mptcp/subflow.c | 2 -- 6 files changed, 9 deletions(-) diff --git a/net/mptcp/diag.c b/net/mptcp/diag.c index 6ff6f14674aa..aefe26e5ae72 100644 --- a/net/mptcp/diag.c +++ b/net/mptcp/diag.c @@ -10,7 +10,6 @@ #include #include #include -#include #include "protocol.h" =20 static int subflow_get_info(struct sock *sk, struct sk_buff *skb) diff --git a/net/mptcp/mptcp_diag.c b/net/mptcp/mptcp_diag.c index bd8ff5950c8d..0566dd793810 100644 --- a/net/mptcp/mptcp_diag.c +++ b/net/mptcp/mptcp_diag.c @@ -10,7 +10,6 @@ #include #include #include -#include #include "protocol.h" =20 static int sk_diag_dump(struct sock *sk, struct sk_buff *skb, diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index b4bdd92a5648..28e5d514bf20 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -6,7 +6,6 @@ #define pr_fmt(fmt) "MPTCP: " fmt =20 #include -#include #include #include "protocol.h" =20 diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 16f8bd47f4b8..a900df9f173d 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -8,12 +8,9 @@ =20 #include #include -#include #include #include #include -#include -#include =20 #include "protocol.h" #include "mib.h" diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 50dcba41b6ef..b2c4eecf86c4 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #if IS_ENABLED(CONFIG_MPTCP_IPV6) #include diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 6403c56f2902..1626dd20c68f 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -15,13 +15,11 @@ #include #include #include -#include #if IS_ENABLED(CONFIG_MPTCP_IPV6) #include #include #endif #include -#include #include "protocol.h" #include "mib.h" =20 --=20 2.40.1 From nobody Tue May 14 12:26:28 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 305953C1D for ; Wed, 21 Feb 2024 06:31:24 +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=1708497085; cv=none; b=AbQLYu/tnK9d0JMOrZo94WABlcatjk5W4Fn9NYD3tls3I8qqvwryEx25RDGx+NakdPlA3lsoC0UEGeFLjTSeHfEtTnCLMJp9ardBcY3P+pfW/UH7qVcHI0RJkVwFDsmDR8tldoTRS5HQqCAC72lP1K+n8xo8uRl5Lw2nJbMaX2U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497085; c=relaxed/simple; bh=fAy7vYN6t5YdsccNbCCfIufVORVxTGBp+1/VDFrXN3A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Gp7voHfasmBgkt17XbaZMF4DKAS2681UKTC3I3QfRjMWrcm6/r5SqieBeJSu1SQcFlaRZ6loV6WlIRxWRT2R126C4rV3JrArI0Eh91lCrHwo53H1q7n/Q/Uv3SonSKpXg55dIS8DtJpUkfPOPqJiWpaW1IGgUt+PnlZEeXc9hBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Cdof4yxg; 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="Cdof4yxg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EFC7CC43390; Wed, 21 Feb 2024 06:31:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497084; bh=fAy7vYN6t5YdsccNbCCfIufVORVxTGBp+1/VDFrXN3A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Cdof4yxgDrGhAGTWfsPOYzenCQwKM+NgB8yI5hqRnZHCG2fSLCC85o7UBvj3Py0cg Xb2py2rGbegOiUPJzKCvsTn3zzncMI6kYpIdXKNlDatBE1vZsMJZgBwynnz1VQ7tsD KFIPfxxY9oBufIXwj4/sPkvU1u9aQ7GG6lmblRaxi1y/LSbCQon2wkualeZ2fJTQQ7 tQjLMspYXG0roVK9wAn8lYbhE/ZScwOQxg626+NP7LMg4yiNnQBedx+xf3gNKR574J EUlXa3RL7r3JNA1x0teBhL5tZwwXrrub+Q8iEEuYFr47mwmNH39Q8xuIMMk5lvaOvJ IkfBkrIBfFFYA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 3/8] mptcp: update set_flags interfaces Date: Wed, 21 Feb 2024 14:31:10 +0800 Message-Id: <1acc9b6a34e0e29732ed291250556eb147d72541.1708497039.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 28e5d514bf20..55406720c607 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -456,13 +456,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 a900df9f173d..c799fe84dfd3 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1887,66 +1887,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 b9809d988693..7ef3b69852f0 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -546,14 +546,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 @@ -566,12 +571,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 746d0d1f94ec..7905783c95e4 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -975,13 +975,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 Tue May 14 12:26:28 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 4A6B23C1D for ; Wed, 21 Feb 2024 06:31: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=1708497086; cv=none; b=VsIJT6OZUDZKSzD+1Ri86AaSmy8HfNeDUmsj9oa76wPYh6uX4vjU9VvLgqLsOGMgNjd0FMj145w8ANKedYzsILVplK7NGmrwRzdZGa069grjiMGLzeVuRBndre2U/8wR6L95MXK44MS6ZlNKVlQwqJEaqCvBwu0rEABqFKYO5e8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497086; c=relaxed/simple; bh=QgViPpcI22Pi+BtO3/Fhm6dq6EBky8F2BcTELngVd+g=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nZwHAiYCEbfcuWAnDOVEFCxLBpxS7sWDrOP8ymd81tQM7UwvHccFmdKec4mQbQF1JQ8Qjr55ov9vEzFo+VMddJCA1dXunvCCBcd/9qtY3wA5K+5I38wSapqPeOBSY/q1aSILDQsQGAdFsyppHQKkDpGeA9rHyKaHbfaXtr0m91o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=o6HAFOxV; 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="o6HAFOxV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4EEB7C433F1; Wed, 21 Feb 2024 06:31:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497086; bh=QgViPpcI22Pi+BtO3/Fhm6dq6EBky8F2BcTELngVd+g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o6HAFOxVo1z4rG4RltW6L0HfmJxtHRMCl0L82ct2UcyJKGklzonayc3oD1Od0LSII AiPy/y6iKZEo8VBXkuLCAZL8ebQ5+dDXk+0ejE6PjnVYaEGPRQ+ORKctR5T1y0/njM 6DNLT2pE3dB0pIYUlABk0RuUarcmXZEf1lT7ED1ax0nePeV0TMZJiLlhRHTANY8dd7 T+0+nHQYLlt2gKYOVZ7vZiJkJFsZYThX6HMjju/jKxYVZkq00H83LT7iK4xmYkpd2/ 3Bdk2D5HRXvXFGqZSkKMAKODQLfiWAucqNmxoUNVkstk/FMZInUK1IvMG7aUo3l34w fglIy6ooyWv6Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 4/8] mptcp: set error messages for set_flags Date: Wed, 21 Feb 2024 14:31:11 +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 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 c799fe84dfd3..354083b8386f 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1908,8 +1908,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) @@ -1919,11 +1921,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 7ef3b69852f0..09a60f440fef 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -563,13 +563,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) @@ -583,6 +587,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 Tue May 14 12:26:28 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 AB98D3C1D for ; Wed, 21 Feb 2024 06:31:27 +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=1708497087; cv=none; b=j9s2xtsC+rLi6sQScFueIsaJl0cmPUglOrXy1VqPOdPFRjEWqTnCGmmqUDb6YN6fWyHE6WNwPFaCdhcA1Uf05hvYQaFxiFKE4/0NqMQF3O6zDet4xxD0r468CY/jFZe8LwEHC9Q4AnqmXton5nMPVxWcvvh9SdHzVEtOvQZQerQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497087; c=relaxed/simple; bh=ancl2DzBmhfqqS8OZ5ING8p/4YGbuu8z+XpjU1I6DB8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UjOOqdECNp0sP4BFPZcsholML5cj+5BtJAzldwpJl+Y6CLIT5qMiszQjYmivhbLtdMOtKID6F8aaBiGKDCux9EThQ56edw/pxDujs0hUHf5TmL4l63bb2lLDMRtB0gfkXaqLqgdNrH7fcTOdaBXjitNgd4r9NSMAYPZ3XE0J9Zc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Qpiz/+NS; 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="Qpiz/+NS" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B161BC43399; Wed, 21 Feb 2024 06:31:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497087; bh=ancl2DzBmhfqqS8OZ5ING8p/4YGbuu8z+XpjU1I6DB8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Qpiz/+NSgqe/hgcIf45s8xclAukOLPBpqHXLJfTCnVgPufRpZqmEDlkwpGPWJm0MT gU4dCe3F0fsIBCDTPbYJ3Tb8tV1z8Xfn0UfRBRWt4w5kk1qAX+niiiuhyEFoJGGV1Z z2kw6Oe+6Gn8CSQvIEJmt1CHdyrMyMvRdG/z6LJTySU/JIJZsgedQ5CWgou+E8H2rC j+4mMNBynI/+Abl7Oj7968E5Js+6qmB/UK5q4c3u4XLypJ7JLojklRYc+FR3hgzmSX cwIFLSlxYe4dKpvMOknZphA7ypyI1vrqeQ4n7brwt5+5Kg524pID1NkKzoHpbhA/br dRdMamWeb7VKw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 5/8] mptcp: drop lookup_by_id in lookup_addr Date: Wed, 21 Feb 2024 14:31:12 +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 the lookup_by_id parameter of __lookup_addr() is true, it's the same as __lookup_addr_by_id(), it can be replaced by __lookup_addr_by_id() directly. So drop this parameter, let __lookup_addr() only looks up address on the local address list by comparing addresses in it, not address ids. Signed-off-by: Geliang Tang --- net/mptcp/pm_netlink.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 354083b8386f..5c17d39146ea 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -499,15 +499,12 @@ __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsi= gned int id) } =20 static struct mptcp_pm_addr_entry * -__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *i= nfo, - bool lookup_by_id) +__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *i= nfo) { struct mptcp_pm_addr_entry *entry; =20 list_for_each_entry(entry, &pernet->local_addr_list, list) { - if ((!lookup_by_id && - mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) || - (lookup_by_id && entry->addr.id =3D=3D info->id)) + if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; } return NULL; @@ -537,7 +534,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(stru= ct mptcp_sock *msk) =20 mptcp_local_address((struct sock_common *)msk->first, &mpc_addr); rcu_read_lock(); - entry =3D __lookup_addr(pernet, &mpc_addr, false); + entry =3D __lookup_addr(pernet, &mpc_addr); if (entry) { __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); msk->mpc_endpoint_id =3D entry->addr.id; @@ -1918,7 +1915,8 @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct= genl_info *info) bkup =3D 1; =20 spin_lock_bh(&pernet->lock); - entry =3D __lookup_addr(pernet, &addr.addr, lookup_by_id); + entry =3D lookup_by_id ? __lookup_addr_by_id(pernet, addr.addr.id) : + __lookup_addr(pernet, &addr.addr); if (!entry) { spin_unlock_bh(&pernet->lock); GENL_SET_ERR_MSG(info, "address not found"); --=20 2.40.1 From nobody Tue May 14 12:26:28 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 6628F3C1D for ; Wed, 21 Feb 2024 06:31: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=1708497089; cv=none; b=qcwf6z8/RR+iPYAdSY0F1S8GzdfFEMYEpPUjl3fXUZ6xfbZLp+2Rb4C71LS56vlL+33zaM+pB0Ha0UyQEnTXGwXijGN3GRKw0uXXizAPGnxeEM4ugle7c4zrpAPeIhybS/vThTcysjGLG6dJynG+A+cEB4HZXxdGGy9ZneA2Mf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497089; c=relaxed/simple; bh=NANA/0QfS51GGL26cKvktvqO8FyzZ/ZWS17UCPlyreU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=r9O2EiB2sNun29pIuq+zRntBaehTP/wWo1gLwrasaheSlpu3+eBLG6l2jxxDCRe2ysCKrSHCaEjrZA8FKbO4UCbxPSZcjgF7bsITlX3rCticGzLGv+UFW7q2RUtC9g9pnVmAi810BDEntH6KDP37l4OqZmPegs2sVFJa5uuM54Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uXwi1C5L; 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="uXwi1C5L" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 173C8C433B2; Wed, 21 Feb 2024 06:31:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497088; bh=NANA/0QfS51GGL26cKvktvqO8FyzZ/ZWS17UCPlyreU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uXwi1C5L4/gIwOeJrSwyrAQP/M7FAtAnf8594W37r7YevvFsClrxTTZIu0A2CKOcQ l0T/TOavk4SCZvpTa4UXA+jpszGG6ABv6IoVqi+8N3Rc4XcPmNgL3yt6shcpqzNcIl liLwHd9Fw+xCCnFamNx8J1fOdlxqF0RY0yxZTZmrYz52aEQmGkbwyYO9gIk3yafz0t d8klUo9/aYeaPN6GWt3xC+mTEBOpD/5NfIJDCxuWWLmZK/MaQ5/UEsiuqxEDglwMIp IvJ1c+nWkPmSQufovL8e1IPd7tWuaNXiRy27xMIZXU/XYnxTcJLj6iGmf97+4AO65+ PbS+iRHvzdIhg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 6/8] mptcp: add use_id parameter for addresses_equal Date: Wed, 21 Feb 2024 14:31:13 +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 parameter use_id for mptcp_addresses_equal() to test the address ids, as well as the address. This can be used to test if the two given addresses are identically equal, they have both the same address and the same address id. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 2 +- net/mptcp/pm_netlink.c | 32 +++++++++++++++++++------------- net/mptcp/pm_userspace.c | 6 +++--- net/mptcp/protocol.h | 3 ++- 4 files changed, 25 insertions(+), 18 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index 55406720c607..c632c9ef69db 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -418,7 +418,7 @@ int mptcp_pm_get_local_id(struct mptcp_sock *msk, struc= t sock_common *skc) */ mptcp_local_address((struct sock_common *)msk, &msk_local); mptcp_local_address((struct sock_common *)skc, &skc_local); - if (mptcp_addresses_equal(&msk_local, &skc_local, false)) + if (mptcp_addresses_equal(&msk_local, &skc_local, false, false)) return 0; =20 if (mptcp_pm_is_userspace(msk)) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 5c17d39146ea..1bf5c3440f84 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -54,7 +54,8 @@ pm_nl_get_pernet_from_msk(const struct mptcp_sock *msk) } =20 bool mptcp_addresses_equal(const struct mptcp_addr_info *a, - const struct mptcp_addr_info *b, bool use_port) + const struct mptcp_addr_info *b, + bool use_port, bool use_id) { bool addr_equals =3D false; =20 @@ -75,10 +76,14 @@ bool mptcp_addresses_equal(const struct mptcp_addr_info= *a, =20 if (!addr_equals) return false; - if (!use_port) + if (!use_port && !use_id) return true; =20 - return a->port =3D=3D b->port; + if (use_port && use_id) + return (a->port =3D=3D b->port) && (a->id =3D=3D b->id); + if (use_port) + return a->port =3D=3D b->port; + return a->id =3D=3D b->id; } =20 void mptcp_local_address(const struct sock_common *skc, struct mptcp_addr_= info *addr) @@ -117,7 +122,7 @@ static bool lookup_subflow_by_saddr(const struct list_h= ead *list, skc =3D (struct sock_common *)mptcp_subflow_tcp_sock(subflow); =20 mptcp_local_address(skc, &cur); - if (mptcp_addresses_equal(&cur, saddr, saddr->port)) + if (mptcp_addresses_equal(&cur, saddr, saddr->port, false)) return true; } =20 @@ -135,7 +140,7 @@ static bool lookup_subflow_by_daddr(const struct list_h= ead *list, skc =3D (struct sock_common *)mptcp_subflow_tcp_sock(subflow); =20 remote_address(skc, &cur); - if (mptcp_addresses_equal(&cur, daddr, daddr->port)) + if (mptcp_addresses_equal(&cur, daddr, daddr->port, false)) return true; } =20 @@ -244,7 +249,7 @@ mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock= *msk, lockdep_assert_held(&msk->pm.lock); =20 list_for_each_entry(entry, &msk->pm.anno_list, list) { - if (mptcp_addresses_equal(&entry->addr, addr, true)) + if (mptcp_addresses_equal(&entry->addr, addr, true, false)) return entry; } =20 @@ -261,7 +266,7 @@ bool mptcp_pm_sport_in_anno_list(struct mptcp_sock *msk= , const struct sock *sk) =20 spin_lock_bh(&msk->pm.lock); list_for_each_entry(entry, &msk->pm.anno_list, list) { - if (mptcp_addresses_equal(&entry->addr, &saddr, true)) { + if (mptcp_addresses_equal(&entry->addr, &saddr, true, false)) { ret =3D true; goto out; } @@ -504,7 +509,7 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct= mptcp_addr_info *info) struct mptcp_pm_addr_entry *entry; =20 list_for_each_entry(entry, &pernet->local_addr_list, list) { - if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) + if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port, false)) return entry; } return NULL; @@ -744,12 +749,12 @@ int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *m= sk, struct mptcp_addr_info local, remote; =20 mptcp_local_address((struct sock_common *)ssk, &local); - if (!mptcp_addresses_equal(&local, addr, addr->port)) + if (!mptcp_addresses_equal(&local, addr, addr->port, false)) continue; =20 if (rem && rem->family !=3D AF_UNSPEC) { remote_address((struct sock_common *)ssk, &remote); - if (!mptcp_addresses_equal(&remote, rem, rem->port)) + if (!mptcp_addresses_equal(&remote, rem, rem->port, false)) continue; } =20 @@ -924,7 +929,8 @@ static int mptcp_pm_nl_append_new_local_addr(struct pm_= nl_pernet *pernet, entry->addr.port =3D 0; list_for_each_entry(cur, &pernet->local_addr_list, list) { if (mptcp_addresses_equal(&cur->addr, &entry->addr, - cur->addr.port || entry->addr.port)) { + cur->addr.port || entry->addr.port, + false)) { /* allow replacing the exiting endpoint only if such * endpoint is an implicit one and the user-space * did not provide an endpoint id @@ -1067,7 +1073,7 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, = struct mptcp_addr_info *skc =20 rcu_read_lock(); list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { - if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port)) { + if (mptcp_addresses_equal(&entry->addr, skc, entry->addr.port, false)) { ret =3D entry->addr.id; break; } @@ -1456,7 +1462,7 @@ static int mptcp_nl_remove_id_zero_address(struct net= *net, goto next; =20 mptcp_local_address((struct sock_common *)msk, &msk_local); - if (!mptcp_addresses_equal(&msk_local, addr, addr->port)) + if (!mptcp_addresses_equal(&msk_local, addr, addr->port, false)) goto next; =20 lock_sock(sk); diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 09a60f440fef..f2fb02ed9731 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -41,7 +41,7 @@ static int mptcp_userspace_pm_append_new_local_addr(struc= t mptcp_sock *msk, =20 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); + addr_match =3D mptcp_addresses_equal(&e->addr, &entry->addr, true, false= ); 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); @@ -92,7 +92,7 @@ static int mptcp_userspace_pm_delete_local_addr(struct mp= tcp_sock *msk, struct mptcp_pm_addr_entry *entry, *tmp; =20 list_for_each_entry_safe(entry, tmp, &msk->pm.userspace_pm_local_addr_lis= t, list) { - if (mptcp_addresses_equal(&entry->addr, &addr->addr, false)) { + if (mptcp_addresses_equal(&entry->addr, &addr->addr, false, false)) { /* TODO: a refcount is needed because the entry can * be used multiple times (e.g. fullmesh mode). */ @@ -144,7 +144,7 @@ int mptcp_userspace_pm_get_local_id(struct mptcp_sock *= msk, =20 spin_lock_bh(&msk->pm.lock); list_for_each_entry(e, &msk->pm.userspace_pm_local_addr_list, list) { - if (mptcp_addresses_equal(&e->addr, skc, false)) { + if (mptcp_addresses_equal(&e->addr, skc, false, false)) { entry =3D e; break; } diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 7905783c95e4..1c32f579e1a1 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -670,7 +670,8 @@ void mptcp_set_owner_r(struct sk_buff *skb, struct sock= *sk); void mptcp_set_state(struct sock *sk, int state); =20 bool mptcp_addresses_equal(const struct mptcp_addr_info *a, - const struct mptcp_addr_info *b, bool use_port); + const struct mptcp_addr_info *b, + bool use_port, bool use_id); void mptcp_local_address(const struct sock_common *skc, struct mptcp_addr_= info *addr); =20 /* called with sk socket lock held */ --=20 2.40.1 From nobody Tue May 14 12:26:28 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 5F2EE3C1D for ; Wed, 21 Feb 2024 06:31: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=1708497090; cv=none; b=hCz9mb0QchQLJWMBRtMA0DhZTxk3rBCjzjlhIO77yQICh9MwkuREjWQH4ctpCC6W/R2rfEejGKTK+i+H8FvS4UpEC7H+Lco/kRJHcopUD+myu34uRCaIM1jMdQxtpNVsyFv5EBUP7bH3K8rhi0pd6LlvwSH4H65bsJHc094JcnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497090; c=relaxed/simple; bh=2nnh2AFA49JVBD47uIUChTD6udxQy4S2ueKqazNay44=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=VbvLGNqoiiu1oqSB09Zdma8Xhvfv6cERZ30Ksx8VN+GKTSXWZmYdTs2fZzW17RmAjFdM0S+iMI/4ZBYG5TC7lVqeNkYmc/KMkmOZGpEtOmUAOH064/+kPhBR6qrwR5np62lO65MV97v9TKwGsIeWvq2jrgLm2+BR84jt+0eGOo0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=iC3Zbof3; 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="iC3Zbof3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6BDD1C433C7; Wed, 21 Feb 2024 06:31:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497090; bh=2nnh2AFA49JVBD47uIUChTD6udxQy4S2ueKqazNay44=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=iC3Zbof3gFFFn8EPHHyNo/kGCsyMs0q10Hu36xiTpFcrvvcpBZDtgOjYBQTgI9VuM KRs72/wjl52ZEfVuKXoeaqDxFbshysfrvv8WKPfBtaiXV4Z1j/5IWbcdQfhgFIbIQx q7iHRWEpZrAtilxoU7bYV2s0gsD/LGS0YQMrut3hK6RDy1xYkwynIotd37pvfdBbLR Of2NWW6o7IVW1+MrUKXU6mKTgcNpKMiCewd2m+SGdl0RWdKGhTBFiJhHOOu5YaJ71V R0GudMAQUfCqOkLM8h6/9XX6CGmropozUSyJoehq2TDFM9crgGa2wKnCyRm3F73kqD WZiQNA+xzk62Q== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 7/8] mptcp: add check_id for lookup_anno_list_by_saddr Date: Wed, 21 Feb 2024 14:31:14 +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 Add a new parameter check_id for mptcp_lookup_anno_list_by_saddr(), and pass it to mptcp_addresses_equal(). Then in mptcp_pm_del_add_timer(), the input parameter check_id can be passed as the new parameter into mptcp_lookup_anno_list_by_saddr(). After this, this condition: (!check_id || entry->addr.id =3D=3D addr->id) can be dropped, only test if 'entry' is NULL is enough. Signed-off-by: Geliang Tang --- net/mptcp/pm.c | 2 +- net/mptcp/pm_netlink.c | 13 +++++++------ net/mptcp/protocol.h | 3 ++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index c632c9ef69db..eb977922cf06 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -257,7 +257,7 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk, =20 spin_lock_bh(&pm->lock); =20 - if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pend= ing)) + if (mptcp_lookup_anno_list_by_saddr(msk, addr, false) && READ_ONCE(pm->wo= rk_pending)) mptcp_pm_schedule_work(msk, MPTCP_PM_SUBFLOW_ESTABLISHED); =20 spin_unlock_bh(&pm->lock); diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 1bf5c3440f84..4519dfa79775 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -242,14 +242,15 @@ bool mptcp_pm_nl_check_work_pending(struct mptcp_sock= *msk) =20 struct mptcp_pm_add_entry * mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, - const struct mptcp_addr_info *addr) + const struct mptcp_addr_info *addr, + bool check_id) { struct mptcp_pm_add_entry *entry; =20 lockdep_assert_held(&msk->pm.lock); =20 list_for_each_entry(entry, &msk->pm.anno_list, list) { - if (mptcp_addresses_equal(&entry->addr, addr, true, false)) + if (mptcp_addresses_equal(&entry->addr, addr, true, check_id)) return entry; } =20 @@ -329,12 +330,12 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, struct sock *sk =3D (struct sock *)msk; =20 spin_lock_bh(&msk->pm.lock); - entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) + entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr, check_id); + if (entry) entry->retrans_times =3D ADD_ADDR_RETRANS_MAX; spin_unlock_bh(&msk->pm.lock); =20 - if (entry && (!check_id || entry->addr.id =3D=3D addr->id)) + if (entry) sk_stop_timer_sync(sk, &entry->add_timer); =20 return entry; @@ -349,7 +350,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk, =20 lockdep_assert_held(&msk->pm.lock); =20 - add_entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr); + add_entry =3D mptcp_lookup_anno_list_by_saddr(msk, addr, false); =20 if (add_entry) { if (mptcp_pm_is_kernel(msk)) diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index 1c32f579e1a1..1c4c7a61e73b 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -967,7 +967,8 @@ mptcp_pm_del_add_timer(struct mptcp_sock *msk, const struct mptcp_addr_info *addr, bool check_id); struct mptcp_pm_add_entry * mptcp_lookup_anno_list_by_saddr(const struct mptcp_sock *msk, - const struct mptcp_addr_info *addr); + const struct mptcp_addr_info *addr, + bool check_id); int mptcp_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, u8 *flags, int *ifindex); --=20 2.40.1 From nobody Tue May 14 12:26:28 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 AE1D03C1D for ; Wed, 21 Feb 2024 06:31:31 +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=1708497091; cv=none; b=J2lSsDrgU08iX50MiT0tedY/8OZ2A0T9NrmjmxKLBNTItS+ti3H++dtwTLN/hUvdBwJpkcTzPf28uRir/p96/IMmRYz0AL26eqcXgOzbAg9IjjPo1Q1JXWx76/6lv4iXO/fB1sI/k5/PZmGexjLg+NFZzhG1DSwEukfE93vL9UM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1708497091; c=relaxed/simple; bh=222RzXjZJA8AQVKDVGycSKBUCPSGxv8k+PUvCTbYJ00=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SU3OwN6jiDy8k0DBdgCHj8NidiEYBW4vD3DpackEi/YDSVzCJ+T8EmJSsGKteOuSsvDUXof/YrAN4bknDGd8usMSFiGB/Dw2h1aIeraRg0aIiJk73z9FFBmT41qWbn4Smj6Xu3f4rqH2Y3/YazoZS45eYgK3tc9Ad15LslEFLn4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bU5+/YJM; 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="bU5+/YJM" Received: by smtp.kernel.org (Postfix) with ESMTPSA id BAA66C433F1; Wed, 21 Feb 2024 06:31:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1708497091; bh=222RzXjZJA8AQVKDVGycSKBUCPSGxv8k+PUvCTbYJ00=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bU5+/YJMwzgXuf+O8hmG2Lyw0U2tRhw3xBsJuAafKOdI6hDQgJpoWaI4ukJJ4rTiR 96DqObAXKG5VUYzMVQX9QvBdtMlFYgErIZrmFn0Ieyo9P/UXc5d/gQi+cxQFzVO4fs up+cPqf+MXn1rOpaBDEJsvNtUDcJzWpXSUVG76c6avyCqHhVnelKFkwPob9KK9/Lql jfiUaZjN4uHo/UNlIoKaoEjgXtr8cWuxtT8fCnBJxOA//ceYQPpRu85XuX60GHtI97 9usMB1YeqaffpRLyaR1DHbMuvo4TpRPLM8DSRbNxA5mWqx5IG6YsbWbx6ijF0KPEkb nfqPgKUo4C94w== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 8/8] selftests: mptcp: flush userspace addrs list Date: Wed, 21 Feb 2024 14:31:15 +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_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 | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index aedc5698f26a..9f1476f0e2ae 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -3374,6 +3374,34 @@ userspace_pm_get_addr() ip netns exec $1 ./pm_nl_ctl get $2 token $tk } =20 +# $1: ns ; $2: addr +userspace_pm_flush() +{ + if mptcp_lib_kallsyms_has "mptcp_userspace_pm_dump_addr$"; then + 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]} + userspace_pm_rm_addr $ns $id + userspace_pm_rm_sf $ns "$addr" $SUB_ESTABLISHED + done + else + print_skip + fi +} + userspace_pm_chk_dump_addr() { local ns=3D"${1}" @@ -3518,25 +3546,29 @@ userspace_tests() if reset_with_events "userspace pm create destroy 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 + pm_nl_set_limits $ns1 0 2 speed=3D5 \ run_tests $ns1 $ns2 10.0.1.1 & local tests_pid=3D$! wait_mpj $ns2 + userspace_pm_add_sf $ns2 10.0.2.2 10 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 + chk_join_nr 2 2 2 + chk_mptcp_info subflows 2 subflows 2 + chk_subflows_total 3 3 userspace_pm_chk_dump_addr "${ns2}" \ - "id 20 flags subflow 10.0.3.2" \ + $'id 10 flags subflow 10.0.2.2\nid 20 flags subflow 10.0.3.2' \ "subflow" + userspace_pm_chk_get_addr "${ns2}" "10" "id 10 flags subflow 10.0.2.2" userspace_pm_chk_get_addr "${ns2}" "20" "id 20 flags subflow 10.0.3.2" userspace_pm_rm_addr $ns2 20 userspace_pm_rm_sf $ns2 10.0.3.2 $SUB_ESTABLISHED userspace_pm_chk_dump_addr "${ns2}" \ - "" \ + "id 10 flags subflow 10.0.2.2" \ "after rm_addr 20" - chk_rm_nr 1 1 + userspace_pm_flush $ns2 + userspace_pm_chk_dump_addr "${ns2}" "" "after flush" + chk_rm_nr 2 2 chk_mptcp_info subflows 0 subflows 0 chk_subflows_total 1 1 kill_events_pids --=20 2.40.1