• Doug Graham's avatar
    sctp: Fix piggybacked ACKs · af87b823
    Doug Graham authored
    This patch corrects the conditions under which a SACK will be piggybacked
    on a DATA packet.  The previous condition was incorrect due to a
    misinterpretation of RFC 4960 and/or RFC 2960.  Specifically, the
    following paragraph from section 6.2 had not been implemented correctly:
    
       Before an endpoint transmits a DATA chunk, if any received DATA
       chunks have not been acknowledged (e.g., due to delayed ack), the
       sender should create a SACK and bundle it with the outbound DATA
       chunk, as long as the size of the final SCTP packet does not exceed
       the current MTU.  See Section 6.2.
    
    When about to send a DATA chunk, the code now checks to see if the SACK
    timer is running.  If it is, we know we have a SACK to send to the
    peer, so we append the SACK (assuming available space in the packet)
    and turn off the timer.  For a simple request-response scenario, this
    will result in the SACK being bundled with the response, meaning the
    the SACK is received quickly by the client, and also meaning that no
    separate SACK packet needs to be sent by the server to acknowledge the
    request.  Prior to this patch, a separate SACK packet would have been
    sent by the server SCTP only after its delayed-ACK timer had expired
    (usually 200ms).  This is wasteful of bandwidth, and can also have a
    major negative impact on performance due the interaction of delayed ACKs
    with the Nagle algorithm.
    Signed-off-by: default avatarDoug Graham <dgraham@nortel.com>
    Signed-off-by: default avatarVlad Yasevich <vladislav.yasevich@hp.com>
    af87b823
output.c 22 KB