WSL2-Linux-Kernel/include/net/sctp
Andrei Pelinescu-Onciul 5fdd4baef6 sctp: on T3_RTX retransmit all the in-flight chunks
When retransmitting due to T3 timeout, retransmit all the
in-flight chunks for the corresponding  transport/path, including
chunks sent less then 1 rto ago.
This is the correct behaviour according to rfc4960 section 6.3.3
E3 and
"Note: Any DATA chunks that were sent to the address for which the
 T3-rtx timer expired but did not fit in one MTU (rule E3 above)
 should be marked for retransmission and sent as soon as cwnd
 allows (normally, when a SACK arrives). ".

This fixes problems when more then one path is present and the T3
retransmission of the first chunk that timeouts stops the T3 timer
for the initial active path, leaving all the other in-flight
chunks waiting forever or until a new chunk is transmitted on the
same path and timeouts (and this will happen only if the cwnd
allows sending new chunks, but since cwnd was dropped to MTU by
the timeout => it will wait until the first heartbeat).

Example: 10 packets in flight, sent at 0.1 s intervals on the
primary path. The primary path is down and the first packet
timeouts. The first packet is retransmitted on another path, the
T3 timer for the primary path is stopped and cwnd is set to MTU.
All the other 9 in-flight packets will not be retransmitted
(unless more new packets are sent on the primary path which depend
on cwnd allowing it, and even in this case the 9 packets will be
retransmitted only after a new packet timeouts which even in the
best case would be more then RTO).

This commit reverts d0ce92910b and
also removes the now unused transport->last_rto, introduced in
 b6157d8e03.

p.s  The problem is not only when multiple paths are there.  It
can happen in a single homed environment.  If the application
stops sending data, it possible to have a hung association.

Signed-off-by: Andrei Pelinescu-Onciul <andrei@iptel.org>
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2009-11-29 00:14:02 -08:00
..
auth.h [SCTP]: Stop claiming that this is a "reference implementation" 2008-02-05 10:59:07 -05:00
checksum.h sctp: Clean up sctp checksumming code 2009-02-16 00:03:10 -08:00
command.h sctp: Send user messages to the lower layer as one 2009-09-04 18:20:57 -04:00
constants.h sctp: Sysctl configuration for IPv4 Address Scoping 2009-09-04 18:21:01 -04:00
sctp.h sctp: Fix SCTP_MAXSEG socket option to comply to spec. 2009-09-04 18:21:00 -04:00
sm.h sctp: Fix to handle SHUTDOWN in SHUTDOWN_RECEIVED state 2008-10-23 01:01:18 -07:00
structs.h sctp: on T3_RTX retransmit all the in-flight chunks 2009-11-29 00:14:02 -08:00
tsnmap.h sctp: shrink sctp_tsnmap some more by removing gabs array 2008-10-08 14:19:01 -07:00
ulpevent.h [SCTP]: Fix compiler warning about const qualifiers 2008-04-12 18:40:06 -07:00
ulpqueue.h [SCTP]: Stop claiming that this is a "reference implementation" 2008-02-05 10:59:07 -05:00
user.h sctp: remove unused union (sctp_cmsg_data_t) definition 2009-09-04 18:20:55 -04:00