From: Chenguang Zhao <zhaochenguang@kylinos.cn>
When a valid MP_FAIL is received and infinite fallback is still allowed
(single contiguous subflow), RFC8684 section 3.7 requires leaving MPTCP
mode. Today the stack only clears allow_subflows and defers the real
fallback to the later infinite-map transmit path. If no data is sent in
between, the peer can still complete the 4th ACK as MPTCP and keep using
MPTCP options.
This series adds a dedicated MPFailFallback MIB, rejects joins after
fallback via mptcp_is_fully_established(), resets when the OoO queue
blocks infinite mapping, and falls back immediately after the MP_FAIL
response through mptcp_try_fallback().
Patch 1 adds the MPFailFallback MIB.
Patch 2 rejects joins once fallback has completed.
Patch 3 resets on MP_FAIL when the OoO queue is non-empty.
Patch 4 falls back to TCP after sending the MP_FAIL response.
v3:
- Address Matthieu Baerts' review
- Introduce the MIB first (Fixes: c65c2e3bae69) and reuse
mptcp_try_fallback() in the functional fix
- Split mptcp_is_fully_established() and OoO handling into dedicated
commits for easier backport
- Check FALLBACK_DONE via test_bit()
- Drop allow_subflows from mptcp_is_fully_established() (and the
READ/WRITE_ONCE follow-up)
- On OoO failure, reset without sending MP_FAIL
- This patch series is based on the export branch, The git repository
is: git://git.kernel.org/pub/scm/linux/kernel/git/mptcp/linux.git
Chenguang Zhao (4):
mptcp: add MPFailFallback MIB
mptcp: reject joins after fallback in mptcp_is_fully_established
mptcp: reset subflow on MP_FAIL when OoO queue is non-empty
mptcp: fallback to TCP on MP_FAIL with a single subflow
net/mptcp/mib.c | 1 +
net/mptcp/mib.h | 1 +
net/mptcp/pm.c | 17 +++++++++++++++--
net/mptcp/protocol.c | 4 +++-
net/mptcp/protocol.h | 5 ++++-
5 files changed, 24 insertions(+), 4 deletions(-)
---
v2:
https://lore.kernel.org/all/20260715061830.1057851-1-chenguang.zhao@linux.dev/
v1:
https://lore.kernel.org/all/20260713064134.914507-1-chenguang.zhao@linux.dev/
--
2.25.1