As per last public mtg discussion, md5sig will cause TCP option space
exaustion. Without md5sig we can't exhaust the TCP option space.
This series explcitly disable MPTCP when md5sig is set, and cleanup
later option len checks with the assumption that TCP option space exhaustion
is not expected - add a single WARN_ON() for that.
v2 -> v3
- fix mptcp_established_options() retvalue in patch 3
Paolo Abeni (1):
mptcp: move mp_capable initialization at subflow_init_req() start
mptcp: disable on req sk if MD5SIG is enabled
mptcp: warn once if exceeding tcp opt space for dss/mp_capable
mptcp: remove unneeded check in mptcp_established_options_mp()
As discussed at a previous meeting, I just moved some commits linked to
the manipulation of multiple subflows after the one introducing the
Just to keep a trace and to allow a review, I did this operation with
TopGit. But for this kind of operation, if we don't need a "review",
that's a bit quicker with "git rebase" :)
- 3e77653ecb5f: cut (empty) t/mptcp-Add-path-manager-interface
- 1cb01298549d: cut (empty) t/mptcp-Add-ADD_ADDR-handling
- 25c9462ee09f: cut (empty)
- 2a1ef2512c28: conflict (Makefile) in
- 152ef156123f: tg create t/mptcp-Add-path-manager-interface-v2
- 4569c65e2c58: paste (recreate) t/mptcp-Add-path-manager-interface
- 3cc80d22d759: tg create t/mptcp-Add-ADD_ADDR-handling-v2
- 7928974b360d: paste (recreate) t/mptcp-Add-ADD_ADDR-handling
- 5d24692b5191: tg create
- faf79ec33f1e: paste (recreate)
- d4fd5437d11b: t/mptcp-Add-handling-of-outgoing-MP_JOIN-requests is now
on top of t/mptcp-Add-handling-of-incoming-MP_JOIN-requests-v2
- a4c1cf31bee5: conflict (Makefile) in
- abe60f261c3d: conflict (Makefile) in
- f1e5ff4a68a1: conflict (Makefile) in t/mptcp-Implement-basic-path-manager
- e73eef882a05..eaa68661fa8c: result (only the order in the Makefile)
The only issue is that now the kselftests with IPv6 no longer works when
we launch them in the commit that introduces the kselftests :'(
It is easy to reproduce and I have a calltrace but I will send a
separated email for that.
Matthieu Baerts | R&D Engineer
Tessares SA | Hybrid Access Solutions
1 Avenue Jean Monnet, 1348 Louvain-la-Neuve, Belgium
I have mentioned to the IETF that the upstreaming effort brought forward some feedback,... to the IETF-draft.
Now, the draft is about to become an RFC very soon. Currently it is in the "RFC-Editor" stage, which is the last stage before official publication.
Ideally, we should get feedback to the IETF as soon as possible so that the working-group can make adjustements before publication. Otherwise, it would need to got through an "Errata" process which means to correct the published RFC.
So, let me try to compile a list of things that came up. Please correct or add anything:
Clarifying that the reception of a DATA_ACK means that the server successfully received the MP_CAPABLE (Text "If B has data to send first, then the reliable delivery of the ACK can be inferred by the receipt of this data with an MPTCP DATA_ACK inside the DSS option (Section 3.3).)
Should we vouch to disallow early or late DSS mappings that are covering a TCP-sequence space different than the packet they are being sent on (cfr., our discussion on/around September 25th)
ADD_ADDR-option size - last week we discussed this briefly and I replied by mail that the size-problem is actually for the non-Echo option. In that one there is no way to get around it and all the bits need to be presented. Do you agree on that?
Here are a few improvements in the selftests. Nothing complex, some
details to have the results more readable (I think), IPv6 enabled by
default, the time of the execution is reduced (around 30 seconds now
with the same launched tests), and the script is more robust for the
I hope we can apply the one before the last one: IPV6 is now forced in
the config, we can then always apply the IPv6 network config and remove
a lot of 'if $ipv6' in the code.
For the last one, I guess we should not apply it now because some tests
are really slow in some conditions. More details in the patch and a
separated email has been sent.
All the patches can be squashed in the commit introducing the selftests:
mptcp: add basic kselftest for mptcp
Matthieu Baerts (10):
selftests:mptcp: fix typo
selftests:mptcp: enable v6 by default
selftests:mptcp: align v4 and v6 results
selftests:mptcp: reduce wait time for the listen
selftests:mptcp: reduce time to wait for DAD
selftests:mptcp: only display the NS id
selftests:mptcp: avoid global var clash
selftests:mptcp: do not reset "ret" when skipping
selftests:mptcp: force MPTCP_IPV6 config
[RFC] selftests:mptcp: decrease timeout to 100 sec
tools/testing/selftests/net/mptcp/config | 1 +
.../selftests/net/mptcp/mptcp_connect.sh | 245 +++++++++++-------
tools/testing/selftests/net/mptcp/settings | 2 +-
3 files changed, 147 insertions(+), 101 deletions(-)
This (large, sigh) series fixes poll handling in mptcp.
The first patch extends the test suite with a mmap-based mode to
check large, blocking writes. This uncovered a minor problem with the
earlier v2 wmem accounting patch series -- we would happily take a lot
more data than sndbuf allowed, as we only limited based on what the subflow
could accept. So with a 4k sndbuf we could easily accept 256kb or even more.
This patch doesn't change anything in the test suite behaviour however,
you need to use "-b 4096" and/or "-m mmap" to enable this mode.
Second patch changes test suite to move to nonblocking io, this breaks mptcp
because mptcp_poll can signal EPOLLIN when it shouldn't, so userspace gets
-EAGAIN even though poll told it otherwise.
Patches 3/4/5/6 are an update vs. last wmem accounting series.
Remaining patches fix the nonblocking io behaviour.
mptcp_poll is made to be stand-alone, i.e. it no longer calls
__tcp_poll on the subflow sockets and only considers mptcp_sk state.
After this series the selftest works again and mptcp sk rtx queue is
limited by msk wmem.
The patches can't easily be rebased/merged so I propose that I would
squash this myself and send a pull request when done.
The following changes since commit d1dbb32dc58df543e89f4004c1a0b96fe8acf99b:
subflow: wake parent mptcp socket on subflow state change (2019-11-14 13:03:44 +0000)
are available in the Git repository at:
for you to fetch changes up to fa583a84bcf9550783ac6a229ab584d68764659e:
sendmsg: truncate source buffer if mptcp sndbuf size was set from userspace (2019-11-14 17:56:13 +0100)
Florian Westphal (14):
selftest: add mmap-write support
selftests: make sockets non-blocking for default poll mode
mptcp: add wmem_queued accounting
mptcp: allow partial cleaning of rtx head dfrag
mptcp: add and use mptcp RTX flag
sendmsg: block until mptcp sk is writeable
subflow: sk_data_ready: make wakeup on tcp sock conditional
mptcp: add and use mptcp_subflow_get_retrans
mptcp: sendmsg: transmit on backup if other subflows have been closed
recv: make DATA_READY reflect ssk in-sequence state
sendmsg: clear SEND_SPACE if write caused wmem to grow too large
mptcp_poll: don't consider subflow socket state anymore
sendmsg: don't restart mptcp_sendmsg_frag
sendmsg: truncate source buffer if mptcp sndbuf size was set from userspace
net/mptcp/options.c | 2 +-
net/mptcp/protocol.c | 295 ++++++++++++++++-----
net/mptcp/protocol.h | 4 +-
net/mptcp/subflow.c | 12 +-
tools/testing/selftests/net/mptcp/mptcp_connect.c | 268 ++++++++++++++++++-
tools/testing/selftests/net/mptcp/mptcp_connect.sh | 36 ++-
6 files changed, 544 insertions(+), 73 deletions(-)