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