mptcp icon indicating copy to clipboard operation
mptcp copied to clipboard

Porting MPTCP v0.95 to android O

Open ManuAryan opened this issue 5 years ago • 7 comments

Hi,

We have ported the mptcp kernel v0.95 to the Android O device, we are able to see the MPTCP option and analysis in the TCP SYN packet as follow MPTCP_param

However we are not able to receive any SYN ACK hence MPTCP is not working via either wlan or rmnet interface but the same is working in nexus 5 device! Are we missing something here to figure out why SYN ACK is not being received ? please help us debug. No_SYN_ACK

ManuAryan avatar Aug 12 '19 05:08 ManuAryan

Isn’t this the same problem as #347?

cpaasch avatar Aug 12 '19 07:08 cpaasch

Isn’t this the same problem as #347?

The issue is #347 is different. The access point was the culprit there. To root-cause Nexus 5 was verified by connecting to a hotspot, and it worked well after that.

In this case, the device is connected to a hotspot when the tcpdump was captured. So there should not be any problem with access point in this case. As part of the protocol, the device sends SYN as expected. However there is no SYN-ACK received from the server. Any pointer regarding this is greatly appreciated. The server in this case is "http://amiusingmptcp.de/".

Thanks and have a good day!

webgenius-coder avatar Aug 12 '19 09:08 webgenius-coder

Hi,

On which Android device are you working on? I know that devices with old kernels (e.g. v3.4 with the Nexus 5) have a lot of modifications compared to the upstream kernel. It is then difficult to port MPTCP on these ones. The easiest is certainly to work on more recent devices having newer kernel, at least 4.x (e.g. 4.9, 4.14) and then less big modifications.

matttbe avatar Aug 12 '19 10:08 matttbe

The Kernel version is 4.4. So, "MPTCP v0.92 Release" which is based on 4.4 is being used for porting.

webgenius-coder avatar Aug 12 '19 10:08 webgenius-coder

OK, I guess the title is then not correct. I don't have experience with this kernel and Android devices. Maybe there are known issues others could share :)

All I can say is if the SYN+MP_CAPABLE is OK (maybe check on the next hop and not directly on the device), either the packet is corrupted (checksum, etc.) or there is a middlebox somewhere. If you were not able to generate a SYN with MPTCP options, that could have been multiple things, selinux for example. Turning on 'net.mptcp.mptcp_debugand reading messages indmesg` might help.

matttbe avatar Aug 12 '19 10:08 matttbe

Hi,

Infrastructure used (Access point and SIM) for android device with kernel 4.4 is same as the one used for Nexus 5. However MPTCP works for Nexus 5 ,but failing for our devices. Hence it doesn't look like middlebox problem.

Please see the following sysctl flags for our device
net.mptcp.mptcp_checksum = 1 net.mptcp.mptcp_debug = 0 net.mptcp.mptcp_enabled = 1sysctl net.mptcp.
net.mptcp.mptcp_path_manager = default net.mptcp.mptcp_scheduler = default net.mptcp.mptcp_syn_retries = 3 net.mptcp.mptcp_version = 0

Could you please help me debug the packet corruption problem? Like any flags/option that can be seen in the capture?

ManuAryan avatar Aug 12 '19 10:08 ManuAryan

If you send a SYN+MP_CAPABLE but no SYN-ACK+MP_CAPABLE is received, you need to find where the MPTCP options are dropped. The packet could be corrupted, maybe something wrong with the MPTCP checksum, etc.

The best is then to do tcpdump elsewhere. Maybe setup your own MPTCP server to do the monitoring and see what you receive from the phone and what the server replies.

matttbe avatar Aug 12 '19 13:08 matttbe