Skip to content

mptcp: avoid dropping partial packets #600

@matttbe

Description

@matttbe

A recent commit from Paolo was trying to avoid dropping partial packets, see commit 1d2ce71 ("mptcp: do not drop partial packets").

Unfortunately, this had to be reverted, because it was causing issues in the selftests, see below and this packet trace:

lpN1FI-ns2-ns1-MPTCP-MPTCP-dead:beef:1::1-10003-listener.pcap.gz

Note that in the packet trace, we have retransmissions that seem to be ignored: probably an exception is missing for such retransmissions.

The idea here is to re-apply the patch, with an additional fix to avoid the mentioned issues.


Original bug report:

The CI recently reported issues with mptcp_connect.sh, probably linked to the mptcp: a few random fixes series.

I managed to reproduce the issue locally, with a packet trace: lpN1FI-ns2-ns1-MPTCP-MPTCP-dead:beef:1::1-10003-connector.pcap.gz

# 04 ns2 MPTCP -> ns1 (dead:beef:1::1:10003) MPTCP     (duration 61131ms) [FAIL] client exit code 124, server 124
#
# netns ns1-lpN1FI (listener) socket stat for 10003:
# Failed to find cgroup2 mount
# Failed to find cgroup2 mount
# Failed to find cgroup2 mount
# Netid State    Recv-Q Send-Q    Local Address:Port      Peer Address:Port
# tcp   ESTAB    0      0      [dead:beef:1::1]:10003 [dead:beef:1::2]:41046 ino:70658 sk:1 cgroup:unreachable:1 <->
#        skmem:(r0,rb957700,t0,tb986112,f0,w0,o0,bl0,d0) ts sack fastopen cubic wscale:8,8 rto:201 rtt:0.058/0.008 ato:40 mss:1428 pmtu:1500 rcvmss:1428 advmss:1428 cwnd:15 ssthresh:31 bytes_sent:6572704 bytes_retrans:375848 bytes_acked:6196856 bytes_received:4869397 segs_out:5067 segs_in:4636 data_segs_out:4904 data_segs_in:3545 send 2954482759bps lastsnd:156 lastrcv:61100 lastack:156 pacing_rate 3537754832bps delivery_rate 952000000bps delivered:4626 busy:121ms rwnd_limited:7ms(5.8%) sndbuf_limited:41ms(33.9%) retrans:0/279 rcv_rtt:0.637 rcv_space:58887 rcv_ssthresh:829239 minrtt:0.005 snd_wnd:357888 rcv_wnd:210688 tcp-ulp-mptcp flags:Mec token:0000(id:0)/af4aa5c3(id:0) seq:9951141134689003280 sfseq:4810278 ssnoff:3944730462 maplen:57720
# mptcp LAST-ACK 0      0      [dead:beef:1::1]:10003 [dead:beef:1::2]:41046 timer:(keepalive,58sec,0) ino:0 sk:2 cgroup:unreachable:1 ---
#        skmem:(r0,rb238499,t0,tb990208,f3984,w626800,o0,bl0,d0) subflows_max:2 remote_key token:af4aa5c3 write_seq:7898658179809219122 snd_una:7898658179808596529 rcv_nxt:9951141134689061001 bytes_retrans:1814136 bytes_sent:4382720 bytes_received:4815824 bytes_acked:3760128 subflows_total:1 last_data_sent:1422 last_data_recv:61118 last_ack_recv:174
# TcpPassiveOpens                 1                  0.0
# TcpInSegs                       1425               0.0
# TcpOutSegs                      4789               0.0
# TcpRetransSegs                  279                0.0
# TcpExtDelayedACKs               1                  0.0
# TcpExtTCPPureAcks               1012               0.0
# TcpExtTCPSackRecovery           7                  0.0
# TcpExtTCPFastRetrans            279                0.0
# TcpExtTCPLossProbes             3                  0.0
# TcpExtTCPBacklogCoalesce        79                 0.0
# TcpExtTCPSackMerged             1                  0.0
# TcpExtTCPSackShiftFallback      7                  0.0
# TcpExtTCPRcvCoalesce            3                  0.0
# TcpExtTCPFastOpenPassive        1                  0.0
# TcpExtTCPAutoCorking            1                  0.0
# TcpExtTCPFromZeroWindowAdv      7                  0.0
# TcpExtTCPToZeroWindowAdv        11                 0.0
# TcpExtTCPWantZeroWindowAdv      36                 0.0
# TcpExtTCPOrigDataSent           4625               0.0
# TcpExtTCPHystartTrainDetect     1                  0.0
# TcpExtTCPHystartTrainCwnd       306                0.0
# TcpExtTCPDelivered              4625               0.0
# MPTcpExtMPCapableSYNRX          1                  0.0
# MPTcpExtMPCapableACKRX          1                  0.0
# MPTcpExtMPTCPRetrans            300                0.0
# MPTcpExtDuplicateData           8                  0.0
# MPTcpExtSndWndShared            652                0.0
# MPTcpExtRcvWndShared            6                  0.0
#
# netns ns2-I6OSDA (connector) socket stat for 10003:
# Failed to find cgroup2 mount
# Failed to find cgroup2 mount
# Failed to find cgroup2 mount
# Netid State      Recv-Q Send-Q    Local Address:Port      Peer Address:Port
# tcp   ESTAB      0      0      [dead:beef:1::2]:41046 [dead:beef:1::1]:10003 ino:70012 sk:3 cgroup:unreachable:1 <->
#        skmem:(r0,rb621824,t0,tb1783296,f0,w0,o0,bl0,d286) ts sack fastopen cubic wscale:8,8 rto:201 rtt:0.098/0.051 ato:40 mss:1428 pmtu:1500 rcvmss:1400 advmss:1428 cwnd:244 bytes_sent:4869397 bytes_acked:4869398 bytes_received:6205048 segs_out:4638 segs_in:5074 data_segs_out:3545 data_segs_in:4910 send 28443428571bps lastsnd:61171 lastrcv:19 lastack:19 pacing_rate 56814389808bps delivery_rate 12725468352bps delivered:3545 busy:90ms rwnd_limited:16ms(17.8%) sndbuf_limited:1ms(1.1%) rcv_rtt:207.973 rcv_space:47983 rcv_ssthresh:378924 minrtt:0.005 rcv_ooopack:51 snd_wnd:210688 rcv_wnd:353024 tcp-ulp-mptcp flags:Mmec token:0000(id:0)/ef3d6cab(id:0) seq:7898658179808596529 sfseq:6196857 ssnoff:196930618 maplen:8192
# mptcp FIN-WAIT-2 42752  0      [dead:beef:1::2]:41046 [dead:beef:1::1]:10003 timer:(keepalive,58sec,0) ino:0 sk:4 cgroup:unreachable:1 ---
#        skmem:(r42752,rb621824,t0,tb1787392,f2304,w0,o0,bl0,d1609) subflows_max:2 remote_key token:ef3d6cab write_seq:9951141134689061001 snd_una:9951141134689061001 rcv_nxt:7898658179808604721 bytes_retrans:53568 bytes_sent:4814424 bytes_received:3768320 bytes_acked:4814425 subflows_total:1 last_data_sent:61172 last_data_recv:20 last_ack_recv:20
# TcpActiveOpens                  1                  0.0
# TcpInSegs                       1456               0.0
# TcpOutSegs                      4636               0.0
# TcpExtBeyondWindow              89                 0.0
# TcpExtDelayedACKs               2                  0.0
# TcpExtTCPPureAcks               155                0.0
# TcpExtTCPBacklogCoalesce        1                  0.0
# TcpExtTCPRcvCoalesce            35                 0.0
# TcpExtTCPOFOQueue               8                  0.0
# TcpExtTCPFastOpenActive         1                  0.0
# TcpExtTCPFromZeroWindowAdv      2                  0.0
# TcpExtTCPToZeroWindowAdv        2                  0.0
# TcpExtTCPWantZeroWindowAdv      44                 0.0
# TcpExtTCPOrigDataSent           3545               0.0
# TcpExtTCPACKSkippedSeq          6                  0.0
# TcpExtTCPDelivered              3546               0.0
# TcpExtTCPZeroWindowDrop         2                  0.0
# MPTcpExtMPCapableSYNTX          1                  0.0
# MPTcpExtMPCapableSYNACKRX       1                  0.0
# MPTcpExtMPTCPRetrans            3                  0.0
# MPTcpExtOFOQueueTail            11                 0.0
# MPTcpExtOFOQueue                12                 0.0
# MPTcpExtOFOMerge                8                  0.0
# MPTcpExtNoDSSInWindow           328                0.0
# MPTcpExtRcvWndShared            68                 0.0
# MPTcpExtWinProbe                5                  0.0
#
# tcpdump: WARNING: any: That device doesn't support promiscuous mode
# (Promiscuous mode not supported on the "any" device)tcpdump: WARNING:
# any: That device doesn't support promiscuous mode
# (Promiscuous mode not supported on the "any" device)
# tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
# tcpdump: listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 65535 bytes
# 2882 packets captured
# 2890 packets received by filter2882 packets captured
# 2890 packets received by filter
# 0 packets dropped by kernel
# 0 packets dropped by kernel
#
# INFO: with MPTFO end
# [FAIL] Tests with MPTFO have failed

Very likely an issue with 1d2ce71 (mptcp: do not drop partial packets)?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions