-
-
Notifications
You must be signed in to change notification settings - Fork 43
Home
Matthieu Baerts edited this page Nov 21, 2024
·
88 revisions
The goal of this community is to develop, maintain, and improve the Multipath TCP (MPTCP) protocol (v1 / RFC 8684) in the upstream Linux kernel.
Programs that were built to use TCP will still use the TCP connections when running on an MPTCP-enabled kernel unless the programmer/user/admin opts-in to using Multipath TCP.
Please visit our website for more details about MPTCP, how to use and configure it, and what app developers can do to support it natively.
Please visit our Setup page.
Mostly linked to the kernel development
In English:
- Multipath TCP on RHEL 8: From one to many subflows (blog)
- FOSDEM 2023 (February 2023) (video)
- Linux Plumbers Conference (LPC) Networking Track (September 2022) (video)
- Netdev 0x14 (August 2020) (video)
- Multipath TCP on Red Hat Enterprise Linux 8.3, From 0 to 1 subflows (August 2020) (blog)
- Linux Plumbers Conference (LPC) Networking Track (September 2019) (video)
- Netdev 0x12 (July 2018) (video)
In Chinese (中文):
-
v5.6: Create MPTCPv1 sockets with a single subflow
- Prerequisites: modifications in TCP and Socket API
- Single subflow & RFC8684 support
- Selftests for single subflow
-
v5.7: Create multiple subflows but use them one at a time and get stats
- Multiple subflows: one subflow is used at a time
- Path management: global, controlled via Netlink
- MIB counters
- Subflow context exposed via inet_diag
- Selftests for multiple-subflow operation
- Selftests for the Netlink path manager interface
- Bug-fix
-
v5.8: Stabilisation and support more MPTCPv1 spec
- Shared receive window across multiple subflows
- A few optimisations
- Bug-fix
-
v5.9: Stabilisation and support more MPTCPv1 spec
- Token refactoring
- KUnit tests
- Receive buffer auto-tuning
- diag features (list MPTCP connections using
ss
) - Full DATA FIN support
- MPTCP SYN Cookie support
- A few optimisations
- Bug-fix
-
v5.10 (LTS): Send over multiple subflows at the same time and support more MPTCPv1 spec
- Multiple xmit: possibility to send data over multiple subflows
- ADD_ADDR support with echo-bit
- REMOVE_ADDR support
- A few optimisations
- Bug-fix
-
v5.11: Performances and support more MPTCPv1 spec
- Refines receive buffer autotuning
- Improves GRO and RX coalescing with MPTCP skbs
- Improve multiple xmit streams support
- MP_ADD_ADDR v6 support
- Sending MP_ADD_ADDR port support
- Incoming MP_FAST_CLOSE support
- A few optimisations
- Bug-fix
-
v5.12: Good performances, PM events and support more MPTCPv1 spec
- Accepting MP_JOIN to another port (after having sent an ADD_ADDR with this port) support
- MP_PRIO support
- Per connection netlink PM events
- "Delegated actions" framework to improve communications between MPTCP socket and subflows
- Support IPv4-mapped in IPv6 for additional subflows
- Performances improvement
- A few optimisations
- Bug-fix
-
v5.13: Supporting more options and items from the protocol
- Outgoing MP_FAST_CLOSE support
- MP_TCPRST support
- RM_ADDR: addresses' list support
- Switch to next available address when a subflow creation fails
- Support removing subflows with ID 0
- New MIB counters: active MPC, token creation fallback
- socket options:
- only admit explicitly supported ones
- support new ones: SO_KEEPALIVE, SO_PRIORITY, SO_RCV/SNDBUFF, SO_BINDTODEVICE/IFINDEX, SO_LINGER, SO_MARK, SO_INCOMING_CPU, SO_DEBUG, TCP_CONGESTION and TCP_INFO (
TCP_KEEPIDLE
,TCP_KEEPINTVL
,TCP_KEEPCNT
have been added in backports)
- debug: new tracepoints support
- Retransmit DATA_FIN support
- MSG_TRUNC and MSG_PEEK support
- A few optimisations/cleanup
- Bug-fix
-
v5.14: Supporting more options and items from the protocol
- Checksum support
- MP_CAPABLE C flag support
- Receive path cmsg support (e.g. timestamp)
- MIB counters for invalid mapping
- A few optimisations/cleanup (that might affect perfs)
- Bug-fix
-
v5.15 (LTS): Supporting more options and usability improvements
- MP_FAIL support (without TCP fallback / infinite mapping)
- Packet scheduler improvements (especially with backup subflows)
- Full mesh path management support
- Refactoring of ADD_ADDR and ECHO handling
- Memory and execution optimisation of option header transmit and receive
- Bug-fix and small optimisations
-
v5.16: Supporting more socket options
- Support for
MPTCP_INFO
socket option (similar toTCP_INFO
) on theSOL_MPTCP
(284
) level +MPTCP_TCPINFO
andMPTCP_SUBFLOW_ADDRS
to get info per subflow - Default max additional subflows for the in-kernel PM is now set to 2
- Batch SNMP operations
- Bug-fix and optimisations
- Support for
-
v5.17: Even more socket options
- Support for new
ioctls
:SIOCINQ
,OUTQ
, andOUTQNSD
- Support for new socket options:
IP_TOS
,IP_FREEBIND
,IPV6_FREEBIND
,IP_TRANSPARENT
,IPV6_TRANSPARENT
,TCP_CORK
andTCP_NODELAY
- Support for
cmsgs
:TCP_INQ
- PM: Support changing the "backup" bit via Netlink (
ip mptcp
) - PM: Do not block subflows creation on errors
- Packet scheduler improvement with better HoL-blocking estimation improving the stability
- Support sending
MP_FASTCLOSE
option (quick shutdown of the full MPTCP connection, similar to TCP RST in regular TCP) - Bug-fix and optimisations
- Support for new
-
v5.18: Stabilisation
- Support dynamic change of the Fullmesh PM flag
- Support for new socket options:
SNDTIMEO
- Code cleanup:
- Clarify when MPTCP options can be used together
- Constify a bunch of helpers
- Make some OPS structure Read-Only
- Add MIBs for
MP_FASTCLOSE
andMP_RST
- Add tracepoint in
mptcp_sendmsg_frag()
- Restricts RM_ADDR generation to previously explicitly announced ones
- Send ADD_ADDR echo before creating subflows
-
v5.19: Userspace control and fallbacks
- Support for MPTCP path manager in user space
- Add MPTCP support for fallback to regular TCP for connections that have never connected additional subflows or transmitted out-of-sequence data (partial support for RFC8684 fallback)
- Fallback or reset MPTCP connections in case of checksum issues (
MP_FAIL
andinfinite mapping
support) - Avoid races in MPTCP-level window tracking, stabilize and improve throughput
- Make 'ss -Ml' show MPTCP listen sockets
- BPF: Add BPF access to
mptcp_sock
structures and their metadata
-
v6.0: Initial subflow as Backup and memory optimisations
- Support changes to initial subflow priority (set the initial subflow as
backup
) - Refactor the forward memory allocation to better cope with memory pressure with many open sockets, moving from a per socket cache to a per-CPU one
- Support changes to initial subflow priority (set the initial subflow as
-
v6.1 (LTS): User namespace and TFO sender support, send MP_FASTCLOSE like TCP RST
- Allow privileged Netlink operations from user namespaces
-
TCP_FASTOPEN_CONNECT
support for a client to initiate MPTCP + TFO connections (data in the SYN). Note that the server support is still being developed -
MP_FASTCLOSE
are being sent in case of errors (equivalent to TCP RESET) and in more edge scenarios to mimic TCP behaviour
-
v6.2: TFO receiver support
- TFO receiver support
-
MSG_FASTOPEN
'ssendmsg()
flag support - Support of more socket options:
TCP_FASTOPEN
,TCP_FASTOPEN_KEY
,TCP_FASTOPEN_NO_COOKIE
- Cleaner messages in case of error when creating endpoint
- Add Path Manager "listener" Netlink events for the userspace path manager
-
v6.3: ProcFS info and mix v4/v6 subflows
- Add statistics for MPTCP sockets in use in
/proc/net/protocols
- Path-Manager: in-kernel: allow using mixed IPv4 and IPv6 addresses
- Some clean-up and small improvements (MPTCP and selftests)
- Add statistics for MPTCP sockets in use in
-
v6.4: Improvement around the reception of connection requests
- Refactoring around the reception of MPC/MPJ connection requests
-
getsockopt(SOL_MPTCP, MPTCP_INFO)
and Netlink (ss -M
): do not fill info not used by the PM in used - Move first subflow allocation at MPC access time
-
v6.5: More exposed info
- LSM/SELinux: correctly inherit labels on MPTCP subflows
- New ADD_ADDR (+ echo) transmission MIB counters
- New aggregated data counters exposed via Netlink and
getsockopt(SOL_MPTCP, MPTCP_INFO)
- New
getsockopt(SOL_MPTCP, MPTCP_FULL_INFO)
aggregating MPTCP and subflows info (with ID) - Some clean-up and small improvements (MPTCP and selftests + support of old kernels)
-
v6.6: Forcing using MPTCP with BPF
- Allow forcing using MPTCP with BPF (example)
- Refactoring to get rid of
msk->subflow
- Preparation for future extension of the packet scheduler
- Some improvements in the selftests: TAP for subtests, uniformity, colours
-
v6.7: MPTCP YNL and packet scheduler improvements
- Convert Netlink code to use YAML spec for better API validation and documentation, see YNL
- New sysctl for make after break timeout:
net.mptcp.close_timeout
- Support
SO_RCVLOWAT
socket option (instead of ignoring it) - Ignore
net.ipv4.tcp_notsent_lowat
at subflow level not to foul the packet scheduler - Reduce overhead on transmit part
- Refactor sndbuf auto-tuning to improve the situation when being limited by the sent buffer
- Some clean-up in MPTCP code and selftests
-
v6.8: New counters
- New
MPTCP_INFO
and Netlink (ss -M
) counter:subflows_total
, taking into account the initial subflow (compared tosubflows
which only looks at additional subflows) - New Current Established (
CurrEstab
) MPTCP MIB counter, showing the current number of established MPTCP connections, visible withnstat
for example. - Support
IP_LOCAL_PORT_RANGE
andIP_BIND_ADDRESS_NO_PORT
socket options. - Some code refactoring and sharing resources in selftests scripts.
- New
-
v6.9:
TCP_NOTSENT_LOWAT
, new Netlink commands, selftests- Support
TCP_NOTSENT_LOWAT
socket option. - Userspace Path-Manager: support new
dump addrs
andget addr
Netlink commands - Some improvements in the selftests: colours, less duplicated code, shellcheck compliant, uniformity
- Debug: check the protocol in
(mp)tcp_sk()
withDEBUG_NET
, annotate lockless accesses, clean-ups - Improved CI support: BPF, KVM support, ShellCheck, notifications.
- Support
-
v6.10: New info, sockopt, tracing
- "Last time" info in
getsockopt(SOL_MPTCP, MPTCP_INFO)
and Netlink Diag (ss -M
) -
getsockopt(SOL_TCP, TCP_IS_MPTCP)
to check for MPTCP fallback to TCP - Optimisation if
getsockopt(SOL_MPTCP, MPTCP_INFO)
is used with no buffer (optlen == 0
) -
net.mptcp.available_schedulers
new sysctl knob - Possibility to trace reset reasons
- Some improvements in the selftests: less duplicated code, options to use IPRoute2 for all tests
- Improved CI support: Virtme NG, Tracking regressions
- Dev tools: CLang and VSCode support in MPTCP Upstream Virtme Docker.
- "Last time" info in
-
v6.11: Fixes
- Mainly some fixes that have been / are being backported to stable versions.
- Some small improvements to reduce duplicated code
-
v6.12: Cache Fallback
- Fallback to TCP in case of MPTCP blackhole
- Cache the info about the blackholes, to directly fallback to TCP for 1h+, see
blackhole_timeout
sysctl - New MIB counters for sent
MP_JOIN
- CI: Code coverage
-
v6.13: Notif on non-stale subflows, more lockless operations
- Send ACK notifications (addresses and priority) on non-stale subflows
- In case of missing DSS, tell the other peer there was a "middlebox interference" in the RST
- Switch to a lockless way to list packet schedulers and to dump MPTCP endpoints
- BPF selftests (1 2) to show how to set socket options per subflow
- v6.14: TODO
- Mailing list: mptcp@lists.linux.dev (plain text only):
- Anyone may view the archives
- Subscribe by sending an empty email in plain text to mptcp+subscribe@lists.linux.dev
- Repositories: https://github.com/multipath-tcp/mptcp_net-next.git, see the different Git Branches
- Issues are logged on Github
- IRC:
#mptcp
on irc.libera.chat. For more details about sub-channels: IRC - Patchwork
- Status (with the Roadmap)
- Testing
- Meetings
- CI
- Patch prefixes
Please visit our website for more details about MPTCP, a FAQ, and more.