• Gerrit Renker's avatar
    dccp ccid-2: Perform congestion-window validation · 113ced1f
    Gerrit Renker authored
    CCID-2's cwnd increases like TCP during slow-start, which has implications for
     * the local Sequence Window value (should be > cwnd),
     * the Ack Ratio value.
    Hence an exponential growth, if it does not reflect the actual network
    conditions, can quickly lead to instability.
    
    This patch adds congestion-window validation (RFC2861) to CCID-2:
     * cwnd is constrained if the sender is application limited;
     * cwnd is reduced after a long idle period, as suggested in the '90 paper
       by Van Jacobson, in RFC 2581 (sec. 4.1);
     * cwnd is never reduced below the RFC 3390 initial window.
    
    As marked in the comments, the code is actually almost a direct copy of the
    TCP congestion-window-validation algorithms. By continuing this work, it may
    in future be possible to use the TCP code (not possible at the moment).
    
    The mechanism can be turned off using a module parameter. Sampling of the
    currently-used window (moving-maximum) is however done constantly; this is
    used to determine the expected window, which can be exploited to regulate
    DCCP's Sequence Window value.
    
    This patch also sets slow-start-after-idle (RFC 4341, 5.1), i.e. it behaves like
    TCP when net.ipv4.tcp_slow_start_after_idle = 1.
    Signed-off-by: default avatarGerrit Renker <gerrit@erg.abdn.ac.uk>
    113ced1f
ccid2.c 21.3 KB