NAME

  InitCwndUnderFastRetran2.seq - Verify that cwnd is update correctly when T3-rtx timer expires on an address


PURPOSE

  To check that cwnd is update correctly after a fast retransmit 
  and T3-rtx timer expires on an address.


SYNOPSIS

  ./InitCwndUnderFastRetran2.seq [-tooloption ...] -pkt ./InitCwndUnderFastRetran2.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
  Don't Send SACK  
                  <----------------       DATA 5
  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
  Don't Send SACK  
                  <----------------       DATA 2 (T3-rtx timer expires)
  SACK            ----------------->
  (For all DATAs)
                  <----------------       DATA 6
  SACK            ----------------->
  TEST DESCRIPTION:
  1. Check A: the initial cwnd before DATA transmission is set to 4380.
  2. From endpoint B, send valid DATA message 5 times to endpoint A,
     when there is association between them.
  3. From endpoint A, send SACK of the first 2 DATA messages to 
     endpoint B.
  4. Check B: Congestion control window is 5880 now.
  5. From endpoint A, send SACK of the 1st, 3rd DATA messages to 
     endpoint B, report the 2nd message is missing.
  6. From endpoint A, send SACK of the 1st, 3rd and 4th DATA messages
     to endpoint B, report the 2nd message is missing.
  7. From endpoint A, send SACK of the 1st, 3rd to 5th DATA messages
     to endpoint B, report the 2nd message is missing.
  8. Check C: The 2nd DATA messages is send again immediately.
  9. Check D: Congestion control window is 6000 now.
  10.Don't send SACK, let T3-rtx timer of DATA2 expires.
  11.The 2nd DATA messages is send again, send SACK of all DATA to
     endpoint B.
  12.Check E: Congestion control window is 1500 now.
  13.Received and SACK the rest DATA messages.


NOTE

  None


REFERENCE

  RFC 4960
  7.2.3.  Congestion Control
    Upon detection of packet losses from SACK (see Section 7.2.4), an
    endpoint should do the following:
      ssthresh = max(cwnd/2, 4*MTU)
      cwnd = ssthresh
      partial_bytes_acked = 0
    Basically, a packet loss causes cwnd to be cut in half.
    When the T3-rtx timer expires on an address, SCTP should perform slow
    start by:
      ssthresh = max(cwnd/2, 4*MTU)
      cwnd = 1*MTU
    and ensure that no more than one SCTP packet will be in flight for
    that address until the endpoint receives acknowledgement for
    successful delivery of data to that address.