Before this series, only the initiator of a connection was able to combine both TCP FastOpen and MPTCP when using TCP_FASTOPEN_CONNECT socket option.
These new patches here add (in theory) the full support of TFO with MPTCP, which means:
- MSG_FASTOPEN sendmsg flag support (patch 1/8) - TFO support for the listener side (patches 2-5/8) - TCP_FASTOPEN socket option (patch 6/8) - TCP_FASTOPEN_KEY socket option (patch 7/8)
To support TFO for the server side, a few preparation patches are needed (patches 2 to 5/8). Some of them were inspired by a previous work from Benjamin Hesmans.
Note that TFO support with MPTCP has been validated with selftests (patch 8/8) but also with Packetdrill tests running with a modified but still very WIP version supporting MPTCP. Both the modified tool and the tests are available online:
https://github.com/multipath-tcp/packetdrill/
Dmytro Shytyi (5): mptcp: add MSG_FASTOPEN sendmsg flag support mptcp: implement delayed seq generation for passive fastopen mptcp: add subflow_v(4,6)_send_synack() mptcp: add TCP_FASTOPEN sock option selftests: mptcp: mptfo Initiator/Listener
Matthieu Baerts (1): mptcp: add support for TCP_FASTOPEN_KEY sockopt
Paolo Abeni (2): mptcp: track accurately the incoming MPC suboption type mptcp: consolidate initial ack seq generation
net/mptcp/Makefile | 2 +- net/mptcp/fastopen.c | 73 ++++++++ net/mptcp/options.c | 25 ++- net/mptcp/protocol.c | 39 +--- net/mptcp/protocol.h | 28 ++- net/mptcp/sockopt.c | 9 +- net/mptcp/subflow.c | 105 ++++++++--- .../selftests/net/mptcp/mptcp_connect.c | 171 +++++++++++++----- .../selftests/net/mptcp/mptcp_connect.sh | 21 +++ 9 files changed, 358 insertions(+), 115 deletions(-) create mode 100644 net/mptcp/fastopen.c
Cc: Benjamin Hesmans benjamin.hesmans@tessares.net base-commit: a6e3d86ece0b42a571a11055ace5c3148cb7ce76