Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/tcp_sack.c
Show First 20 Lines • Show All 774 Lines • ▼ Show 20 Lines | tcp_sack_partialack(struct tcpcb *tp, struct tcphdr *th) | ||||
INP_WLOCK_ASSERT(tp->t_inpcb); | INP_WLOCK_ASSERT(tp->t_inpcb); | ||||
tcp_timer_activate(tp, TT_REXMT, 0); | tcp_timer_activate(tp, TT_REXMT, 0); | ||||
tp->t_rtttime = 0; | tp->t_rtttime = 0; | ||||
/* Send one or 2 segments based on how much new data was acked. */ | /* Send one or 2 segments based on how much new data was acked. */ | ||||
if ((BYTES_THIS_ACK(tp, th) / tp->t_maxseg) >= 2) | if ((BYTES_THIS_ACK(tp, th) / tp->t_maxseg) >= 2) | ||||
num_segs = 2; | num_segs = 2; | ||||
tp->snd_cwnd = (tp->sackhint.sack_bytes_rexmit + | tp->snd_cwnd = (tp->sackhint.sack_bytes_rexmit + | ||||
(tp->snd_nxt - tp->sack_newdata) + num_segs * tp->t_maxseg); | (tp->snd_nxt - tp->snd_recover) + num_segs * tp->t_maxseg); | ||||
if (tp->snd_cwnd > tp->snd_ssthresh) | if (tp->snd_cwnd > tp->snd_ssthresh) | ||||
tp->snd_cwnd = tp->snd_ssthresh; | tp->snd_cwnd = tp->snd_ssthresh; | ||||
tp->t_flags |= TF_ACKNOW; | tp->t_flags |= TF_ACKNOW; | ||||
(void) tp->t_fb->tfb_tcp_output(tp); | (void) tp->t_fb->tfb_tcp_output(tp); | ||||
} | } | ||||
#if 0 | #if 0 | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 95 Lines • Show Last 20 Lines |