Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
tcp: Mark fastopen SYN packet as lost when receiving ICMP_TOOBIG/ICMP…
…_FRAG_NEEDED In the case of a fastopen SYN there are cases where it may trigger either a ICMP_TOOBIG message in the case of IPv6 or a fragmentation request in the case of IPv4. This results in the socket stalling for a second or more as it does not respond to the message by retransmitting the SYN frame. Normally a SYN frame should not be able to trigger a ICMP_TOOBIG or ICMP_FRAG_NEEDED however in the case of fastopen we can have a frame that makes use of the entire MTU. In the case of fastopen it does, and an additional complication is that the retransmit queue doesn't contain the original frames. As a result when tcp_simple_retransmit is called and walks the list of frames in the queue it may not mark the frames as lost because both the SYN and the data packet each individually are smaller than the MSS size after the adjustment. This results in the socket being stalled until the retransmit timer kicks in and forces the SYN frame out again without the data attached. In order to resolve this we need to mark the SYN frame as lost if it is the first packet in the queue. Doing this allows the socket to recover much more quickly without the retransmit timeout stall. Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
- Loading branch information