NAME

  AckMultiDataChunks.seq - SACK containing Cumulative TSN greater than the Cumulative TSN Ack point (ACK multiple DATA chunks)


PURPOSE

  To check that if SACK containing Cumulative TSN Ack is greater than
  the Cumulative TSN Ack Point, then the SACK can be accept to acknowledge
  multiple DATA chunks.


SYNOPSIS

  ./AckMultiDataChunks.seq [-tooloption ...] -pkt ./AckMultiDataChunks.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 A such that SACK containing Cumulative TSN greater than
  the Cumulative TSN Ack point is sent to endpoint A.


TEST PROCEDURE

  Endpoint A                           Endpoint B                ULP
  (ESTABLISHED)                        (ESTABLISHED)
                                                   <-----    Send
                <----------------       DATA 1
                <----------------       DATA 2
  SACK          ---------------->
  (containing Cumulative TSN greater than the Cumulative TSN Ack point)
  TEST DESCRIPTION:
  1. From endpoint B, send valid DATA messages to endpoint A,
     when there is association between them.
  2. From endpoint A, send SACK which containing Cumulative
     TSN greater than the Cumulative TSN Ack point to acknowledge
     multiple DATA chunks.
  3. Check A: SACK message is accept.


NOTE

  None


REFERENCE

  RFC 4960
  6.2.1.  Processing a Received SACK
    An endpoint SHOULD use the following rules to calculate the rwnd,
    using the a_rwnd value, the Cumulative TSN Ack, and Gap Ack Blocks in
    a received SACK.
    A) At the establishment of the association, the endpoint initializes
       the rwnd to the Advertised Receiver Window Credit (a_rwnd) the
       peer specified in the INIT or INIT ACK.
    B) Any time a DATA chunk is transmitted (or retransmitted) to a peer,
       the endpoint subtracts the data size of the chunk from the rwnd of
       that peer.
    C) Any time a DATA chunk is marked for retransmission, either via
       T3-rtx timer expiration (Section 6.3.3) or via Fast Retransmit
       (Section 7.2.4), add the data size of those chunks to the rwnd.
       Note: If the implementation is maintaining a timer on each DATA
       chunk, then only DATA chunks whose timer expired would be marked
       for retransmission.
    D) Any time a SACK arrives, the endpoint performs the following:
        i)  If Cumulative TSN Ack is less than the Cumulative TSN Ack
            Point, then drop the SACK.  Since Cumulative TSN Ack is
            monotonically increasing, a SACK whose Cumulative TSN Ack is
            less than the Cumulative TSN Ack Point indicates an out-of-
            order SACK.
        ii) Set rwnd equal to the newly received a_rwnd minus the number
            of bytes still outstanding after processing the Cumulative
            TSN Ack and the Gap Ack Blocks.
       iii) If the SACK is missing a TSN that was previously acknowledged
            via a Gap Ack Block (e.g., the data receiver reneged on the
            data), then consider the corresponding DATA that might be
            possibly missing: Count one miss indication towards Fast
            Retransmit as described in Section 7.2.4, and if no
            retransmit timer is running for the destination address to
            which the DATA chunk was originally transmitted, then T3-rtx
            is started for that destination address.
        iv) If the Cumulative TSN Ack matches or exceeds the Fast
            Recovery exitpoint (Section 7.2.4), Fast Recovery is exited.