Skip to content
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

netlink protocol question: subflow creation #193

Open
teto opened this issue Dec 24, 2021 · 2 comments
Open

netlink protocol question: subflow creation #193

teto opened this issue Dec 24, 2021 · 2 comments
Labels
question Further information is requested

Comments

@teto
Copy link

teto commented Dec 24, 2021

Not related to mptcpd directly but I had a question on the protocol itself: how do you create a new subflow ? In the multipath-tcp.org version I could send a MPTCP_CMD_SUB_CREATE command to the kernel. This has disappeared.
Seems like now one has to:
1/ change the "limits" to allow for more subflows
2/ submit MPTCP_PM_CMD_ADD_ADDR packets ?

I am basically trying to adapt my own path manager to the upstream version.
I've looked at mptcpd code but there doesn't seem to be an ndiffport equivalent is there (I just see plugins/path_managers/sspi.c).
PS: I know about the mailing list but is there some interactive channel like an existring IRC channel to discuss mptcp topics ?

@ossama-othman ossama-othman added the question Further information is requested label Dec 24, 2021
@ossama-othman
Copy link
Member

One thing to keep in mind is that the existing MPTCP path management generic netlink API in the upstream kernel is meant to control the in-kernel (server-oriented) path manager, which is different than the user space path management available in the multipath-tcp.org kernel. The upstream kernel currently doesn't support similar user space path management but an implementation is currently under development. Issues related to this user space path management include the following:

The new user space path management API will have a generic netlink command equivalent to MPTCP_CMD_SUB_CREATE found in the multipath-tcp.org kernel.
Seems like now one has to:
1/ change the "limits" to allow for more subflows
2/ submit MPTCP_PM_CMD_ADD_ADDR packets ?

That's correct for the in-kernel path manager in the upstream kernel. This is what the addr_adv mptcpd plugin does, for example.

I am basically trying to adapt my own path manager to the upstream version.

That's likely going to be difficult with current path management netlink API in the upstream kernel since it does not yet support full user space path management.

I've looked at mptcpd code but there doesn't seem to be an ndiffport equivalent is there (I just see plugins/path_managers/sspi.c).

Mptcpd currently ships with two plugins, sspi and addr_adv. The sspi plugin was originally developed for use with multipath-tcp.org kernel, so it won't work well with the upstream kernel until the user space path management API is available in the kernel. Currently, only the addr_adv plugin works well with the upstream kernel since it was designed to work with the in-kernel path manager.

Would supporting path managers like the multipath-tcp.org kernel's ndiff-ports in mptcpd be of interest to you?

PS: I know about the mailing list but is there some interactive channel like an existring IRC channel to discuss mptcp topics ?

The MPTCP community IRC channel is #mptcp is on Libera.Chat.

HTH!

@teto
Copy link
Author

teto commented Dec 25, 2021

Thanks for the answer !
I've tried to launch

➜ sudo mptcpd --path-manager=addr_adv -d
configuration.c:mptcpd_config_create() path manager plugin directory: /nix/store/jqq6vad2sisd22y58b4sbngf6v18j52c-mptcpd/lib/mptcpd
configuration.c:mptcpd_config_create() default path manager plugin: addr_adv
path_manager.c:family_appeared() "mptcp_pm" generic netlink family appeared
MPTCP single-subflow-per-interface path manager initialized.
MPTCP address advertiser path manager initialized.

(content of plugin directory)

ls /nix/store/jqq6vad2sisd22y58b4sbngf6v18j52c-mptcpd/lib/mptcpd
addr_adv.la  libmptcpwrap.la  libmptcpwrap.so.0      sspi.la
addr_adv.so  libmptcpwrap.so  libmptcpwrap.so.0.0.0  sspi.so

so looks like it startups fine.
I launch an iperf -m in parallel but it still creates only one subflow. How can I tweak mptcpd to create additionnal ones (ideally for localhost connections) ?

At one point I thought I could do without mptcpd (my goal is just to create an MPTCP connection with 2 subflows) and just with ip mptcp. I ran

sudo ip mptcp limits set subflow 2 add_addr_accepted 2
sudo ip mptcp endpoint add 192.168.1.17 port 4567 subflow
Error: argument "port" is wrong: flags must have signal when using port

I've tried several variants but could never get rid of the error. (using iproute2-5.14.0 on a Linux 5.15.10 .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants