• Lawrence Stewart's avatar
    Add support for the experimental Internet-Draft "TCP Alternative Backoff with · 370efe5a
    Lawrence Stewart authored
    ECN (ABE)" proposal to the New Reno congestion control algorithm module.
    ABE reduces the amount of congestion window reduction in response to
    ECN-signalled congestion relative to the loss-inferred congestion response.
    
    More details about ABE can be found in the Internet-Draft:
    https://tools.ietf.org/html/draft-ietf-tcpm-alternativebackoff-ecn
    
    The implementation introduces four new sysctls:
    
    - net.inet.tcp.cc.abe defaults to 0 (disabled) and can be set to non-zero to
      enable ABE for ECN-enabled TCP connections.
    
    - net.inet.tcp.cc.newreno.beta and net.inet.tcp.cc.newreno.beta_ecn set the
      multiplicative window decrease factor, specified as a percentage, applied to
      the congestion window in response to a loss-based or ECN-based congestion
      signal respectively. They default to the values specified in the draft i.e.
      beta=50 and beta_ecn=80.
    
    - net.inet.tcp.cc.abe_frlossreduce defaults to 0 (disabled) and can be set to
      non-zero to enable the use of standard beta (50% by default) when repairing
      loss during an ECN-signalled congestion recovery episode. It enables a more
      conservative congestion response and is provided for the purposes of
      experimentation as a result of some discussion at IETF 100 in Singapore.
    
    The values of beta and beta_ecn can also be set per-connection by way of the
    TCP_CCALGOOPT TCP-level socket option and the new CC_NEWRENO_BETA or
    CC_NEWRENO_BETA_ECN CC algo sub-options.
    
    Submitted by:	Tom Jones <tj@enoti.me>
    Tested by:	Tom Jones <tj@enoti.me>, Grenville Armitage <garmitage@swin.edu.au>
    Relnotes:	Yes
    Differential Revision:	https://reviews.freebsd.org/D11616
    370efe5a