Subject: [tcpm] Regarding sack scoreboard cleanup (rfc6675)

From: hiren panchasara <[email-masked]>
Date: Wed, 21 Oct 2015 14:06:13 -0700

(My first ask/question on the mailing list so let me know if this should
be directed somewhere else.)

I am working on FreeBSD tcp stack and started looking into sack processing.
Trying to understand when/how scoreboard should be cleared when we exit
loss recovery.

rfc6675 section '5. Algorithm Details' talks about handling each
arriving ACK:

(A) An incoming cumulative ACK for a sequence number greater than
    RecoveryPoint signals the end of loss recovery, and the loss
    recovery phase MUST be terminated.  Any information contained in
    the scoreboard for sequence numbers greater than the new value of
    HighACK SHOULD NOT be cleared when leaving the loss recovery
    phase.

First question: Should this say 'greater than or equal to RecoveryPoint'
instead of 'greater than RecoveryPoint'?

Another thing I do not understand is how could a scoreboard have information
for sequence numbers grater than the new value of HighACK in this case
when cumulative ACK is covering all the holes (as we are exiting
recovery).

I might be blindsided by just looking at FreeBSD stack or might be
missing something basic in how sack works. In any case, insights would
be useful.

Cheers,
Hiren

---

From: Yuchung Cheng <[email-masked]>
Date: Wed, 21 Oct 2015 15:34:43 -0700

> instead of 'greater than RecoveryPoint'?
The RFC is a bit vague. If "An incoming cumulative ACK for a sequence
number" means the ACK sequence, then current RFC is correct. If it
means the highest sequence that's acked, then it should be >=.

> when cumulative ACK is covering all the holes (as we are exiting

This is possible and fairly common. Since HighACK is set upon entering
recovery, and you can send new data during the fast recovery (i.e.,
step (2) in the NextSeg() function). If some of those but not all get
lost, you get ACKs with SACK blocks beyond HighACK.

In Linux, when this happens, it'll start another fast recovery and
reduce ssthresh again if CC is reno/cubic.

> _______________________________________________
> tcpm mailing list
> [email-masked]
> https://www.ietf.org/mailman/listinfo/tcpm
>

---

From: hiren panchasara <[email-masked]>
Date: Thu, 22 Oct 2015 01:07:54 -0700

> means the highest sequence that's acked, then it should be >=.
Okay.
> lost, you get ACKs with SACK blocks beyond HighACK.
Okay, I missed the part where HighACK is not being reset as it enters
recovery the second time.
> reduce ssthresh again if CC is reno/cubic.

Thank you!

Cheers,
Hiren