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

DATA_FIN is not retransmitted on timeout #146

Closed
pabeni opened this issue Jan 28, 2021 · 2 comments
Closed

DATA_FIN is not retransmitted on timeout #146

pabeni opened this issue Jan 28, 2021 · 2 comments
Assignees
Labels

Comments

@pabeni
Copy link

pabeni commented Jan 28, 2021

currently we don't have any code in place to check for DATA_FIN timeout and retransmit.

@pabeni pabeni added the bug label Jan 28, 2021
@mjmartineau mjmartineau self-assigned this Jan 28, 2021
@mjmartineau
Copy link
Member

Request from @pabeni: Look at using delegated actions instead of workqueue

@matttbe
Copy link
Member

matttbe commented Mar 20, 2021

Just to track the frequency, my CI just reported an issue where one socket is in FIN-WAIT-2:


# selftests: net/mptcp: mptcp_connect.sh
--
  | # INFO: set ns3-60559cc5-rBzcRI dev ns3eth2: ethtool -K tso off gso off gro off
  | # INFO: set ns4-60559cc5-rBzcRI dev ns4eth3: ethtool -K  gso off
  | # Created /tmp/tmp.K74Gvqcdyw (size 3849244	/tmp/tmp.K74Gvqcdyw) containing data sent by client
  | # Created /tmp/tmp.a5zdIoF5YL (size 172060	/tmp/tmp.a5zdIoF5YL) containing data sent by server
  | # New MPTCP socket can be blocked via sysctl		[ OK ]
  | # setsockopt(..., TCP_ULP, "mptcp", ...) blocked	[ OK ]
  | # INFO: validating network environment with pings
  | # INFO: Using loss of 0.74% delay 28 ms reorder 92% 81% with delay 7ms on ns3eth4
  | # ns1 MPTCP -> ns1 (10.0.1.1:10000      ) MPTCP	(duration    83ms) [ OK ]
  | # ns1 MPTCP -> ns1 (10.0.1.1:10001      ) TCP  	(duration    33ms) [ OK ]
  | # ns1 TCP   -> ns1 (10.0.1.1:10002      ) MPTCP	(duration    30ms) [ OK ]
  | # ns1 MPTCP -> ns1 (dead:beef:1::1:10003) MPTCP	(duration   120ms) [ OK ]
  | # ns1 MPTCP -> ns1 (dead:beef:1::1:10004) TCP  	(duration    40ms) [ OK ]
  | # ns1 TCP   -> ns1 (dead:beef:1::1:10005) MPTCP	(duration    38ms) [ OK ]
  | # ns1 MPTCP -> ns2 (10.0.1.2:10006      ) MPTCP	(duration    40ms) [ OK ]
  | # ns1 MPTCP -> ns2 (dead:beef:1::2:10007) MPTCP	(duration    40ms) [ OK ]
  | # ns1 MPTCP -> ns2 (10.0.2.1:10008      ) MPTCP	(duration    40ms) [ OK ]
  | # ns1 MPTCP -> ns2 (dead:beef:2::1:10009) MPTCP	(duration    40ms) [ OK ]
  | # ns1 MPTCP -> ns3 (10.0.2.2:10010      ) MPTCP	(duration   398ms) [ OK ]
  | # ns1 MPTCP -> ns3 (dead:beef:2::2:10011) MPTCP	(duration  4025ms) [ OK ]
  | # ns1 MPTCP -> ns3 (10.0.3.2:10012       ) MPTCP	copyfd_io_poll: poll timed out (events: POLLIN 1, POLLOUT 0)
  | # (duration 30375ms) [ FAIL ] client exit code 0, server 2
  | #
  | # netns ns3-60559cc5-rBzcRI socket stat for 10012:
  | # Netid State      Recv-Q Send-Q Local  Address:Port  Peer Address:Port Process
  | # tcp   ESTAB      0      0           10.0.3.2:10012     10.0.1.1:60486 ino:0 sk:1 <->
  | # ts sack cubic wscale:7,7 rto:229  rtt:28.164/0.01 ato:40 mss:1448 pmtu:1500 rcvmss:1448 advmss:1448  cwnd:120 bytes_sent:172060 bytes_acked:172060 bytes_received:3849244  segs_out:273 segs_in:2804 data_segs_out:129 data_segs_in:2717 send  49356625bps lastsnd:30356 lastrcv:30215 lastack:30215 pacing_rate  98711496bps delivery_rate 411272bps delivered:130 busy:141ms  rcv_rtt:28.223 rcv_space:14600 rcv_ssthresh:3133018 minrtt:28.092  tcp-ulp-mptcp flags:Mec token:0000(id:0)/ecb40f0(id:0)  seq:38a74c261fe11c26 sfseq:39f805 ssnoff:b001648f maplen:c418
  | # mptcp FIN-WAIT-2 0      0            10.0.3.2:10012     10.0.1.1:60486 timer:(keepalive,59sec,0) ino:0 sk:2  ---
  | # remote_key token:ecb40f0  write_seq:7f38dd7279190bfe snd_una:7f38dd7279190bfe  rcv_nxt:38a74c261fe1e03e
  | # TcpPassiveOpens                 1                  0.0
  | # TcpInSegs                       242                0.0
  | # TcpOutSegs                      274                0.0
  | # TcpExtTCPPureAcks               83                 0.0
  | # TcpExtTCPBacklogCoalesce        2                  0.0
  | # TcpExtTCPOFOQueue               1                  0.0
  | # TcpExtTCPAutoCorking            1                  0.0
  | # TcpExtTCPOrigDataSent           129                0.0
  | # TcpExtTCPDelivered              129                0.0
  | # MPTcpExtMPCapableSYNRX          1                  0.0
  | # MPTcpExtMPCapableACKRX          1                  0.0
  | #
  | # netns ns1-60559cc5-rBzcRI socket stat for 10012:
  | # Netid State    Recv-Q Send-Q Local  Address:Port  Peer Address:Port Process
  | # tcp   ESTAB    0      0           10.0.1.1:60486     10.0.3.2:10012 ino:0 sk:3 <->
  | # ts sack cubic wscale:7,7 rto:229  rtt:28.142/0.017 ato:48 mss:1448 pmtu:1500 rcvmss:1420 advmss:1448  cwnd:1648 bytes_sent:3849244 bytes_acked:3849245 bytes_received:172060  segs_out:2805 segs_in:274 data_segs_out:2717 data_segs_in:129 send  678360884bps lastsnd:30304 lastrcv:30417 lastack:30276 pacing_rate  1356709712bps delivery_rate 335399688bps delivered:2718 busy:282ms  rwnd_limited:28ms(9.9%) reordering:7 reord_seen:1 rcv_rtt:28.348  rcv_space:14480 rcv_ssthresh:265072 minrtt:28.13 tcp-ulp-mptcp  flags:Mmec token:0000(id:0)/ddcec3e3(id:0) seq:7f38dd7279190be1  sfseq:2a001 ssnoff:64d68060 maplen:1c
  | # mptcp LAST-ACK 0      0            10.0.1.1:60486     10.0.3.2:10012 timer:(keepalive,29sec,0) ino:0 sk:4  ---
  | # remote_key token:ddcec3e3  write_seq:38a74c261fe1e03f snd_una:38a74c261fe1e03e  rcv_nxt:7f38dd7279190bfe
  | # TcpActiveOpens                  1                  0.0
  | # TcpInSegs                       274                0.0
  | # TcpOutSegs                      2805               0.0
  | # TcpExtTCPPureAcks               128                0.0
  | # TcpExtTCPSACKReorder            1                  0.0
  | # TcpExtTCPBacklogCoalesce        25                 0.0
  | # TcpExtTCPSackMerged             1                  0.0
  | # TcpExtTCPSackShiftFallback      1                  0.0
  | # TcpExtTCPAutoCorking            5                  0.0
  | # TcpExtTCPOrigDataSent           2717               0.0
  | # TcpExtTCPACKSkippedSeq          4                  0.0
  | # TcpExtTCPDelivered              2718               0.0
  | # MPTcpExtMPCapableSYNTX          1                  0.0
  | # MPTcpExtMPCapableSYNACKRX       1                  0.0
  | #
  | # ns1 MPTCP -> ns3 (dead:beef:3::2:10013) MPTCP	(duration   342ms) [ OK ]
  | # ns1 MPTCP -> ns4 (10.0.3.1:10014      ) MPTCP	(duration  3375ms) [ OK ]
  | # ns1 MPTCP -> ns4 (dead:beef:3::1:10015) MPTCP	(duration  3971ms) [ OK ]
  | # ns2 MPTCP -> ns1 (10.0.1.1:10016      ) MPTCP	(duration    40ms) [ OK ]
  | # FAIL: Could not even run loopback test

matttbe pushed a commit that referenced this issue Apr 21, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
jenkins-tessares pushed a commit that referenced this issue Apr 22, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 22, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 22, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 22, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
jenkins-tessares pushed a commit that referenced this issue Apr 23, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 23, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
fengguang pushed a commit to 0day-ci/linux that referenced this issue Apr 23, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: multipath-tcp/mptcp_net-next#146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
fengguang pushed a commit to 0day-ci/linux that referenced this issue Apr 23, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: multipath-tcp/mptcp_net-next#146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
jenkins-tessares pushed a commit that referenced this issue Apr 24, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 24, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 26, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
matttbe pushed a commit that referenced this issue Apr 26, 2021
With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: #146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
nareshkamboju pushed a commit to nareshkamboju/linux that referenced this issue May 13, 2021
[ Upstream commit 6477dd3 ]

With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: multipath-tcp/mptcp_net-next#146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Whissi pushed a commit to Whissi/linux-stable that referenced this issue May 14, 2021
[ Upstream commit 6477dd3 ]

With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: multipath-tcp/mptcp_net-next#146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
xanmod pushed a commit to xanmod/linux that referenced this issue May 15, 2021
[ Upstream commit 6477dd3 ]

With this change, the MPTCP-level retransmission timer is used to resend
DATA_FIN. The retranmit timer is not stopped while waiting for a
MPTCP-level ACK of DATA_FIN, and retransmitted DATA_FINs are sent on all
subflows. The retry interval starts at TCP_RTO_MIN and then doubles on
each attempt, up to TCP_RTO_MAX.

Closes: multipath-tcp/mptcp_net-next#146
Fixes: 43b54c6 ("mptcp: Use full MPTCP-level disconnect state machine")
Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants