Multipath TCP (MPTCP), standardized in RFC8684 [1], is a TCP extension that enables a TCP connection to use different paths.
Multipath TCP has been used for several use cases. On smartphones, MPTCP enables seamless handovers between cellular and Wi-Fi networks while preserving established connections. This use-case is what pushed Apple to use MPTCP since 2013 in multiple applications [2]. On dual-stack hosts, Multipath TCP enables the TCP connection to automatically use the best performing path, either IPv4 or IPv6. If one path fails, MPTCP automatically uses the other path. To benefit from MPTCP, both the client and the server have to support it. Multipath TCP is a backward-compatible TCP extension that is enabled by default on recent Linux distributions (Debian, Ubuntu, Redhat, ...). Multipath TCP is included in the Linux kernel since version 5.6 [3]. To use it on Linux, an application must explicitly enable it when creating the socket. No need to change anything else in the application. These patches are a continuation of the work [4] realized by Dorian Craps and Matthieu Baerts. Changelog: - Patch 1: - Duplicate the mptcp(4|6) protocol structures from their tcp equivalent, instead of using a function that creates them by copying tcp structures - Add support for MPTCP on the backend side (between the proxy and the servers) - Patch 2: - Fix a warning about TCP_MAXSEG not being supported while MPTCP is used by declaring new constants sock_inet(6)_mptcp_maxseg_default. Those constants represent the MSS supported by MPTCP (== -1 for the moment, as long as TCP_MAXSEG is not supported). For the moment, MPTCP doesn't support TCP_MAXSEG socket option, mainly because it has apparently never been requested before, apparently. It should not be difficult to implement it, but is it an important option for HAProxy? Link: https://www.rfc-editor.org/rfc/rfc8684.html [1] Link: https://www.tessares.net/apples-mptcp-story-so-far/ [2] Link: https://www.mptcp.dev [3] Link: https://www.mail-archive.com/haproxy@formilux.org/msg44871.html [4] Aperence (2): FEATURE: add MPTCP per address support BUG/MINOR: fix warning when setting MSS with MPTCP doc/configuration.txt | 21 +++++++ examples/mptcp-backend.py | 22 +++++++ examples/mptcp.cfg | 23 ++++++++ include/haproxy/compat.h | 5 ++ include/haproxy/protocol.h | 4 +- include/haproxy/sock_inet.h | 3 + src/backend.c | 11 +++- src/proto_tcp.c | 113 ++++++++++++++++++++++++++++++++++-- src/protocol.c | 4 +- src/sock.c | 4 +- src/sock_inet.c | 28 +++++++++ src/tools.c | 24 +++++++- 12 files changed, 250 insertions(+), 12 deletions(-) create mode 100644 examples/mptcp-backend.py create mode 100644 examples/mptcp.cfg -- 2.46.0