NAME

  UsedCongestAvoid.seq - Increase cwnd by MTU when partial_bytes_acked is equal to or greater than cwnd


PURPOSE

  To verify that When partial_bytes_acked is equal to or greater than
  cwnd and before the arrival of the SACK the sender had cwnd or more
  bytes of data outstanding (i.e., before arrival of the SACK, flightsize
  was greater than or equal to cwnd), increase cwnd by MTU, and reset
  partial_bytes_acked to (partial_bytes_acked - cwnd).


SYNOPSIS

  ./UsedCongestAvoid.seq [-tooloption ...] -pkt ./UsedCongestAvoid.def
    -tooloption : v6eval tool option
  See Also: ../common/STD_PKT_COMMON.def
            ../common/SCTP_COMMON.def


PRE-TEST CONDITION

  Association is established between endpoint A and B. Arrange data 
  in endpoint B such that messages is sent to endpoint A.


TEST PROCEDURE

  Endpoint A                           Endpoint B                ULP
  (ESTABLISHED)                        (ESTABLISHED)
                                                  <-----    Send
                  <----------------       DATA 1
  Don't Send SACK  
                  <----------------       DATA 2
  Don't Send SACK  
                  <----------------       DATA 3
  Don't Send SACK  
                  <----------------       DATA 4
  SACK            ----------------->
  (For DATA 1)
                  <----------------       DATA 5
  Don't Send SACK  
                  <----------------       DATA 6
  Don't Send SACK  
  SACK            ----------------->
  (For DATA 1 and DATA 2)
  SACK            ----------------->
  (For DATA 1 and DATA 3, report DATA 2 is missing)
  SACK            ----------------->
  (For DATA 1, DATA 3 and DATA 4, report DATA 2 is missing)
  SACK            ----------------->
  (For DATA 1, DATA 3 to DATA 5, report DATA 2 is missing)
                  <----------------       DATA 2
 
                  <----------------       DATA 7
 
  SACK            ----------------->
  (For all DATAs)
  DATA            ----------------->
                  <----------------       SACK
                  <----------------       DATA 1
  Don't Send SACK  
                  <----------------       DATA 2
  Don't Send SACK  
                  <----------------       DATA 3
  Don't Send SACK  
                  <----------------       DATA 4
  Don't Send SACK  
                  <----------------       DATA 5
  SACK            ----------------->
  (For DATA 1 and DATA2)
  DATA            ----------------->
                  <----------------       SACK
                  <----------------       DATA 6
                  <----------------       DATA 7
  SACK            ----------------->
  (For all DATAs)
                  <----------------       DATA 1
  Don't Send SACK  
                  <----------------       DATA 2
  Don't Send SACK  
                  <----------------       DATA 3
  Don't Send SACK  
                  <----------------       DATA 4
  Don't Send SACK  
                  <----------------       DATA 5
  Don't Send SACK  
                  <----------------       DATA 6
  SACK            ----------------->
  (For DATA 1)
  DATA            ----------------->
                  <----------------       SACK
                  <----------------       DATA 7
  SACK            ----------------->
  (For all DATAs)
                  <----------------       DATA 1
  Don't Send SACK  
                  <----------------       DATA 2
  Don't Send SACK  
                  <----------------       DATA 3
  Don't Send SACK  
                  <----------------       DATA 4
  Don't Send SACK  
                  <----------------       DATA 5
  Don't Send SACK  
                  <----------------       DATA 6
  Don't Send SACK  
                  <----------------       DATA 7
  SACK            ----------------->
  (For all DATAs)
  TEST DESCRIPTION:
  1. Check A: the initial cwnd before DATA transmission is set to 4380.
  2. From endpoint B, send valid DATA message 4 times to endpoint A,
     when there is association between them.
  3. From endpoint A, send SACK of the first DATA message to 
     endpoint B.
  4. Check B: Congestion control window is increased by DATA size.
  5. From endpoint A, receive DATA message 2 times.
  6. From endpoint A, send SACK of the 1st, 3rd DATA messages to 
     endpoint B, report the 2nd message is missing.
  7. From endpoint A, send SACK of the 1st, 3rd and 4th DATA messages
     to endpoint B, report the 2nd message is missing.
  8. From endpoint A, send SACK of the 1st, 3rd to 5th DATA messages
     to endpoint B, report the 2nd message is missing.
  9. Check C: The 2nd DATA messages is send again immediately.
  10.Check D: Congestion control window is 6000 now.
  11.Send SACK of all DATA to endpoint B.
  12.From endpoint A, Send DATA message to endpoint and receive SACK.
  13.From endpoint A, receive DATA message 5 times.
  14.Send SACK of first two messages.
  15.Check E: Congestion control window is 7500 now.
  16.From endpoint A, Send DATA message to endpoint and receive SACK.
  17.Receive DATA message 2 times and send SACK of above DATA messages.
  18.From endpoint A, receive DATA message 6 times.
  19.Send SACK of first DATA messages, Send DATA message to endpoint
     and receive SACK.
  20.From endpoint A, receive DATA message 1 times and send SACK of 
     above DATA messages.
  21.Check E: Congestion control window is 9000 now.
  22.From endpoint A, receive DATA message 7 times.
  23.Send SACK of all the above DATA messages.
  21.Check F: Congestion control window is 10500 now.


NOTE

  None


REFERENCE

  RFC 4960
  7.2.2.  Congestion Avoidance
    When cwnd is greater than ssthresh, cwnd should be incremented by
    1*MTU per RTT if the sender has cwnd or more bytes of data
    outstanding for the corresponding transport address.
    In practice, an implementation can achieve this goal in the following
    way:
    o  partial_bytes_acked is initialized to 0.
    o  Whenever cwnd is greater than ssthresh, upon each SACK arrival
       that advances the Cumulative TSN Ack Point, increase
       partial_bytes_acked by the total number of bytes of all new chunks
       acknowledged in that SACK including chunks acknowledged by the new
       Cumulative TSN Ack and by Gap Ack Blocks.
    o  When partial_bytes_acked is equal to or greater than cwnd and
       before the arrival of the SACK the sender had cwnd or more bytes
       of data outstanding (i.e., before arrival of the SACK, flightsize
       was greater than or equal to cwnd), increase cwnd by MTU, and
       reset partial_bytes_acked to (partial_bytes_acked - cwnd).
    o  Same as in the slow start, when the sender does not transmit DATA
       on a given transport address, the cwnd of the transport address
       should be adjusted to max(cwnd / 2, 4*MTU) per RTO.
    o  When all of the data transmitted by the sender has been
       acknowledged by the receiver, partial_bytes_acked is initialized
       to 0.