Hi all,

When 3 dupacks are received and TCP enter fast recovery, if SACK is
used, the CWND is set to maxseg:

2593                     if (tp->t_flags & TF_SACK_PERMIT) {
2594                         TCPSTAT_INC(
2595                             tcps_sack_recovery_episode);
2596                         tp->snd_recover = tp->snd_nxt;
2597                         tp->snd_cwnd = maxseg;
2598                         (void) tp->t_fb->tfb_tcp_output(tp);
2599                         goto drop;
2600                     }

Otherwise(SACK is not in use), CWND is set to maxseg before
tcp_output() and then set back to snd_ssthresh+inflation
2601                     tp->snd_nxt = th->th_ack;
2602                     tp->snd_cwnd = maxseg;
2603                     (void) tp->t_fb->tfb_tcp_output(tp);
2604                     KASSERT(tp->snd_limited <= 2,
2605                         ("%s: tp->snd_limited too big",
2606                         __func__));
2607                     tp->snd_cwnd = tp->snd_ssthresh +
2608                          maxseg *
2609                          (tp->t_dupacks - tp->snd_limited);
2610                     if (SEQ_GT(onxt, tp->snd_nxt))
2611                         tp->snd_nxt = onxt;
2612                     goto drop;

I'm wondering in the SACK case, should CWND be set back to
ssthresh(which has been slashed in cc_cong_signal() a few lines above)
before line 2599, like non-SACK case, instead of doing slow start from
maxseg?
I read rfc6675 and a few others, and it looks like that's the case. I
appreciate your opinion, again.

Thanks,
Liang
_______________________________________________
freebsd-net@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to