Skip to content

Commit

Permalink
[TCP] Westwood: fix first sample
Browse files Browse the repository at this point in the history
Need to update send sequence number tracking after first ack.
Rework of patch from Luca De Cicco.

Signed-off-by: Stephen Hemminger <shemminger@dxpl.pdx.osdl.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Stephen Hemminger authored and David S. Miller committed Jun 18, 2006
1 parent bdeb04c commit f61e290
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion net/ipv4/tcp_westwood.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ struct westwood {
u32 accounted;
u32 rtt;
u32 rtt_min; /* minimum observed RTT */
u8 first_ack; /* flag which infers that this is the first ack */
};


Expand Down Expand Up @@ -52,6 +53,7 @@ static void tcp_westwood_init(struct sock *sk)
w->rtt_min = w->rtt = TCP_WESTWOOD_INIT_RTT;
w->rtt_win_sx = tcp_time_stamp;
w->snd_una = tcp_sk(sk)->snd_una;
w->first_ack = 1;
}

/*
Expand Down Expand Up @@ -91,6 +93,15 @@ static void westwood_update_window(struct sock *sk)
struct westwood *w = inet_csk_ca(sk);
s32 delta = tcp_time_stamp - w->rtt_win_sx;

/* Initialise w->snd_una with the first acked sequence number in order
* to fix mismatch between tp->snd_una and w->snd_una for the first
* bandwidth sample
*/
if (w->first_ack) {
w->snd_una = tcp_sk(sk)->snd_una;
w->first_ack = 0;
}

/*
* See if a RTT-window has passed.
* Be careful since if RTT is less than
Expand Down Expand Up @@ -180,7 +191,7 @@ static void tcp_westwood_event(struct sock *sk, enum tcp_ca_event event)
{
struct tcp_sock *tp = tcp_sk(sk);
struct westwood *w = inet_csk_ca(sk);

switch(event) {
case CA_EVENT_FAST_ACK:
westwood_fast_bw(sk);
Expand Down

0 comments on commit f61e290

Please sign in to comment.