From nobody Mon Feb 9 01:47:21 2026 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6402:358d:0:0:0:0 with SMTP id y13csp814101edc; Mon, 7 Mar 2022 12:44:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJwXPeWLylb8TS3os/JFDVT2IU88zcyXaS00bRhOLjyVj8u7g02sgqq9mFMfASvY25bD3qot X-Received: by 2002:a81:5dd6:0:b0:2d6:3041:12e0 with SMTP id r205-20020a815dd6000000b002d6304112e0mr10332887ywb.331.1646685894750; Mon, 07 Mar 2022 12:44:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646685894; cv=none; d=google.com; s=arc-20160816; b=rGWqINij+AK+rofwUSzjzzezxK0wF7+1f3c2hBJ8eHG+vicg1b62ehH+KlRT9bARVy kUpxdPOl8zGYbtgoR9eCf3EgY01xffa5j9vCxv8ZQqDykYKpEREf58aIlpna932EK4La vMcx3KPHBobjwEFMoWHGgphyr3Ye7M2Yi1eVy/eWtM+MSBuWDo3XeTolF5Smd72LV6eh OGsdO4A/3PiIrHgzXtDeWVKO+gXVTCsIh0hSRzhT7QJM2YxYJ9kfrUVaR15S65OqetGG LniFRCD7E+rC3ZHkUnvVasep5GnGakh6x4YXusQmx5tv9hPLu78x5a+MODiOEKY9VDPk 6kkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=2eEI3yVDQ3VO8/Pkdx1XZviibuAVUL8AIJh/LWIbMPE=; b=bS6Q6sZ/8mltvqxAvJWaJzTYQX9wgNtjKiSo/+P1gS3X/g0e8M1vPZoxu6OLq2tL6q UVY1JzqLVRDFCavOpfagAH+uudonUSaNkn1Z+b8RAkrcxddSPh3G7yfZVMngWU3XjQdT fVU7vABnOOlOV42H+YWGnKT2gwCSaqgeYa0fVFNOWwj5lOBKwqqADoLi4cvGvW6pbqeU xK9SAbb5DlBNCD80mXImKUtc2SZIHsBQIzdHkdoBbYHINggY7CUNx6wZGfzUY5D9gp0b y7FfqkZ/as4eUzk9/yV/6Sf0Z3T26mS7fKGwWZx8fiZ7lq2n4Th8K4vVW4nn22ulsbX3 B1ng== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="SZTl8U/2"; spf=pass (google.com: domain of mptcp+bounces-4136-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4136-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ewr.edge.kernel.org (ewr.edge.kernel.org. [2604:1380:1:3600::1]) by mx.google.com with ESMTPS id b204-20020a2534d5000000b00628755c3ac7si8745599yba.169.2022.03.07.12.44.54 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 Mar 2022 12:44:54 -0800 (PST) Received-SPF: pass (google.com: domain of mptcp+bounces-4136-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) client-ip=2604:1380:1:3600::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="SZTl8U/2"; spf=pass (google.com: domain of mptcp+bounces-4136-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:1:3600::1 as permitted sender) smtp.mailfrom="mptcp+bounces-4136-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ewr.edge.kernel.org (Postfix) with ESMTPS id 0668C1C0C58 for ; Mon, 7 Mar 2022 20:44:54 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E08734351; Mon, 7 Mar 2022 20:44:49 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) (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 1B6D5434F for ; Mon, 7 Mar 2022 20:44:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1646685888; x=1678221888; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TAAcffiJOJsRQQTyOrz1x5kOdHFzms/WH96XqyL1xuE=; b=SZTl8U/2xX9tXp0F829OpZyQh+as+TFRPGoGou+057w5U8UBD8S6H6YQ ZO3b/mMLYs0AWKv4eugqz/JE2k7OMWzly3Kg/e1Hd2h41I5vcBYv18U6I GFinP+bWJzlxjQeFvAD9HufRGTf1fnmR01Tyg9x+n9z9b909pqmcNiM4G ifHIOtbmNyWfaSiZw5mobydUpU7hFc82BLK+cJu5zRZ38ALur5WYxzgdV XHlcdts/iOkRjNNSKggEYc3VbEwLztmBuFqj7XaXGLgbOlUQsw46H+ig6 A6WUSzxnYIdEvl+Og/Y1df0n3zT2e0zmjzaJX9zgpO2F5FstnD4EUjUd/ w==; X-IronPort-AV: E=McAfee;i="6200,9189,10279"; a="317731788" X-IronPort-AV: E=Sophos;i="5.90,163,1643702400"; d="scan'208";a="317731788" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Mar 2022 12:44:45 -0800 X-IronPort-AV: E=Sophos;i="5.90,163,1643702400"; d="scan'208";a="553320487" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.192.43]) by orsmga008-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Mar 2022 12:44:45 -0800 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 5/9] mptcp: more careful RM_ADDR generation Date: Mon, 7 Mar 2022 12:44:35 -0800 Message-Id: <20220307204439.65164-6-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220307204439.65164-1-mathew.j.martineau@linux.intel.com> References: <20220307204439.65164-1-mathew.j.martineau@linux.intel.com> 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: Paolo Abeni The in-kernel MPTCP path manager, when processing the MPTCP_PM_CMD_FLUSH_AD= DR command, generates RM_ADDR events for each known local address. While that is allowed by the RFC, it makes unpredictable the exact number of RM_ADDR generated when both ends flush the PM addresses. This change restricts the RM_ADDR generation to previously explicitly announced addresses, and adjust the expected results in a bunch of related self-tests. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/pm_netlink.c | 10 ++--- .../testing/selftests/net/mptcp/mptcp_join.sh | 42 ++++++++++++++++--- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 75a0a27547e6..91b77d1162cf 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -1466,14 +1466,12 @@ static void mptcp_pm_remove_addrs_and_subflows(stru= ct mptcp_sock *msk, =20 list_for_each_entry(entry, rm_list, list) { if (lookup_subflow_by_saddr(&msk->conn_list, &entry->addr) && - alist.nr < MPTCP_RM_IDS_MAX && - slist.nr < MPTCP_RM_IDS_MAX) { - alist.ids[alist.nr++] =3D entry->addr.id; + slist.nr < MPTCP_RM_IDS_MAX) slist.ids[slist.nr++] =3D entry->addr.id; - } else if (remove_anno_list_by_saddr(msk, &entry->addr) && - alist.nr < MPTCP_RM_IDS_MAX) { + + if (remove_anno_list_by_saddr(msk, &entry->addr) && + alist.nr < MPTCP_RM_IDS_MAX) alist.ids[alist.nr++] =3D entry->addr.id; - } } =20 if (alist.nr) { diff --git a/tools/testing/selftests/net/mptcp/mptcp_join.sh b/tools/testin= g/selftests/net/mptcp/mptcp_join.sh index d4769bc0d842..02bab8a2d5a5 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_join.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_join.sh @@ -1149,14 +1149,25 @@ chk_rm_nr() { local rm_addr_nr=3D$1 local rm_subflow_nr=3D$2 - local invert=3D${3:-""} + local invert + local simult local count local dump_stats local addr_ns=3D$ns1 local subflow_ns=3D$ns2 local extra_msg=3D"" =20 - if [[ $invert =3D "invert" ]]; then + shift 2 + while [ -n "$1" ]; do + [ "$1" =3D "invert" ] && invert=3Dtrue + [ "$1" =3D "simult" ] && simult=3Dtrue + shift + done + + if [ -z $invert ]; then + addr_ns=3D$ns1 + subflow_ns=3D$ns2 + elif [ $invert =3D "true" ]; then addr_ns=3D$ns2 subflow_ns=3D$ns1 extra_msg=3D" invert" @@ -1176,6 +1187,25 @@ chk_rm_nr() echo -n " - rmsf " count=3D`ip netns exec $subflow_ns nstat -as | grep MPTcpExtRmSubflow | a= wk '{print $2}'` [ -z "$count" ] && count=3D0 + if [ -n "$simult" ]; then + local cnt=3D$(ip netns exec $addr_ns nstat -as | grep MPTcpExtRmSubflow = | awk '{print $2}') + local suffix + + # in case of simult flush, the subflow removal count on each side is + # unreliable + [ -z "$cnt" ] && cnt=3D0 + count=3D$((count + cnt)) + [ "$count" !=3D "$rm_subflow_nr" ] && suffix=3D"$count in [$rm_subflow_n= r:$((rm_subflow_nr*2))]" + if [ $count -ge "$rm_subflow_nr" ] && \ + [ "$count" -le "$((rm_subflow_nr *2 ))" ]; then + echo "[ ok ] $suffix" + else + echo "[fail] got $count RM_SUBFLOW[s] expected in range [$rm_subflow_nr= :$((rm_subflow_nr*2))]" + ret=3D1 + dump_stats=3D1 + fi + return + fi if [ "$count" !=3D "$rm_subflow_nr" ]; then echo "[fail] got $count RM_SUBFLOW[s] expected $rm_subflow_nr" ret=3D1 @@ -1666,7 +1696,7 @@ remove_tests() run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow chk_join_nr "flush subflows and signal" 3 3 3 chk_add_nr 1 1 - chk_rm_nr 2 2 + chk_rm_nr 1 3 invert simult =20 # subflows flush reset @@ -1677,7 +1707,7 @@ remove_tests() pm_nl_add_endpoint $ns2 10.0.4.2 flags subflow run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow chk_join_nr "flush subflows" 3 3 3 - chk_rm_nr 3 3 + chk_rm_nr 0 3 simult =20 # addresses flush reset @@ -1689,7 +1719,7 @@ remove_tests() run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow chk_join_nr "flush addresses" 3 3 3 chk_add_nr 3 3 - chk_rm_nr 3 3 invert + chk_rm_nr 3 3 invert simult =20 # invalid addresses flush reset @@ -1973,7 +2003,7 @@ add_addr_ports_tests() run_tests $ns1 $ns2 10.0.1.1 0 -8 -2 slow chk_join_nr "flush subflows and signal with port" 3 3 3 chk_add_nr 1 1 - chk_rm_nr 2 2 + chk_rm_nr 1 3 invert simult =20 # multiple addresses with port reset --=20 2.35.1