• Andrei Pelinescu-Onciul's avatar
    sctp: on T3_RTX retransmit all the in-flight chunks · 5fdd4bae
    Andrei Pelinescu-Onciul authored
    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 d0ce9291 and
    also removes the now unused transport->last_rto, introduced in
     b6157d8e.
    
    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: default avatarAndrei Pelinescu-Onciul <andrei@iptel.org>
    Signed-off-by: default avatarVlad Yasevich <vladislav.yasevich@hp.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5fdd4bae
transport.c 18.7 KB