-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add MPTCP support with the --multipath flag #1166
Conversation
Also available with the short option '-m'. The MPTCP protocol is really a TCP variant, so this change does not implement a new 'struct protocol'. Instead it just extend the TCP support to optionally enable multipath. The only required dependency is IPPROTO_MPTCP definition, which should be provided by the netinet/in.h header. To keep things simple, just conditionally provide the required protocol, if the system header does not have it yet
Added code to support setting the `--multipath` flag in iperf3 Note: This requires a special build of iperf: esnet/iperf#1166
Added code to support setting the `--multipath` flag in iperf3 Note: This requires a special build of iperf: esnet/iperf#1166
Added code to support setting the `--multipath` flag in iperf3 on both client and server Note: This requires a special build of iperf: esnet/iperf#1166
Added code to support setting the `--multipath` flag in iperf3 on both client and server Note: This requires a special build of iperf: esnet/iperf#1166
I've tested it locally and it worked fine. Needs a rebase and maybe reword the commit too., |
A belated thank-you for this pull request. It sounds useful, although I'm not sure where MPTCP would be used in our (ESnet's) network environment. (or for that matter how we would test whether this works or not.) The main change I can think of at this point is that you should be testing for MPTCP support (I guess you can check for the presence of If you look in |
wont that be an issue when cross compiling ? I would think it's not necessary as one needs to check at runtime anyway |
This is great! The first use case I can think of is when both server and client is dual stack. If I understand it correctly MPTCP will create a subflow per L3 path so iperf will push traffic over IPv4 and IPv6 at the same time. |
Ideally MPTCP would be used almost everywhere as practically a superset of TCP.
Testing could be still tricky as support is still not widespread. I'm not fully confident, but it's possible that with a recent enough kernel and mptcpd/NetworkManager there's already no need for extra configuration. Alternatively Red Hat has good instructions on getting multiple subflows going as part of a quite decent documentation, but they also have a more recent post describing it too. Worst case while that's not testing MPTCP features, if the MPTCP handshake fails, a regular TCP connection is established, so the handshake attempt could be observed over the network, and from that point on the rest could be left up to the system as the program successfully opted into using MPTCP, and further participation is not mandatory for the extra features.
IPv4 and IPv6 mixing was likely not possible yet at the time of your comment, at least related work seems to be quite recent as it can be seen https://github.com/multipath-tcp/mptcp_net-next/issues/269. |
obsoleted by #1661 |
Version of iperf3 (or development branch, such as
master
or3.1-STABLE
) to which this pull request applies:master
Issues fixed (if any):
[]
Brief description of code changes (suitable for use as a commit message):
Recent version of the Linux kernel (5.9) gained MPTCP support, this change
allows easy testing such protocol.
MPTCP is strongly tied to TCP, and the kernel APIs are almost the same,
so this change does not implement a new 'struct protocol'. Instead it just
extend the TCP support to optionally enable multipath via the --multipath or
-m switch.
The only required dependency is the 'IPPROTO_MPTCP' protocol number
definition, which should be provided by the netinet/in.h header.
To keep things simple, just conditionally provide the required
protocol, if the system header does not have it yet.