From nobody Mon Aug 24 01:42:02 2026 Received: from mta0.migadu.com (out-167.mta0.migadu.com [91.218.175.167]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE62E41B354 for ; Tue, 18 Aug 2026 09:14:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.167 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044469; cv=none; b=bxptDoVca4CKXuMWaG/E+UMNpW7c70rvWPnfbLp8iMJFKCIeN8MBGPyCTslWtrTurQlTDcx6CEWMAQtfVziuFML2lwy66WGdDOnpDB/HSEiTo6GtNBABBhApByLFlJN2Yy+O1CrS+bmCLut3QwkqhqTz1MJSGWV+WbFCxLeIOGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044469; c=relaxed/simple; bh=gQ/r96649+HxdrOBIVmVKoPWGJNkZ30qmqEWGiQfM+M=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TziLUwxfcZg9f+YU3rXD9HSHWruJ/vhfcBqQHZB62JpWH0fI/qBkvAzzowfabZcWR8UbkxMEvllJaNmTDxLHIeTCZI1rF/rWDKI4rgAJ13Vnbrw8vJzm5hMLZmok9qHIxp86MgewwrngYAJlglc5LGOnhYXKinJ7fdb5FdP1j+8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Ao7UnHh2; arc=none smtp.client-ip=91.218.175.167 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Ao7UnHh2" X-Envelope-To: mptcp@lists.linux.dev DKIM-Signature: a=rsa-sha256; bh=gQ/r96649+HxdrOBIVmVKoPWGJNkZ30qmqEWGiQfM+M=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1787044462; v=1; x=1787649262; b=Ao7UnHh2VpNLTMt9GNpYVzgbakSwB7WgF0lE98uvxQmxoA9NFNmEL5s7T2g7KV1vZCLHxHdh ZDJbII8aUaehcwhmyP3kVANGvovuKZD7bdwmHNfaUDEJN2wyr1AsMMGxXY/DgYjfmqUoz++7s70 1vsUzdUPNrhEMiao/AEzFEAI= X-Envelope-To: mptcp@lists.linux.dev Received: from localhost.localdomain (240a:4281:fe00:1ace:7fcd:c486:d361:c952) by smtp.migadu.com with ESMTPS id bfad146502604034; Tue, 18 Aug 2026 09:14:22 +0000 X-Migadu-Flow: FLOW_OUT From: Chenguang Zhao To: mptcp@lists.linux.dev Cc: chenguang.zhao@linux.dev, Chenguang Zhao Subject: [PATCH mptcp-next RFC v4 1/2] mptcp: add MPFailFallback MIB Date: Tue, 18 Aug 2026 17:14:16 +0800 Message-Id: <20260818091417.2200986-2-chenguang.zhao@linux.dev> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260818091417.2200986-1-chenguang.zhao@linux.dev> References: <20260818091417.2200986-1-chenguang.zhao@linux.dev> 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: Chenguang Zhao Add a counter for TCP fallback after accepting MP_FAIL. Signed-off-by: Chenguang Zhao --- net/mptcp/mib.c | 1 + net/mptcp/mib.h | 1 + 2 files changed, 2 insertions(+) diff --git a/net/mptcp/mib.c b/net/mptcp/mib.c index 608cb568897c..648d4dbca764 100644 --- a/net/mptcp/mib.c +++ b/net/mptcp/mib.c @@ -88,6 +88,7 @@ static const struct snmp_mib mptcp_snmp_list[] =3D { SNMP_MIB_ITEM("MD5SigFallback", MPTCP_MIB_MD5SIGFALLBACK), SNMP_MIB_ITEM("MD5SigReset", MPTCP_MIB_MD5SIGRESET), SNMP_MIB_ITEM("DssFallback", MPTCP_MIB_DSSFALLBACK), + SNMP_MIB_ITEM("MPFailFallback", MPTCP_MIB_MPFAILFALLBACK), SNMP_MIB_ITEM("DssReset", MPTCP_MIB_DSSRESET), SNMP_MIB_ITEM("SimultConnectFallback", MPTCP_MIB_SIMULTCONNFALLBACK), SNMP_MIB_ITEM("FallbackFailed", MPTCP_MIB_FALLBACKFAILED), diff --git a/net/mptcp/mib.h b/net/mptcp/mib.h index 1ebdb55e9534..075e21e20a80 100644 --- a/net/mptcp/mib.h +++ b/net/mptcp/mib.h @@ -91,6 +91,7 @@ enum linux_mptcp_mib_field { MPTCP_MIB_MD5SIGFALLBACK, /* Conflicting TCP option enabled */ MPTCP_MIB_MD5SIGRESET, /* MP_RST: MD5SIG enabled on listener */ MPTCP_MIB_DSSFALLBACK, /* Bad or missing DSS */ + MPTCP_MIB_MPFAILFALLBACK, /* Received MP_FAIL, fallback */ MPTCP_MIB_DSSRESET, /* MP_RST: bad data mapping */ MPTCP_MIB_SIMULTCONNFALLBACK, /* Simultaneous connect */ MPTCP_MIB_FALLBACKFAILED, /* Can't fallback due to msk status */ --=20 2.25.1 From nobody Mon Aug 24 01:42:02 2026 Received: from mta0.migadu.com (out-170.mta0.migadu.com [91.218.175.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04C2B39D3EB for ; Tue, 18 Aug 2026 09:14:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044472; cv=none; b=ETd8J0cofRDTHtkQ2hw0USU+p6VL3PDbFYIW5vKxuS0BW76luh352wu/2ZOPHCht4n1ukUt4V17Ww1iub2sJj2NqHa2ZQ7rcwehAwWtlvRttqfvVHETexCi9Q3GYxe5zyIltZ7f+fsIso76UQX60Qo9vExfzDEI7jcnPq2dTYRw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787044472; c=relaxed/simple; bh=MPmouoFMWLVmbLhDNE3+RuQC16P2tCoqBytFnr2sTxQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=E6lKzwplI/il3EGLmvtHu+rCXHegIq4Cd2KlA6AiUE+2dT3B4i7OVvhbYI4lPVoWkjJjuT3Yrp/z6a+EWZgnEpBmu7LXwPJQuf+OHzz0EE0FssUrsZ+mMglhW0LuO2B8C4CTxQc6lfURWQX/g8XWKJUsAFNagG0vip1/hXd1ffo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=N8Slf/0x; arc=none smtp.client-ip=91.218.175.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="N8Slf/0x" X-Envelope-To: mptcp@lists.linux.dev DKIM-Signature: a=rsa-sha256; bh=MPmouoFMWLVmbLhDNE3+RuQC16P2tCoqBytFnr2sTxQ=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1787044468; v=1; x=1787649268; b=N8Slf/0xG2EpQW9xO48YMhsxpJf/FTQGqiARUnZ8KFAQ8wM2Znv3sP+AAA3u6YooRRYeLUtJ btjXoiP6R3ouBMWSV9elR0UbgUudw4jMx7CW8BASbVeTWCgonM5gKpi6Qun5NGLJF5CeoIRzIEW oUeY58vDMa/wmge94H4u8qqo= X-Envelope-To: mptcp@lists.linux.dev Received: from localhost.localdomain (240a:4281:fe00:1ace:7fcd:c486:d361:c952) by smtp.migadu.com with ESMTPS id 3a08fa730a291e0e; Tue, 18 Aug 2026 09:14:28 +0000 X-Migadu-Flow: FLOW_OUT From: Chenguang Zhao To: mptcp@lists.linux.dev Cc: chenguang.zhao@linux.dev, Chenguang Zhao Subject: [PATCH mptcp-next RFC v4 2/2] mptcp: send MP_FAIL and infinite mapping on the same ACK Date: Tue, 18 Aug 2026 17:14:17 +0800 Message-Id: <20260818091417.2200986-3-chenguang.zhao@linux.dev> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20260818091417.2200986-1-chenguang.zhao@linux.dev> References: <20260818091417.2200986-1-chenguang.zhao@linux.dev> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Chenguang Zhao On a single subflow, accepting MP_FAIL must leave MPTCP mode at once (RFC8684 =C2=A73.7). Emit the infinite mapping on the MP_FAIL reply ACK, then call mptcp_try_fallback() immediately after. Fixes: 1e39e5a32ad7 ("mptcp: infinite mapping sending") Signed-off-by: Chenguang Zhao --- net/mptcp/options.c | 33 ++++++++++++++++++++++++++++++++- net/mptcp/pm.c | 5 +++++ net/mptcp/protocol.c | 8 +------- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/net/mptcp/options.c b/net/mptcp/options.c index 97da22668dbe..ecf77e77d2de 100644 --- a/net/mptcp/options.c +++ b/net/mptcp/options.c @@ -638,7 +638,29 @@ static bool mptcp_established_options_dss(struct sock = *sk, struct sk_buff *skb, opts->csum_reqd =3D READ_ONCE(msk->csum_enabled); mpext =3D skb ? mptcp_get_ext(skb) : NULL; =20 - if (!skb || (mpext && mpext->use_map) || snd_data_fin_enable) { + if (unlikely(subflow->send_infinite_map)) { + unsigned int map_size =3D TCPOLEN_MPTCP_DSS_BASE + TCPOLEN_MPTCP_DSS_MAP= 64; + + if (opts->csum_reqd) + map_size +=3D TCPOLEN_MPTCP_DSS_CHECKSUM; + + if (mpext) { + opts->ext_copy =3D *mpext; + opts->ext_copy.infinite_map =3D 1; + opts->ext_copy.data_len =3D 0; + } else { + opts->ext_copy.use_map =3D 1; + opts->ext_copy.dsn64 =3D 1; + opts->ext_copy.infinite_map =3D 1; + opts->ext_copy.data_len =3D 0; + opts->ext_copy.data_seq =3D READ_ONCE(msk->snd_nxt); + opts->ext_copy.subflow_seq =3D subflow->rel_write_seq; + } + + dss_size =3D map_size; + opts->suboptions =3D OPTION_MPTCP_DSS; + ret =3D true; + } else if (!skb || (mpext && mpext->use_map) || snd_data_fin_enable) { unsigned int map_size =3D TCPOLEN_MPTCP_DSS_BASE + TCPOLEN_MPTCP_DSS_MAP= 64; =20 if (mpext) { @@ -1566,6 +1588,15 @@ void mptcp_write_options(struct tcphdr *th, __be32 *= ptr, struct tcp_sock *tp, TCPOPT_NOP << 8 | TCPOPT_NOP, ptr); } ptr +=3D 1; + + if (unlikely(mpext->infinite_map)) { + subflow =3D mptcp_subflow_ctx(ssk); + if (subflow->send_infinite_map) { + subflow->send_infinite_map =3D 0; + MPTCP_INC_STATS(sock_net(ssk), + MPTCP_MIB_INFINITEMAPTX); + } + } } =20 /* We might need to add MP_FAIL options in rare cases */ diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c index ba7c6f80a183..69701ac7e436 100644 --- a/net/mptcp/pm.c +++ b/net/mptcp/pm.c @@ -895,6 +895,11 @@ void mptcp_pm_mp_fail_received(struct sock *sk, u64 fa= il_seq) pr_debug("MP_FAIL response received\n"); WRITE_ONCE(subflow->fail_tout, 0); } + + if (!mptcp_try_fallback(sk, MPTCP_MIB_MPFAILFALLBACK)) { + MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_FALLBACKFAILED); + mptcp_subflow_reset(sk); + } } =20 static int mptcp_add_addr_len(int family, bool echo, bool port) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index f879b1061f2d..abe45a31ca5f 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -1417,13 +1417,7 @@ static void mptcp_update_infinite_map(struct mptcp_s= ock *msk, =20 mpext->infinite_map =3D 1; mpext->data_len =3D 0; - - if (!mptcp_try_fallback(ssk, MPTCP_MIB_INFINITEMAPTX)) { - MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_FALLBACKFAILED); - mptcp_subflow_reset(ssk); - return; - } - + MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_INFINITEMAPTX); mptcp_subflow_ctx(ssk)->send_infinite_map =3D 0; } =20 --=20 2.25.1