|
| 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 | + |
| 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