tcp: change IPv6 flow-label upon receiving spurious retransmission
authorYuchung Cheng <ycheng@google.com>
Wed, 29 Aug 2018 21:53:56 +0000 (14:53 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 1 Sep 2018 06:03:00 +0000 (23:03 -0700)
commit7788174e8726c309d8bfd8aeca743cefd6943616
treec22fbe4b578d94cf9e813fa8831a3bfb798717e8
parent506a03aa04deed321b26153aff4e61161aefa8af
tcp: change IPv6 flow-label upon receiving spurious retransmission

Currently a Linux IPv6 TCP sender will change the flow label upon
timeouts to potentially steer away from a data path that has gone
bad. However this does not help if the problem is on the ACK path
and the data path is healthy. In this case the receiver is likely
to receive repeated spurious retransmission because the sender
couldn't get the ACKs in time and has recurring timeouts.

This patch adds another feature to mitigate this problem. It
leverages the DSACK states in the receiver to change the flow
label of the ACKs to speculatively re-route the ACK packets.
In order to allow triggering on the second consecutive spurious
RTO, the receiver changes the flow label upon sending a second
consecutive DSACK for a sequence number below RCV.NXT.

Signed-off-by: Yuchung Cheng <ycheng@google.com>
Signed-off-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp.c
net/ipv4/tcp_input.c