From nobody Thu May 2 11:57:58 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp746273pis; Wed, 4 May 2022 14:54:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzoq4RY3OXk31M0uJQD0Bdf4joGTJaygcQR3p39CjF1mDCS5K3vik45BLfZ+q9JlGDziRu7 X-Received: by 2002:a17:902:cccc:b0:15a:30ec:2f56 with SMTP id z12-20020a170902cccc00b0015a30ec2f56mr23835025ple.169.1651701266819; Wed, 04 May 2022 14:54:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651701266; cv=none; d=google.com; s=arc-20160816; b=gl+meTXA+V7mhthRuHbaFa9bIMkPabiCFFW2AilJYdRL0bNJtwnmfZs3WOzr12knIR Qux2JpdmJh3mC18rbuTC3PSbRw9tFkve7dlj4WzaXZiCxf9blGanW0A8krfQxAvoC8DT JSNurNb6PfNdeSGRBf63foCdpcxbpB5Cid+n3B3+M7Q62+yARHqxrWQNPAgKWyAlig/U th3I8G5OIfZQZrvujEk7F5PQejG7tD8JmWXg32Bnw9GGnZq4oCK0dwUGp9Vo9b7DhdS0 c5UTz8WZs8Sbw4fPr4YPG+Yo42L0iwcPeRJHKAq3mq1Yl1qctYpotFal9Yg7thhgdEHu qa1Q== 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=Iold8I5HHnK+mtIlb+OIOwT1oSiQyu1NxBjuKf2fUn4=; b=KA3vhmoOogBIh3I76qr8frJ1bEOdy4BsLP3rIGNKbU2e2RZrZl2UKSvApUiXiGnR3P VuuC6L58k0k3SPKr4/kcrGTkVX0O/t6X8CxSY+i4Zj3YVW46Q8LEzXtPGKuMQaISl9jE Ipb9GWyUr7IafxL3z7LKpAhaPyGdhvCqbwME5VrDPwUtxkOncEu9G9aLH4tl2MehdL7C 6HpSJXjzQPtyh7aQh94i5X43AZrSppXatknIS2o7bIYAaZyFJiTXiAHGjXurJS9/G56g mOO1kpbElmMfKHwYikIb+eE0NsHSkPfmB+EOmwYZgzEbv3izeAWglepVoDIuvAKLaNt1 qpDQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ctWDLApt; spf=pass (google.com: domain of mptcp+bounces-5111-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5111-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id kb3-20020a17090ae7c300b001cb6eb55244si6740419pjb.93.2022.05.04.14.54.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 May 2022 14:54:26 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5111-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ctWDLApt; spf=pass (google.com: domain of mptcp+bounces-5111-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.88.99 as permitted sender) smtp.mailfrom="mptcp+bounces-5111-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 sv.mirrors.kernel.org (Postfix) with ESMTPS id 4D60628099E for ; Wed, 4 May 2022 21:54:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B359433F4; Wed, 4 May 2022 21:54:25 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 C9BFD33E0 for ; Wed, 4 May 2022 21:54:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651701264; x=1683237264; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qnJzb3wltAIT3SqGTtEHEESmhK0f8+gNhdxlDAAqu2E=; b=ctWDLAptBo0wJKo9QjewxOk6QBKEovi8Gdqr4puKkNQ5reP9fqpnSjng 1xUgt1YKSe1qIwgiVsGGwHFcZXUwkzUxPBR/BtKsvj1QlCvJverpcBStc A1FAXvlEGpVewCBmzooy0RBVT5fTJtTOhVSvFeNtwj5MdIjRciNn9V31c twjZca46PJBirqvTC72QFmNU3zsKp9jIjw1bRzlR2v3gr+9wfiGoN9NLu ON03wHOuW+zKeQkhsQqiF1xRFplhvgkCRx/+LgdeYxxWv8w5wyCof8GCd sCWNq8z3eWwGuIJLy8CmCt601qUWCtKylTJ6LpRbnaIbNL09TKz2/gY00 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="249892480" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="249892480" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:19 -0700 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="621000359" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.251.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:16 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 1/5] mptcp: really share subflow snd_wnd Date: Wed, 4 May 2022 14:54:04 -0700 Message-Id: <20220504215408.349318-2-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504215408.349318-1-mathew.j.martineau@linux.intel.com> References: <20220504215408.349318-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 As per RFC, mptcp subflows use a "shared" snd_wnd: the effective window is the maximum among the current values received on all subflows. Without such feature a data transfer using multiple subflows could block. Window sharing is currently implemented in the RX side: __tcp_select_window uses the mptcp-level receive buffer to compute the announced window. That is not enough: the TCP stack will stick to the window size received on the given subflow; we need to propagate the msk window value on each subflow at xmit time. Change the packet scheduler to ignore the subflow level window and use instead the msk level one Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/protocol.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 52ed2c0ac901..97a375eabd34 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1141,19 +1141,20 @@ struct mptcp_sendmsg_info { bool data_lock_held; }; =20 -static int mptcp_check_allowed_size(struct mptcp_sock *msk, u64 data_seq, - int avail_size) +static int mptcp_check_allowed_size(const struct mptcp_sock *msk, struct s= ock *ssk, + u64 data_seq, int avail_size) { u64 window_end =3D mptcp_wnd_end(msk); + u64 mptcp_snd_wnd; =20 if (__mptcp_check_fallback(msk)) return avail_size; =20 - if (!before64(data_seq + avail_size, window_end)) { - u64 allowed_size =3D window_end - data_seq; + mptcp_snd_wnd =3D window_end - data_seq; + avail_size =3D min_t(unsigned int, mptcp_snd_wnd, avail_size); =20 - return min_t(unsigned int, allowed_size, avail_size); - } + if (unlikely(tcp_sk(ssk)->snd_wnd < mptcp_snd_wnd)) + tcp_sk(ssk)->snd_wnd =3D min_t(u64, U32_MAX, mptcp_snd_wnd); =20 return avail_size; } @@ -1305,7 +1306,7 @@ static int mptcp_sendmsg_frag(struct sock *sk, struct= sock *ssk, } =20 /* Zero window and all data acked? Probe. */ - copy =3D mptcp_check_allowed_size(msk, data_seq, copy); + copy =3D mptcp_check_allowed_size(msk, ssk, data_seq, copy); if (copy =3D=3D 0) { u64 snd_una =3D READ_ONCE(msk->snd_una); =20 @@ -1498,11 +1499,16 @@ static struct sock *mptcp_subflow_get_send(struct m= ptcp_sock *msk) * to check that subflow has a non empty cwin. */ ssk =3D send_info[SSK_MODE_ACTIVE].ssk; - if (!ssk || !sk_stream_memory_free(ssk) || !tcp_sk(ssk)->snd_wnd) + if (!ssk || !sk_stream_memory_free(ssk)) return NULL; =20 - burst =3D min_t(int, MPTCP_SEND_BURST_SIZE, tcp_sk(ssk)->snd_wnd); + burst =3D min_t(int, MPTCP_SEND_BURST_SIZE, mptcp_wnd_end(msk) - msk->snd= _nxt); wmem =3D READ_ONCE(ssk->sk_wmem_queued); + if (!burst) { + msk->last_snd =3D NULL; + return ssk; + } + subflow =3D mptcp_subflow_ctx(ssk); subflow->avg_pacing_rate =3D div_u64((u64)subflow->avg_pacing_rate * wmem= + READ_ONCE(ssk->sk_pacing_rate) * burst, --=20 2.36.0 From nobody Thu May 2 11:57:58 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp746320pis; Wed, 4 May 2022 14:54:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwnZYns30a4FcQhBvh26IcAs1KqUDMAdbZUyXYVHrZ2WuC0JA/OqQyTFkbw65XnwutY0TDI X-Received: by 2002:a05:6870:15d0:b0:e9:8787:60c2 with SMTP id k16-20020a05687015d000b000e9878760c2mr847307oad.294.1651701273196; Wed, 04 May 2022 14:54:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651701273; cv=none; d=google.com; s=arc-20160816; b=EpqWpSDFihfFrOAYCpyHUgqvCFcAO/79kJEZ4tJ+YNShxPxFUrdvOsEt0tD24qMi7n 9jTTfgEmJSijJJkVafk+UaKPzHG0sqwVZ7OPrsqcadMLjA6l/2go1rGlS6TRAMxKTOpk PC2GGHVJ0JiSRg9ZjLmCsScICHjrzJfpIem1Hveh+JzQHRYUMc+seFJNggXhoTF4TECG nklzsZkPsxNYSBKXXM/ri2pV0skwz+NDRHPi3gsM9/Ij0ZRHiC0VAmsM5HleSnbfKdR2 aeG/SuEmNNL+yzzlrzwskjMpVAALSZSDoABnG37XarCCapzIu6iZtLJrjkgXtQjWxkv7 qaew== 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=wIrF94emSHUflTjFySXUYBJ75BM3l3wykhP25YWAW7k=; b=m772yUf8bcirJzghs8WaSHd3Yw5b9prUPNTIK4xvP2hRDqWQvsvPtFrxRY+sscXJ0L //HKYdeXl36fjNuHeESgbOBKB9D83S8051r3BjaIt5MeZni0jCOp9DLx9NshkYqGxu77 xb0uKvbsn3QNBEF9VqqpQIriuNSL4KQlvKzL9Mq1zsk8W/5l7MGypaFMcn5NdieiW0PN K1sbnmJuDcwlzhwpcEYjwcXegyTwn14QOO9kkpBlfCq0Wy9zXpHOX+Sd3kz/XvpPuc4o soaXkefXmJNbYuBUnuvCZYzLi7xh37XN52OmYWhFtbVhaYxowzXhtytb0vf30DNJnm+m UCYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=QvsoqF6f; spf=pass (google.com: domain of mptcp+bounces-5114-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5114-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id s23-20020a9d7597000000b00605fc96dac3si8029493otk.185.2022.05.04.14.54.33 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 May 2022 14:54:33 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5114-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=QvsoqF6f; spf=pass (google.com: domain of mptcp+bounces-5114-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5114-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 da.mirrors.kernel.org (Postfix) with ESMTPS id 078F82E09C0 for ; Wed, 4 May 2022 21:54:33 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D303D33E0; Wed, 4 May 2022 21:54:30 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (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 8B02133F3 for ; Wed, 4 May 2022 21:54:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651701268; x=1683237268; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Keh/V0hKcsPVV4uZnaQ4ISYtNk/JzPjaop5gmEJiqy4=; b=QvsoqF6fNuouDUaPTlDnPEgoREf5oXiapGlpNEUsb569g9VSV52+Q7T+ CKVJ4qgOIwqB+VfhQK6G66v/1TYTJFLaMYFMFgw67nEzPoKRF47khqtbS wt3hZY4xfBUpQz6wzFXW3MvsgwzeU2aBbA8tGvXfhjbv5lO9KUw8KdoE1 jEo/gapZRwymhC09qHm6L594KhY3Fhry9OIgOHliCM3vy53Xe+m7wMwwP YkF5FMUnHYWaXt2iRvdXoMks+MqY+uFPlFVMCNWlPMr0DbovCTskWiJ7N yLDsWuyFDnVIOyZeGLLbbky+Ni2iSXyzl+FtOiwF7pQwmfL/IqIagO85+ g==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="249892481" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="249892481" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:19 -0700 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="621000370" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.251.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:17 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 2/5] mptcp: add mib for xmit window sharing Date: Wed, 4 May 2022 14:54:05 -0700 Message-Id: <20220504215408.349318-3-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504215408.349318-1-mathew.j.martineau@linux.intel.com> References: <20220504215408.349318-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 Bump a counter for counter when snd_wnd is shared among subflow, for observability's sake. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/mib.c | 1 + net/mptcp/mib.h | 1 + net/mptcp/protocol.c | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/net/mptcp/mib.c b/net/mptcp/mib.c index d93a8c9996fd..6a6f8151375a 100644 --- a/net/mptcp/mib.c +++ b/net/mptcp/mib.c @@ -56,6 +56,7 @@ static const struct snmp_mib mptcp_snmp_list[] =3D { SNMP_MIB_ITEM("RcvPruned", MPTCP_MIB_RCVPRUNED), SNMP_MIB_ITEM("SubflowStale", MPTCP_MIB_SUBFLOWSTALE), SNMP_MIB_ITEM("SubflowRecover", MPTCP_MIB_SUBFLOWRECOVER), + SNMP_MIB_ITEM("SndWndShared", MPTCP_MIB_SNDWNDSHARED), SNMP_MIB_SENTINEL }; =20 diff --git a/net/mptcp/mib.h b/net/mptcp/mib.h index 529d07af9e14..2411510bef66 100644 --- a/net/mptcp/mib.h +++ b/net/mptcp/mib.h @@ -49,6 +49,7 @@ enum linux_mptcp_mib_field { MPTCP_MIB_RCVPRUNED, /* Incoming packet dropped due to memory limit */ MPTCP_MIB_SUBFLOWSTALE, /* Subflows entered 'stale' status */ MPTCP_MIB_SUBFLOWRECOVER, /* Subflows returned to active status after bei= ng stale */ + MPTCP_MIB_SNDWNDSHARED, /* Subflow snd wnd is overridden by msk's one */ __MPTCP_MIB_MAX }; =20 diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 97a375eabd34..6710960b74f3 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1153,8 +1153,10 @@ static int mptcp_check_allowed_size(const struct mpt= cp_sock *msk, struct sock *s mptcp_snd_wnd =3D window_end - data_seq; avail_size =3D min_t(unsigned int, mptcp_snd_wnd, avail_size); =20 - if (unlikely(tcp_sk(ssk)->snd_wnd < mptcp_snd_wnd)) + if (unlikely(tcp_sk(ssk)->snd_wnd < mptcp_snd_wnd)) { tcp_sk(ssk)->snd_wnd =3D min_t(u64, U32_MAX, mptcp_snd_wnd); + MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_SNDWNDSHARED); + } =20 return avail_size; } --=20 2.36.0 From nobody Thu May 2 11:57:58 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp746291pis; Wed, 4 May 2022 14:54:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzXHPAvV4tdcRX3wA6EC6AawHjnmxPausfdebbm1GH05xIA/651UA9vUSokiKDXkWtjtRHt X-Received: by 2002:a05:6808:11c2:b0:2f9:b58f:5ac7 with SMTP id p2-20020a05680811c200b002f9b58f5ac7mr858057oiv.132.1651701269560; Wed, 04 May 2022 14:54:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651701269; cv=none; d=google.com; s=arc-20160816; b=Fw2gDAKH8k8cTENXt4kAToRXpkMDnj90E0QbtbANcnoqeEM5Ya8/zQCp3+GIjTI7B5 khyNDTnbxnYbb3hB9WgPr20CSPLPwX6gBVfZTTl1JGRn0TPYecQIjog1xnJI3WX+AsjI gQLtvWD2dSiwuLu6rxfCmAekeFKw8lrY4t47543tsMI3eE7VHVw/9Jw1igP6IoPId9ta EWwNIMaj/JRGouNCLCSMQWupoa4VYG3KScNBx/5/6hSBBphFoz4JvgJfgJmsRiH48lA3 dCD/AC7Fv6LGqf2rHFN6ZWZcJCXd8zfmc/lVV3H+rlxlLXtefdOq/ufVu2MNuc7igaH2 dPZg== 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=g15k+IgoQZHflWabhAA4mIPgz8qbqZQkIr2YUrLtnoQ=; b=k/h1NId2vkWgqjb1lTjOKZ3CVp++mQf9P2VyYObxOMnamDIXbVJ5b+IWOmUfxLnlSW 6HjRB0soCN4lIyPgN00/gaFr61xIr3+et/GD2XOFA1LGzrZyH4ZHsQ13LPJJdp0C5zFq x/F7/vTnRCvAQJB3UeFZKy/AtMpWjx4SVxP/jpL/ivCREXHPgY9DoEUt5Wax+GPaUejJ VXA+sZgV98Y2fhOhoJTEvE4rDpzlLv6oEFDiiyvkQkMZ+QoUx0qLeAo36f6ZVXNjw1xq euCQQnVOlG70UtvKJTWxJup8eXIg47jv+uCRaEHwWkGuQoGDF55/EG9FsIPVZ5qJFi0Y Is1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nFG3KUTU; spf=pass (google.com: domain of mptcp+bounces-5112-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5112-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [2604:1380:4040:4f00::1]) by mx.google.com with ESMTPS id m29-20020a056870889d00b000edf22f1835si1277075oam.18.2022.05.04.14.54.29 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 May 2022 14:54:29 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5112-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) client-ip=2604:1380:4040:4f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=nFG3KUTU; spf=pass (google.com: domain of mptcp+bounces-5112-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 2604:1380:4040:4f00::1 as permitted sender) smtp.mailfrom="mptcp+bounces-5112-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 da.mirrors.kernel.org (Postfix) with ESMTPS id 589152E09C1 for ; Wed, 4 May 2022 21:54:29 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EF32A33E8; Wed, 4 May 2022 21:54:27 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 A242133E0 for ; Wed, 4 May 2022 21:54:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651701266; x=1683237266; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UHrBSVM6h23pOzib57ZIg1rDyJtjxy4O5aLuYMcgO5I=; b=nFG3KUTUd+uyI6nJYLZW1H+7eEnx0CAYKzqp/EXt8q8tTnUYJyGamvSh meKpmGZfAdugszFJb25rnh0trtv10Kx6NrSCrH/RHgcmLmA2FO3iz2JBs kfjyfSUELNgixAvaoJdAUJcxGovFhFTFlICas+wBWTL7n+ZRTS24TCK4p HCc2nR7qNIzBvjxy+BG9ipsMGHN7O9S/Sn2JfDLh64p+LcBlolzq1LPID 8J+LhJA55mSqSDKw9QxdkcOHf0em+vyOPmSbZeLf9NT0WLttnE+PIkQ4X qokQ28NvRTCknWZ51eWgEb9uU8bTNu7Bp6CQyRC6LcuZMW5SiNepJUwDh g==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="268064536" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="268064536" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:20 -0700 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="621000378" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.251.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:19 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 3/5] tcp: allow MPTCP to update the announced window Date: Wed, 4 May 2022 14:54:06 -0700 Message-Id: <20220504215408.349318-4-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504215408.349318-1-mathew.j.martineau@linux.intel.com> References: <20220504215408.349318-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 MPTCP RFC requires that the MPTCP-level receive window's right edge never moves backward. Currently the MPTCP code enforces such constraint while tracking the right edge, but it does not reflects it on the wire, as MPTCP lacks a suitable hook to update accordingly the TCP header. This change modifies the existing mptcp_write_options() hook, providing the current packet's TCP header to the MPTCP protocol, so that the next patch could implement the above mentioned constraint. No functional changes intended. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- include/net/mptcp.h | 2 +- net/ipv4/tcp_output.c | 14 ++++++++------ net/mptcp/options.c | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 8b1afd6f5cc4..d4ec894ce67b 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -125,7 +125,7 @@ bool mptcp_established_options(struct sock *sk, struct = sk_buff *skb, struct mptcp_out_options *opts); bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb); =20 -void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp, +void mptcp_write_options(struct tcphdr *th, __be32 *ptr, struct tcp_sock *= tp, struct mptcp_out_options *opts); =20 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info); diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 5f91a9536e00..b092228e4342 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -445,12 +445,13 @@ struct tcp_out_options { struct mptcp_out_options mptcp; }; =20 -static void mptcp_options_write(__be32 *ptr, const struct tcp_sock *tp, +static void mptcp_options_write(struct tcphdr *th, __be32 *ptr, + struct tcp_sock *tp, struct tcp_out_options *opts) { #if IS_ENABLED(CONFIG_MPTCP) if (unlikely(OPTION_MPTCP & opts->options)) - mptcp_write_options(ptr, tp, &opts->mptcp); + mptcp_write_options(th, ptr, tp, &opts->mptcp); #endif } =20 @@ -606,9 +607,10 @@ static void bpf_skops_write_hdr_opt(struct sock *sk, s= truct sk_buff *skb, * At least SACK_PERM as the first option is known to lead to a disaster * (but it may well be that other scenarios fail similarly). */ -static void tcp_options_write(__be32 *ptr, struct tcp_sock *tp, +static void tcp_options_write(struct tcphdr *th, struct tcp_sock *tp, struct tcp_out_options *opts) { + __be32 *ptr =3D (__be32 *)(th + 1); u16 options =3D opts->options; /* mungable copy */ =20 if (unlikely(OPTION_MD5 & options)) { @@ -702,7 +704,7 @@ static void tcp_options_write(__be32 *ptr, struct tcp_s= ock *tp, =20 smc_options_write(ptr, &options); =20 - mptcp_options_write(ptr, tp, opts); + mptcp_options_write(th, ptr, tp, opts); } =20 static void smc_set_option(const struct tcp_sock *tp, @@ -1355,7 +1357,7 @@ static int __tcp_transmit_skb(struct sock *sk, struct= sk_buff *skb, th->window =3D htons(min(tp->rcv_wnd, 65535U)); } =20 - tcp_options_write((__be32 *)(th + 1), tp, &opts); + tcp_options_write(th, tp, &opts); =20 #ifdef CONFIG_TCP_MD5SIG /* Calculate the MD5 hash, as we have all we need now */ @@ -3591,7 +3593,7 @@ struct sk_buff *tcp_make_synack(const struct sock *sk= , struct dst_entry *dst, =20 /* RFC1323: The window in SYN & SYN/ACK segments is never scaled. */ th->window =3D htons(min(req->rsk_rcv_wnd, 65535U)); - tcp_options_write((__be32 *)(th + 1), NULL, &opts); + tcp_options_write(th, NULL, &opts); th->doff =3D (tcp_header_size >> 2); __TCP_INC_STATS(sock_net(sk), TCP_MIB_OUTSEGS); =20 diff --git a/net/mptcp/options.c b/net/mptcp/options.c index e05d9458a025..2570911735ab 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1265,7 +1265,7 @@ static u16 mptcp_make_csum(const struct mptcp_ext *mp= ext) ~csum_unfold(mpext->csum)); } =20 -void mptcp_write_options(__be32 *ptr, const struct tcp_sock *tp, +void mptcp_write_options(struct tcphdr *th, __be32 *ptr, struct tcp_sock *= tp, struct mptcp_out_options *opts) { const struct sock *ssk =3D (const struct sock *)tp; --=20 2.36.0 From nobody Thu May 2 11:57:58 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp746313pis; Wed, 4 May 2022 14:54:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzup6DjPyE1VLOtfKdXtW52MR+gHjC4f0FzJFbl6+9NUlcmND/NgPf6TyMXkQHNpGJqlThr X-Received: by 2002:a05:6870:eca2:b0:ed:af30:43c4 with SMTP id eo34-20020a056870eca200b000edaf3043c4mr812353oab.95.1651701272141; Wed, 04 May 2022 14:54:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651701272; cv=none; d=google.com; s=arc-20160816; b=hO1G/umbn4Ygan+0MV9pGKusKL9gfP9QHoAyc3Ly5VZ+A3txhd/TDqXGzAdfQdZIVE 20GwqtZwBNEcEVBkgNimPp5WBUkR2Y8MIDywE3IGrW0pyVZ79U5sC/HA2s2dzatzQtnx 0BjC1u88LLb7gAQFTnyXxC7VJkz7qrvJVRr8+djqbPuDQwWKuLS6IoSWfcJxYb5vwUkk YFMAfCBPnpGS9BC6CyTgVIJ9v6J4mb7Qp3FS9L5oAPM9zOq/Nlau2PamIG8Ck3igUXPm 5anXAmzVJt9be1KKp95fXy9krzhnoe0Luj7NAUSUTZOgXSI3XraM69/pWbciqrtsIfsM D7OQ== 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=bvsFvtQjmwL9InKtD9LuxRK8yOHRDwapVNUh2tq+iM0=; b=AqKXa0QAjH+p1IQltSvMnq7hWzWjVUOKCfYjSmfomj7JD9aQvKHL0Hf53rNoAGaoEX DPORg3TrrG5fy8PdpoawDCMm4sIyBDkNXRDaAlJeTEmwqeXjqZBacoA2jpjd2Gbx9UfT VNkvA7IuQpTr6IEkBaJOfkb2+idWOsNqYKotAUC1dSE9bod8dCfmhSo3HE6uJ1T/rx+L eBYV51mlFTmtN413VgbYcwEahvrxP/ZC6E4UCqbE6hLJM0/MJS1v2pI4PnfmDj9Cdus0 Lqa9dOgUtL12TpJh8lU/hz3OXX5qSSGuqCjlFM86gQ3oSBqAlAR3cjRVd7bCKE1gCf/1 Tu4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bs9NZyAn; spf=pass (google.com: domain of mptcp+bounces-5113-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5113-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id q23-20020a9d6317000000b006054da2f3a8si10966697otk.70.2022.05.04.14.54.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 May 2022 14:54:32 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5113-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=bs9NZyAn; spf=pass (google.com: domain of mptcp+bounces-5113-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5113-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 da.mirrors.kernel.org (Postfix) with ESMTPS id DCF272E09BC for ; Wed, 4 May 2022 21:54:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 804D333E8; Wed, 4 May 2022 21:54:30 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 F165733E0 for ; Wed, 4 May 2022 21:54:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651701268; x=1683237268; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1oOaevUEUkpa5jtiPU0dj9G8Vpovcb/v0acu1kMD198=; b=bs9NZyAnz54Qp+rNeXxX4Rk5rWnK0WdMNMxa2FW17kYTcgILR7ekdoBK 8rmJ/z3vJdKMyXTc7AWh2c6MY3/Q9Ucfsd+ptes5blMl2SPiAzgONXom4 QFKzCFvabNeVS06RSie5//3PZkKvVPNK/gEvHhgkpTYgMTZfHEj2hEeN3 80vh/KVkdgyQX81Sks6rcKX37znAkkEnFsReFOyA6d7vjW6nd8oqUAbuQ 9gwd4C/lTeXSf4GcRYZD6ePJOhNZBy6M5man/3PbvbPrc2C10LGBGgga5 zmD9ZW50gDbQODzguI8U1welsfpdQqap8o017+iLCyhnYHJMT8HBaAHt4 Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="268064537" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="268064537" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:22 -0700 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="621000382" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.251.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:20 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 4/5] mptcp: never shrink offered window Date: Wed, 4 May 2022 14:54:07 -0700 Message-Id: <20220504215408.349318-5-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504215408.349318-1-mathew.j.martineau@linux.intel.com> References: <20220504215408.349318-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 As per RFC, the offered MPTCP-level window should never shrink. While we currently track the right edge, we don't enforce the above constraint on the wire. Additionally, concurrent xmit on different subflows can end-up in erroneous right edge update. Address the above explicitly updating the announced window and protecting the update with an additional atomic operation (sic) Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/options.c | 52 ++++++++++++++++++++++++++++++++++++++------ net/mptcp/protocol.c | 8 +++---- net/mptcp/protocol.h | 2 +- 3 files changed, 50 insertions(+), 12 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 2570911735ab..3e3156cfe813 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1224,20 +1224,58 @@ bool mptcp_incoming_options(struct sock *sk, struct= sk_buff *skb) return true; } =20 -static void mptcp_set_rwin(const struct tcp_sock *tp) +static void mptcp_set_rwin(struct tcp_sock *tp, struct tcphdr *th) { const struct sock *ssk =3D (const struct sock *)tp; - const struct mptcp_subflow_context *subflow; + struct mptcp_subflow_context *subflow; + u64 ack_seq, rcv_wnd_old, rcv_wnd_new; struct mptcp_sock *msk; - u64 ack_seq; + u32 new_win; + u64 win; =20 subflow =3D mptcp_subflow_ctx(ssk); msk =3D mptcp_sk(subflow->conn); =20 - ack_seq =3D READ_ONCE(msk->ack_seq) + tp->rcv_wnd; + ack_seq =3D READ_ONCE(msk->ack_seq); + rcv_wnd_new =3D ack_seq + tp->rcv_wnd; + + rcv_wnd_old =3D atomic64_read(&msk->rcv_wnd_sent); + if (after64(rcv_wnd_new, rcv_wnd_old)) { + u64 rcv_wnd; =20 - if (after64(ack_seq, READ_ONCE(msk->rcv_wnd_sent))) - WRITE_ONCE(msk->rcv_wnd_sent, ack_seq); + for (;;) { + rcv_wnd =3D atomic64_cmpxchg(&msk->rcv_wnd_sent, rcv_wnd_old, rcv_wnd_n= ew); + + if (rcv_wnd =3D=3D rcv_wnd_old) + break; + if (before64(rcv_wnd_new, rcv_wnd)) + goto raise_win; + rcv_wnd_old =3D rcv_wnd; + } + return; + } + + if (rcv_wnd_new !=3D rcv_wnd_old) { +raise_win: + win =3D rcv_wnd_old - ack_seq; + tp->rcv_wnd =3D min_t(u64, win, U32_MAX); + new_win =3D tp->rcv_wnd; + + /* Make sure we do not exceed the maximum possible + * scaled window. + */ + if (unlikely(th->syn)) + new_win =3D min(new_win, 65535U) << tp->rx_opt.rcv_wscale; + if (!tp->rx_opt.rcv_wscale && + sock_net(ssk)->ipv4.sysctl_tcp_workaround_signed_windows) + new_win =3D min(new_win, MAX_TCP_WINDOW); + else + new_win =3D min(new_win, (65535U << tp->rx_opt.rcv_wscale)); + + /* RFC1323 scaling applied */ + new_win >>=3D tp->rx_opt.rcv_wscale; + th->window =3D htons(new_win); + } } =20 u16 __mptcp_make_csum(u64 data_seq, u32 subflow_seq, u16 data_len, __wsum = sum) @@ -1554,7 +1592,7 @@ void mptcp_write_options(struct tcphdr *th, __be32 *p= tr, struct tcp_sock *tp, } =20 if (tp) - mptcp_set_rwin(tp); + mptcp_set_rwin(tp, th); } =20 __be32 mptcp_get_reset_option(const struct sk_buff *skb) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 6710960b74f3..7339448ecbee 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -216,7 +216,7 @@ static void mptcp_data_queue_ofo(struct mptcp_sock *msk= , struct sk_buff *skb) =20 seq =3D MPTCP_SKB_CB(skb)->map_seq; end_seq =3D MPTCP_SKB_CB(skb)->end_seq; - max_seq =3D READ_ONCE(msk->rcv_wnd_sent); + max_seq =3D atomic64_read(&msk->rcv_wnd_sent); =20 pr_debug("msk=3D%p seq=3D%llx limit=3D%llx empty=3D%d", msk, seq, max_seq, RB_EMPTY_ROOT(&msk->out_of_order_queue)); @@ -225,7 +225,7 @@ static void mptcp_data_queue_ofo(struct mptcp_sock *msk= , struct sk_buff *skb) mptcp_drop(sk, skb); pr_debug("oow by %lld, rcv_wnd_sent %llu\n", (unsigned long long)end_seq - (unsigned long)max_seq, - (unsigned long long)msk->rcv_wnd_sent); + (unsigned long long)atomic64_read(&msk->rcv_wnd_sent)); MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_NODSSWINDOW); return; } @@ -3004,7 +3004,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk, mptcp_crypto_key_sha(msk->remote_key, NULL, &ack_seq); ack_seq++; WRITE_ONCE(msk->ack_seq, ack_seq); - WRITE_ONCE(msk->rcv_wnd_sent, ack_seq); + atomic64_set(&msk->rcv_wnd_sent, ack_seq); } =20 sock_reset_flag(nsk, SOCK_RCU_FREE); @@ -3297,9 +3297,9 @@ void mptcp_finish_connect(struct sock *ssk) WRITE_ONCE(msk->write_seq, subflow->idsn + 1); WRITE_ONCE(msk->snd_nxt, msk->write_seq); WRITE_ONCE(msk->ack_seq, ack_seq); - WRITE_ONCE(msk->rcv_wnd_sent, ack_seq); WRITE_ONCE(msk->can_ack, 1); WRITE_ONCE(msk->snd_una, msk->write_seq); + atomic64_set(&msk->rcv_wnd_sent, ack_seq); =20 mptcp_pm_new_connection(msk, ssk, 0); =20 diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index f542aeaa5b09..4672901d0dfe 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -257,7 +257,7 @@ struct mptcp_sock { u64 write_seq; u64 snd_nxt; u64 ack_seq; - u64 rcv_wnd_sent; + atomic64_t rcv_wnd_sent; u64 rcv_data_fin_seq; int rmem_fwd_alloc; struct sock *last_snd; --=20 2.36.0 From nobody Thu May 2 11:57:58 2024 Delivered-To: wpasupplicant.patchew@gmail.com Received: by 2002:a05:6a06:869:b0:4b8:7781:bd2f with SMTP id d41csp746329pis; Wed, 4 May 2022 14:54:34 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzI2A+Zypk9JFcAqGX4EVVJeaAlN1JmexDS4izBAKD2JXfdArynma9vHi0lr13/8aLMHJyX X-Received: by 2002:a05:6808:bc2:b0:325:9646:43a0 with SMTP id o2-20020a0568080bc200b00325964643a0mr857913oik.152.1651701274366; Wed, 04 May 2022 14:54:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651701274; cv=none; d=google.com; s=arc-20160816; b=SwLv0KnCJsv/uI9euRmIL50vWoTBs/RZsbk03b0uIvzcxLMsq+9uxYe9/90ny7IA7k 2V0LwonJp1DyCcg/TjhmEAomTOIKAYOo6kllHclhcZVvxNACOSOmMYBYZ8RB6lbeGE3h K8iXn4ZcNxeSGalRU7J8Pmy/vWDXl3Lenl+h0ef4jbzfmuCRh4Raj0P9BCkj0BaTkxT+ ILxZb7QF9RMC/D2/jvJjYYaARccU5Qn9SN7+hOjsCVuIxTUKN4h7sNThAWtP4XJwvEV4 jDVErQu0fgAtqPeIvw3Izjq44Zk9IcZRW/glEjPbnpNzuwbW09CeyT95cKeLlEVw0drY +2MA== 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=eUb1J58Sea2a7MANIc1yVviKeadVJiCebZWj0Osj30k=; b=RZiRSrrKeNaUS5JnRGxO5m8VUuczqahuTSrUeKEStHZVOzDzfQojqo/gdyyoDUS+yM Dm3j/A5LKAVufb1DHI9e6gY+f6oR2SDwJdvx8PHOiWU6MTiOpBCPkn+9fyfNwskVzTAK RIRrquZoEz77/bKeOxlEVqUJZ1FSIQRa4P6EhsX2jpp88TK/0NOREDPr+YeYTcrIYm/Y yeCzvWx/aoHjfWCCKKaY3UZr20Vrpau/Anmq/N8kRNAXxUlKLnxWPpc/tWqKuEQoeVIC p4QAJ+xzZ/75ohjjsnvexPo3KMg/tn/p+FrPCDmCCkOAGciQPFd/RDvdmLoCULiS/cSD zXXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ZRezqdKQ; spf=pass (google.com: domain of mptcp+bounces-5115-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5115-wpasupplicant.patchew=gmail.com@lists.linux.dev"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from da.mirrors.kernel.org (da.mirrors.kernel.org. [139.178.84.19]) by mx.google.com with ESMTPS id k13-20020a056870148d00b000ecc9e5e38fsi7065000oab.278.2022.05.04.14.54.34 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 04 May 2022 14:54:34 -0700 (PDT) Received-SPF: pass (google.com: domain of mptcp+bounces-5115-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) client-ip=139.178.84.19; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=ZRezqdKQ; spf=pass (google.com: domain of mptcp+bounces-5115-wpasupplicant.patchew=gmail.com@lists.linux.dev designates 139.178.84.19 as permitted sender) smtp.mailfrom="mptcp+bounces-5115-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 da.mirrors.kernel.org (Postfix) with ESMTPS id 359D92E09E7 for ; Wed, 4 May 2022 21:54:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 9C1FA33E8; Wed, 4 May 2022 21:54:32 +0000 (UTC) X-Original-To: mptcp@lists.linux.dev Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) (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 684A733F4 for ; Wed, 4 May 2022 21:54:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651701269; x=1683237269; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=rAc1/rLJSR1p6poXeUKLegm8cyFurQp8xHNbpGX67OY=; b=ZRezqdKQoWLzK7YmIwupqF7UNC8z/em8NcuoFUOrxDfAeyX7nPfU8qnF IW66F0dkQR4b4mhHMUGLGDYFTZ4gTnvZ7JB9I982F0YYmJtc9+XFG9n1E s4MzGf15ObUSJGn/u9D47xVBmYiPcMHuLMaTUZlQlL7FS8KwAFe6I4jwx AiHjnBFlEk5Ioba/DkA4e25hxFnFBZzNfgG9iKOgZ3JUqLH4kom+F3u82 WJLzvi8GrjmsOuqzt6PBMOB8cyCx3d36K7XK9PzPzIkQWb0CiUuR38LLm PjN1lxD971dj92GMo6BqPgnQ/gfxkIEY2l8DXBHQNn6SJ+EfuaVv3F8ZN A==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="268064541" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="268064541" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:23 -0700 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="621000387" Received: from mjmartin-desk2.amr.corp.intel.com (HELO mjmartin-desk2.intel.com) ([10.212.251.111]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 14:54:22 -0700 From: Mat Martineau To: netdev@vger.kernel.org Cc: Paolo Abeni , davem@davemloft.net, kuba@kernel.org, edumazet@google.com, matthieu.baerts@tessares.net, mptcp@lists.linux.dev, Mat Martineau Subject: [PATCH net-next 5/5] mptcp: add more offered MIBs counter Date: Wed, 4 May 2022 14:54:08 -0700 Message-Id: <20220504215408.349318-6-mathew.j.martineau@linux.intel.com> X-Mailer: git-send-email 2.36.0 In-Reply-To: <20220504215408.349318-1-mathew.j.martineau@linux.intel.com> References: <20220504215408.349318-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 Track the exceptional handling of MPTCP-level offered window with a few more counters for observability. Signed-off-by: Paolo Abeni Signed-off-by: Mat Martineau --- net/mptcp/mib.c | 3 +++ net/mptcp/mib.h | 5 +++++ net/mptcp/options.c | 6 +++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/net/mptcp/mib.c b/net/mptcp/mib.c index 6a6f8151375a..0dac2863c6e1 100644 --- a/net/mptcp/mib.c +++ b/net/mptcp/mib.c @@ -57,6 +57,9 @@ static const struct snmp_mib mptcp_snmp_list[] =3D { SNMP_MIB_ITEM("SubflowStale", MPTCP_MIB_SUBFLOWSTALE), SNMP_MIB_ITEM("SubflowRecover", MPTCP_MIB_SUBFLOWRECOVER), SNMP_MIB_ITEM("SndWndShared", MPTCP_MIB_SNDWNDSHARED), + SNMP_MIB_ITEM("RcvWndShared", MPTCP_MIB_RCVWNDSHARED), + SNMP_MIB_ITEM("RcvWndConflictUpdate", MPTCP_MIB_RCVWNDCONFLICTUPDATE), + SNMP_MIB_ITEM("RcvWndConflict", MPTCP_MIB_RCVWNDCONFLICT), SNMP_MIB_SENTINEL }; =20 diff --git a/net/mptcp/mib.h b/net/mptcp/mib.h index 2411510bef66..2be3596374f4 100644 --- a/net/mptcp/mib.h +++ b/net/mptcp/mib.h @@ -50,6 +50,11 @@ enum linux_mptcp_mib_field { MPTCP_MIB_SUBFLOWSTALE, /* Subflows entered 'stale' status */ MPTCP_MIB_SUBFLOWRECOVER, /* Subflows returned to active status after bei= ng stale */ MPTCP_MIB_SNDWNDSHARED, /* Subflow snd wnd is overridden by msk's one */ + MPTCP_MIB_RCVWNDSHARED, /* Subflow rcv wnd is overridden by msk's one */ + MPTCP_MIB_RCVWNDCONFLICTUPDATE, /* subflow rcv wnd is overridden by msk's= one due to + * conflict with another subflow while updating msk rcv wnd + */ + MPTCP_MIB_RCVWNDCONFLICT, /* Conflict with while updating msk rcv wnd */ __MPTCP_MIB_MAX }; =20 diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 3e3156cfe813..ac3b7b8a02f6 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -1248,8 +1248,11 @@ static void mptcp_set_rwin(struct tcp_sock *tp, stru= ct tcphdr *th) =20 if (rcv_wnd =3D=3D rcv_wnd_old) break; - if (before64(rcv_wnd_new, rcv_wnd)) + if (before64(rcv_wnd_new, rcv_wnd)) { + MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_RCVWNDCONFLICTUPDATE); goto raise_win; + } + MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_RCVWNDCONFLICT); rcv_wnd_old =3D rcv_wnd; } return; @@ -1275,6 +1278,7 @@ static void mptcp_set_rwin(struct tcp_sock *tp, struc= t tcphdr *th) /* RFC1323 scaling applied */ new_win >>=3D tp->rx_opt.rcv_wscale; th->window =3D htons(new_win); + MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_RCVWNDSHARED); } } =20 --=20 2.36.0