-
-
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
PM: server: accept subflows #203
Comments
[...]
The above is buggy. Either subflow 2 on both ends or remove one of the endpoint: 'subflow 1' means at most a single subflow will be created. With the 2 specified endpoint, the client is asked to create 2 subflows, more or less in random order.
I get this behavior when using 'nc' for both the server and the client. This behavior is actually the correct/expected one, as 'nc' closes the listening socket just after accepting the first connection. Additional subflows have a to enter a thin racing window to be allowed. If you are using 'nc', too the correct fix is appending '-k' to the server command line option. |
We should probably update the doc because it says the subflow limit is only for "additional" subflows. So if I want to have 2 subflows in total, I should set 1, no?
Mmh, that's a bit annoying for apps not build for MPTCP, no? :-/ |
Sorry, I was not clear nor accurate. 'subflow 1' means at most a single additional subflow will be created. The endpoint configuration attempts to create 2 additional subflows.
Well, it depends on the specific app. Most [all?] applications accepting connections keep the listener socket open. If some want to enable mptcp on an unmodified application closing the listener socket after the first connection, port-based endpoint comes to the rescue.
Same problem of 'nc'. Solvable adding '-j' on the command line |
When ADD_ADDR announcements use the port associated with an active subflow, this change ensures that a listening socket is bound to the announced address and port for subsequently receiving MP_JOINs from the remote end. In case there's a recorded lsk bound to that address+port, it is reused. But if a listening socket for this address is already held by the application then no further action is taken. When a listening socket is created, it is stored in struct mptcp_pm_add_entry and released accordingly. Closes: multipath-tcp/mptcp_net-next#203 v2: fixed formatting Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
When ADD_ADDR announcements use the port associated with an active subflow, this change ensures that a listening socket is bound to the announced addr+port in the kernel for subsequently receiving MP_JOINs. But if a listening socket for this address is already held by the application then no action is taken. A listening socket is created (when there isn't a listener) just prior to the addr advertisement. If it is desired to not create a listening socket in the kernel for an address, then this can be requested by including the MPTCP_PM_ADDR_FLAG_NO_LISTEN flag with the address. When a listening socket is created, it is stored in struct mptcp_pm_add_entry and released accordingly. Closes: multipath-tcp/mptcp_net-next#203 Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
When ADD_ADDR announcements use the port associated with an active subflow, this change ensures that a listening socket is bound to the announced addr+port in the kernel for subsequently receiving MP_JOINs. But if a listening socket for this address is already held by the application then no action is taken. A listening socket is created (when there isn't a listener) just prior to the addr advertisement. If it is desired to not create a listening socket in the kernel for an address, then this can be requested by including the MPTCP_PM_ADDR_FLAG_NO_LISTEN flag with the address. When a listening socket is created, it is stored in struct mptcp_pm_add_entry and released accordingly. Closes: multipath-tcp/mptcp_net-next#203 Signed-off-by: Kishen Maloor <kishen.maloor@intel.com>
From @mjmartineau
So closing this ticket. Progress can be followed on: multipath-tcp/mptcpd#223 |
With a simple setup, we can notice that no additional subflow is accepted by the server when the 'subflow' limit is set to 1.
Setup:
According to the doc, the subflow limit is only for additional subflows:
Here, we observe something different:
The client tries to create one addition subflow, that's good!
But it got rejected:
If I remove the second endpoint on the server, I have the same situation:
If I increase the subflow limit to 2 on the server side a new subflow has been created:
If I re-add the endpoint on the server still with the limit of 2 subflows:
Note that if I add/remove endpoints, sometimes I have to increase the limit to >2, e.g. with 4:
And sometimes, even with higher limits, I don't have any new subflows on the 2nd interface:
(maybe here, the client established a second subflow over the other link because I don't see a second SYN on the second interface)
The text was updated successfully, but these errors were encountered: