-
-
Notifications
You must be signed in to change notification settings - Fork 41
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
IPv6 Rejoin Subflow #489
Comments
Hi Saki, Sorry for the delay, it looks like we missed the issue.
I didn't try to reproduce it yet, but it looks strange it works in v4 and not in v6, there should not be any difference. Also, just to be sure, do you have the same issue if you increase the 'subflows' limit to 8 on the server side as well? |
Hello
The default behaviour on my laptop is that Network Manager (Version 1.42.4 ) creates the endpoints. connection.mptcp-flags: 0x0 (default) -> default /proc/sys/net/mptcp/enabled [1] I disabled the NetworkManager MPTCP and did add it manually but the outcome was the same. And also I waited several minutes but the interface didn't join to rule out DAD.
I did that but it had no effect. [1] https://networkmanager.pages.freedesktop.org/NetworkManager/NetworkManager/nm-settings-nmcli.html Thank you and kind regards |
Nice, I didn't know it was enabled by default.
Ah good, so it adds endpoints with the 'subflow' flag by default, that's good.
Thank you for having tested! By chance, did you try by setting a different MPTCP endpoint ID? Maybe the ID is still marked as used by mistake. But I don't see differences between v4 and v6 handling regarding that part. And just to be sure, if you restart the connection after having reproduced the problem (disconnect/reconnect → attached endpoints are removed/re-added → attached v6 subflows are not re-established), the expected subflows are correctly created in v4 and v6, right? One last thing, if you play with the interface of the second interface (not the one used by the initial subflow), do you have the same issue? |
Sorry for the delay.
Network Manager creates the endpoint with different ID. I can test that manually without NetworkManager if you want.
Yes when I restart the connection all expected subflows are correctly created in both v4 and v6.
Yes I have tested that too. |
No problem!
Do you mean that when NM re-creates endpoints, the ID is the different from before? (There are some corner cases that are being fixed, where the ID cannot be re-used, e.g. if there were no subflow linked to it, but that's not the case here)
Thank you for having tested.
(I wanted to say "if you play with the interface of the second subflow") And do you have the same issue? In your case here, is the IPv6 subflow special somehow? e.g. is it the initial subflow? (do you start your connection in v4 or v6?) Or do you have the full output of |
Yes I have copied my test case now. I unpluged wlp0s20f3 two times. The NM gives the same subflow ID before the unplug from the IPv6 address to the IPv4 address after the unplug. And after the reconnect the IPv6 gets a new subflow ID. This was the test output of "ip mptcp endpoint show": original state: first unplug and reconnect: second unplug and reconnect:
Ack.
You are welcome.
Yes, no matter if I disconnect the interface of the first or second subflow the subflow does not rejoin the connection in v6.
I start my connection in v6. IMHO there is nothing special about the connection. Maybe the NM does configure something which does not work in this setting.
I attached the "ip mptcp monitor" output in the first message, do you need more information? |
I think I'm a bit lost. Just to be sure:
I'm not able to reproduce it :-/ (but without NM) Also, if you establish your initial connection in v6, I'm not sure to understand how the client will establish the connection in v4, because you set the What's the endpoint config on the server side? Only 2 endpoints, one in v4 and one in v6? Could you get the output of There are some fixes ongoing around this, do you think you could compile a kernel using the code from this tag, and reproduce the issue please? |
One last thing, if you have:
and the initial connection in v6, only one v4 subflow will be created, because an Also, if you remove and re-add See https://www.mptcp.dev/pm.html for more details about how the PM is currently working. |
Yes that's correct.
This works now. I can add new subflow endpoints manually with 'ip mptcp add' and the subflow gets created with the same ID and different ID. Either I tested it wrong last time or running on a newer kernel fixed this problem (now version 6.10.6).
No, you are right add_addr_accepted limit was 0 on the client and 4 for the server. I have v4 addresses but in my use case they are not used, only v6 endpoints. My aim was not to create a fullmesh setup but only a setup from several subflow endpoints from client to one server inerface (v6). Now when I remove and then add an active endpoint the subflow gets removed and is getting created again, like expected.
On the server with NM: mptcp ESTAB 0 0 [$server_endpoint_implicit_v6]:22 [$client_endpoint_subflow_v6_iface1]:53700 mptcp ESTAB 0 0 [$server_endpoint_implicit_v6]:22 [$client_endpoint_subflow_v6_iface1]:53700 On the server without NM: mptcp ESTAB 0 0 [$server_endpoint_implicit_v6]:22 [$client_endpoint_subflow_v6_iface1]:53900 mptcp ESTAB 0 0 [$server_endpoint_implicit_v6]:22 [$client_endpoint_subflow_v6_iface1]:53900 Seems ok for me.
I did compile and run the patched kernel version. I removed and added endpoints manually and with Network Manager it does work manually and with Network Manager not. Therefore same outcome.
server:
No v4 subflow is created because the server has only one implicit v6 endpoint. Only one v6 subflow is created from endpoint subflow v6 iface 2 to endpoint v6 implicit to server. Should I open a bug in Network Manager what you think? |
It is possible the newer kernel fixed this problem, because quite a few issues around the path-manager have been fixed recently.
Good!
If it is "implicit", it has not been added by NM, the kernel is using it because the address is being used by MPTCP for some reason (initial path?)
Thank you for having checked.
So from what I understand, on the server side, no endpoints have been configured by NM, right?
Sorry, it is a bit difficult for me to follow, but if I understood correctly, the remaining issue is that NM didn't configure any endpoints on the server side, right? If yes, it might be good to check the NM config, checking if nothing has been missed by accident. Please note that by default, I think NM would configure 'subflow' endpoints. Did you change something for NM to configure 'signal' endpoints instead? Maybe MPTCP support has been disabled by accident? |
Given we got rid of ARG_PTR_TO_LONG, change the test case description to avoid potential confusion: # ./vmtest.sh -- ./test_progs -t verifier_int_ptr [...] ./test_progs -t verifier_int_ptr [ 1.610563] bpf_testmod: loading out-of-tree module taints kernel. [ 1.611049] bpf_testmod: module verification failed: signature and/or required key missing - tainting kernel #489/1 verifier_int_ptr/arg pointer to long uninitialized:OK #489/2 verifier_int_ptr/arg pointer to long half-uninitialized:OK #489/3 verifier_int_ptr/arg pointer to long misaligned:OK #489/4 verifier_int_ptr/arg pointer to long size < sizeof(long):OK #489/5 verifier_int_ptr/arg pointer to long initialized:OK #489 verifier_int_ptr:OK Summary: 1/5 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/r/20240913191754.13290-7-daniel@iogearbox.net Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Hello
I have a dual-stack (IPv4+IPv6) setup with two interfaces.
When I do a mptcp connection it does establish a connection and creates a subflow, like expected.
But if I disconnect one interface and add it back as mptcp endpoint the IPv6 endpoint does not join as subflow again.
I have this problem only when I am connecting with IPv6.
I am testing this with a patched openssh version 9.7p1 to support mptcp. The same version is installed on both client and server.
https://github.com/openssh/openssh-portable/pull/335/files
When I establish and remove interface1 from the session I get this output with:
ip mptcp monitor
But
interface1
did not join the connection after it was back on and the endpoint created in subflow mode.Here are some additional informations:
limit on the client:
limit on the server:
I am using kernel version 6.6.15 and following mptcp settings (same on server and client):
Thanks and greetings
Saki
The text was updated successfully, but these errors were encountered: