Subject: Re: TCP/Westwood+ support.
To: Kentaro A. Kurahone <kurahone@sekhmet.sigusr1.org>
From: Charles M. Hannum <abuse@spamalicious.com>
List: tech-kern
Date: 01/03/2005 17:11:35
>  if (tp->snd_cwnd > ssthresh)
>   tp->snd_cwnd = ssthresh;
>
>  /*
>   * Do the fast retransmit.
>   */
>  tp->snd_recover = tp->snd_max;
>  TCP_TIMER_DISARM(tp, TCPT_REXMT);
>  tp->t_rtttime = 0;
>  tp->snd_nxt = th->th_ack;
>  (void) tcp_output(tp);
>  if (SEQ_GT(onxt, tp->snd_nxt))
>   tp->snd_nxt = onxt;
> }

Whoops, I'm on crack.  You do need to do the two separate settings of 
snd_cwnd, like in the Reno code, to make sure you only send one packet.  
OTOH, you certainly don't need to calculate the Reno ssthresh here, like you 
were doing.