FastRetranToGap.seq - TSN missing in SACK which was previously acknowledged by SACK in Gap Ack block
To check that 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 mark the corresponding DATA chunk as available
for retransmit.
./FastRetranToGap.seq [-tooloption ...] -pkt ./FastRetranToGap.def
-tooloption : v6eval tool option
See Also: ../common/STD_PKT_COMMON.def
../common/SCTP_COMMON.def
Association is established between endpoint A and B. Arrange data
in endpoint B such that messages is sent to endpoint A.
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
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
SACK ----------------->
(For all DATAs)
TEST DESCRIPTION:
1. From endpoint B, send valid DATA message 5 times to endpoint A,
when there is association between them.
2. From endpoint A, receive DATA message 4 times.
3. From endpoint A, send SACK of the first DATA message to
endpoint B.
4. From endpoint A, send SACK of the 1st, 3rd DATA messages to
endpoint B, report the 2nd message is missing.
5. From endpoint A, send SACK of the 1st, 3rd and 4th DATA messages
to endpoint B, report the 2nd message is missing.
6. From endpoint A, send SACK of the 1st, 3rd to 5th DATA messages
to endpoint B, report the 2nd message is missing.
7. Check A: The 2nd DATA messages is send again immediately.
8. Send SACK of all the above DATA messages.
None
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.