Skip to content

Commit 86b7709

Browse files
committed
post: new article about recent changes
Covering different topics: Bug-fixes, improvements, apps support, conferences, what's next. Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
1 parent 227eddb commit 86b7709

File tree

1 file changed

+217
-0
lines changed

1 file changed

+217
-0
lines changed

_posts/2024-10-28-summer-update.md

+217
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
---
2+
layout: post
3+
title: "Summer update"
4+
---
5+
6+
A bit more than 3 months after the last update, I think it is really time to
7+
share some updates about MPTCP! I have been quiet recently, not because I was on
8+
holiday -- even if I should probably take some :) -- but because there were
9+
always higher priority tasks than writing a new blog post which is something I'm
10+
slow at! Bug-fixes, improvements, apps support, conferences, what's next: read
11+
on to find out more about what happened recently!
12+
13+
<!--more-->
14+
15+
## More bug fixes
16+
17+
In my [previous post]({% post_url 2024-07-21-maintainers-responsibilities %}), I
18+
mentioned I was working on fixing issues around the path-manager. A few more
19+
fixes have been added since then, and a lot of backports have been done:
20+
hundreds of commits have been added to the different stable kernels, up to v5.10
21+
when needed. If you see odd behaviour with the MPTCP path-manager, please check
22+
with an up-to-date kernel version first, maybe your issue has already been
23+
fixed!
24+
25+
One important [issue](https://github.com/multipath-tcp/mptcp_net-next/issues/518)
26+
has also been fixed recently: some (weird) middleboxes were causing MPTCP
27+
connections to be reset, because MPTCP options were dropped later on during the
28+
connection, but not at the beginning. When possible, such connections are now
29+
forced to fall back to TCP. Middleboxes are still able to surprise us! :)
30+
31+
## New improvements
32+
33+
Some improvements have also been added during the last few months, e.g.
34+
35+
- If MPTCP is explicitly blocked by a firewall, after 3 unsuccessful connection
36+
requests, the kernel will fall back to TCP, and future connections will
37+
directly use TCP for a configurable period of time -- 1 hour by default, then
38+
it is exponential.
39+
40+
- `SO_KEEPALIVE` socket option -- to send keep-alive packets in case of
41+
connection inactivity -- has been supported by MPTCP for a few years now. But
42+
it was not possible to fine tune this behaviour using `TCP_KEEP*` socket
43+
options. This has been fixed, and exceptionally backported to stable versions,
44+
because it was not normal to support the main option, but not these other
45+
ones, this was blocking some deployments, and the code to support these socket
46+
options is simple and not impacting the rest.
47+
48+
- More `MIB` counters -- visible with `nstat` -- have been added, some of them
49+
have also been backported: this will help kernel developers and users to
50+
understand some behaviour like why an expected additional subflow has not been
51+
established, without having to instrument the kernel.
52+
53+
- The documentation about MPTCP endpoints configuration has been improved to
54+
avoid confusion. These modifications are visible in the IPRoute manual, and on
55+
our [website](https://www.mptcp.dev/pm.html).
56+
57+
- The CI now generates code coverage [stats](https://ci-results.mptcp.dev/lcov/)
58+
(also published on
59+
[Coveralls](https://coveralls.io/github/multipath-tcp/mptcp_net-next)). Code
60+
coverage is a valuable piece of information to know how much we can trust a
61+
test suite, and easily find out what needs to be improved. A majority of the
62+
code is covered (~90%), which is great! There are some areas that can be
63+
improved -- e.g.
64+
[diag](https://github.com/multipath-tcp/mptcp_net-next/issues/524) and [socket
65+
options](https://github.com/multipath-tcp/mptcp_net-next/issues/525) -- but
66+
not critical ones. We can also notice many error branches are not covered by
67+
the MPTCP test suite: that's because that would be a lot of work to cover most
68+
of them while most of the time the action that has to be taken in this case is
69+
very simple. That's why we rely on Syzkaller, a fuzzing tool, to cover most of
70+
these error branches.
71+
72+
- Still about the CI, the BPF MPTCP selftests are now also executed with a debug
73+
kernel config. More analytic tools will cover this area that is growing.
74+
75+
## More apps natively supporting MPTCP
76+
77+
Thanks to the help from [Anthony Doeraene](https://github.com/Aperence/),
78+
even more [apps](https://www.mptcp.dev/apps.html) are now natively supporting
79+
MPTCP:
80+
- [Apache HTTP](https://httpd.apache.org/) ([v2.5.1](https://svn.apache.org/viewvc?view=revision&revision=1920586))
81+
- [HAProxy](https://www.haproxy.org/) ([v3.1.0](https://git.haproxy.org/?p=haproxy.git;a=commit;h=20efb856e))
82+
- [VLC in iOS](https://www.videolan.org/vlc/) ([v4.0](https://github.com/videolan/vlc-ios/commit/210c88b3e4))
83+
- [Firefox in iOS](https://www.mozilla.org/en-US/firefox/browsers/mobile/ios/) ([v132](https://github.com/mozilla-mobile/firefox-ios/pull/21480))
84+
85+
[NGinx](https://github.com/nginx/nginx/pull/130) and
86+
[FreeNGinx](https://freenginx.org/pipermail/nginx-devel/2024-August/000465.html)
87+
might support it soon too!
88+
89+
An important change as well is on the Go Language: the next version will have
90+
MPTCP enabled by default on the server side.
91+
([src](https://go-review.googlesource.com/c/go/+/607715))
92+
93+
Additionally, Anthony added more languages in the [MPTCP
94+
Hello](https://github.com/mptcp-apps/mptcp-hello) repository: Elixir, Erlang,
95+
Swift (macOS), and Objective-C (macOS). Plus a dedicated page about how to use
96+
MPTCP on [macOS](https://www.mptcp.dev/macOS.html).
97+
98+
Other apps and tools also gained MPTCP support recently:
99+
100+
- [cURL](https://curl.se) ([v8.9.0](https://github.com/curl/curl/pull/13278))
101+
- [dae](https://github.com/daeuniverse/dae) ([v0.8.0](https://github.com/daeuniverse/dae/pull/601))
102+
- [lighttpd](https://www.lighttpd.net/) ([v1.4.76](https://github.com/lighttpd/lighttpd1.4/pull/132))
103+
- [SystemD](https://systemd.io) ([v257](https://github.com/systemd/systemd/pull/32958))
104+
- [v2ray-core](https://github.com/v2fly/v2ray-core) ([v5.17.0](https://github.com/v2fly/v2ray-core/pull/3109))
105+
- [ptcpdump](https://github.com/mozillazg/ptcpdump) ([v0.24.0](https://github.com/mozillazg/ptcpdump/pull/152))
106+
107+
OpenWrt v24 will also have MPTCP support available by default!
108+
([src](https://github.com/openwrt/openwrt/pull/16786))
109+
110+
## Conferences
111+
112+
### Netconf 2024
113+
114+
[Netconf](https://netdev.bots.linux.dev/netconf/) is *a Linux community
115+
conference, by-invitation-only. The agenda has a clear focus on kernel level
116+
networking. Attendees are the main maintainers and developers of the Linux
117+
networking subsystem*.
118+
119+
This year, I was grateful to have been invited to the
120+
[2024](https://netdev.bots.linux.dev/netconf/2024/index.html) edition in Vienna,
121+
and I learned a lot. Even if MPTCP has been invoked, I was mostly there to
122+
discuss [CI aspects](https://netdev.bots.linux.dev/netconf/2024/mattbe.pdf). For
123+
a while now, there is an MPTCP CI validating patches that are shared on the
124+
mailing list. It took quite sometime to put that in place, and it regularly
125+
needs tweaking. There is still some work to do, like having a proper performance
126+
lab in place which is what I'm currently looking at that. On Netdev side, that's
127+
only for less than one year the CI is validating functional tests. A good time
128+
to discuss it, how useful it is, what can be improved, and what is important to
129+
know about it.
130+
131+
We had very useful
132+
[discussions](https://netdev.bots.linux.dev/netconf/2024/notes.html) there.
133+
Amongst the topics that have been discussed around the CI, we have:
134+
- How important it is to know the code coverage.
135+
- A container image would be useful to easily reproduce issues locally.
136+
- A debug kernel config causes a very slow environment, and results in tests to
137+
be more unstable, but that can maybe be ignored: what is important here is to
138+
look at new kernel warnings found by the debug tools.
139+
- Other subsystems can re-use code from the MPTCP CI if they want a similar CI
140+
setup on their side. Still, it would be good to have an "official" service
141+
applying patches in a Git repository to ease the bootstrap of new CIs.
142+
- Stable kernel are often being validated using the last version of the kernel
143+
[selftests](https://docs.kernel.org/dev-tools/kselftest.html). In theory, that
144+
makes sense, and looks good to have the biggest coverage and check for
145+
regressions, but most network related selftests expect to be executed on the
146+
kernel version it is linked to, and then fail if a feature is missing. That's
147+
an issue because older stable kernels have a lot of failed tests due to that,
148+
and probably nobody is monitoring the different results. Maybe there should be
149+
an exception for the network tests, because many tests are looking at the
150+
internals like how packets are created, not only at what is exposed to the
151+
userspace via the different simple APIs, like the socket one that hides all
152+
the complexity to the userspace.
153+
- Managing the CI takes time, and resources, plus it might be good to have some
154+
hardware tests done in the same conditions, from a neutral lab. It might be
155+
good to create a dedicated entity to share costs.
156+
157+
### LPC 2024
158+
159+
The [Linux Plumbers Conference](https://lpc.events/) (or LPC) is *the premier
160+
event for developers working at all levels of the plumbing layer and beyond*.
161+
162+
The [2024 edition](https://lpc.events/event/18/page/224-lpc-2024-overview) was
163+
also in Vienna, just after Netconf.
164+
165+
There as well, I [talked](https://lpc.events/event/18/contributions/1961/) about
166+
the CI. The Netdev CI is particular: it runs many different tests, while there
167+
are many patches regularly posted on the list. That's why patches are validated
168+
by batches. Due to the complexity -- but also to avoid increasing the traffic on
169+
the Netdev mailing with people sending patches just to fix unworthy details
170+
reported by the CI, instead of checking that upfront -- what is being done by
171+
the CI is supposed to be checked by experienced reviewers and maintainers. It is
172+
then important to agree on what should be advertised, and what to expect from
173+
kernel developers, reviewers and maintainers.
174+
175+
(Note that my [presentation](https://lpc.events/event/18/contributions/1961/)
176+
has been [recorded](https://www.youtube.com/watch?v=ApDDRrrXN9w), but there were
177+
some issues with the microphone at the beginning, apparently.)
178+
179+
## What's next?
180+
181+
Good news, my work will continue to be supported by the [NGI0
182+
Core](https://nlnet.nl/core/) fund -- managed by the [NLnet
183+
Foundation](https://nlnet.nl) (a big thank you :)) -- for another
184+
[round](https://nlnet.nl/project/MPTCP-deployability-II/). NGI0 Core is made
185+
possible with [financial support](https://nlnet.nl/core/acknowledgement.pdf)
186+
from the [European Commission](https://ec.europa.eu/)'s [Next Generation
187+
Internet](https://ngi.eu/) programme, under the aegis of [DG Communications
188+
Networks, Content and
189+
Technology](https://ec.europa.eu/info/departments/communications-networks-content-and-technology_en).
190+
This project has received funding from the European Union's [Horizon
191+
Europe](https://ec.europa.eu/programmes/horizoneurope/) research and innovation
192+
programme under grant agreement No 101092990.
193+
194+
<center>
195+
<a href="https://nlnet.nl">
196+
<img src="https://nlnet.nl/logo/banner.png" alt="NLnet foundation logo" width="20%" />
197+
</a>
198+
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
199+
<a href="https://nlnet.nl/core">
200+
<img src="https://nlnet.nl/image/logos/NGI0_tag.svg" alt="NGI Zero Logo" width="20%" />
201+
</a>
202+
</center>
203+
204+
This support will help to cover the maintenance, and some new features I will
205+
hopefully talk about soon!
206+
207+
## Team work
208+
209+
As always, it is important to note that what I presented here so far is mostly
210+
what I was working on. But I'm not alone in this project. For example, Geliang
211+
is looking at BPF `iter` for the subflows, and having a path-manage controlled
212+
with BPF ; Paolo helped fix some issues found by Syzbot, but also by users
213+
around the path-manager ; Davide switched to a better RST code in case of
214+
middleboxes interference ; Paolo and Mat helped with the code reviews ;
215+
Christoph continued the SyzKaller infrastructure maintenance.
216+
217+
A great community!

0 commit comments

Comments
 (0)