Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_input.c
Context not available. | |||||
tp->snd_nxt == tp->snd_max && | tp->snd_nxt == tp->snd_max && | ||||
tiwin && tiwin == tp->snd_wnd && | tiwin && tiwin == tp->snd_wnd && | ||||
((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) && | ((tp->t_flags & (TF_NEEDSYN|TF_NEEDFIN)) == 0) && | ||||
LIST_EMPTY(&tp->t_segq) && | SEGQ_EMPTY(tp) && | ||||
((to.to_flags & TOF_TS) == 0 || | ((to.to_flags & TOF_TS) == 0 || | ||||
TSTMP_GEQ(to.to_tsval, tp->ts_recent)) ) { | TSTMP_GEQ(to.to_tsval, tp->ts_recent)) ) { | ||||
Context not available. | |||||
* later; if not, do so now to pass queued data to user. | * later; if not, do so now to pass queued data to user. | ||||
*/ | */ | ||||
if (tlen == 0 && (thflags & TH_FIN) == 0) | if (tlen == 0 && (thflags & TH_FIN) == 0) | ||||
(void) tcp_reass(tp, (struct tcphdr *)0, 0, | (void) tcp_reass(tp, (struct tcphdr *)0, NULL, 0, | ||||
(struct mbuf *)0); | (struct mbuf *)0); | ||||
tp->snd_wl1 = th->th_seq - 1; | tp->snd_wl1 = th->th_seq - 1; | ||||
/* FALLTHROUGH */ | /* FALLTHROUGH */ | ||||
Context not available. | |||||
* fast retransmit can work). | * fast retransmit can work). | ||||
*/ | */ | ||||
if (th->th_seq == tp->rcv_nxt && | if (th->th_seq == tp->rcv_nxt && | ||||
LIST_EMPTY(&tp->t_segq) && | SEGQ_EMPTY(tp) && | ||||
(TCPS_HAVEESTABLISHED(tp->t_state) || | (TCPS_HAVEESTABLISHED(tp->t_state) || | ||||
tfo_syn)) { | tfo_syn)) { | ||||
if (DELAY_ACK(tp, tlen) || tfo_syn) | if (DELAY_ACK(tp, tlen) || tfo_syn) | ||||
Context not available. | |||||
* m_adj() doesn't actually frees any mbufs | * m_adj() doesn't actually frees any mbufs | ||||
* when trimming from the head. | * when trimming from the head. | ||||
*/ | */ | ||||
thflags = tcp_reass(tp, th, &tlen, m); | thflags = tcp_reass(tp, th, &save_start, &tlen, m); | ||||
tp->t_flags |= TF_ACKNOW; | tp->t_flags |= TF_ACKNOW; | ||||
} | } | ||||
if (tlen > 0 && (tp->t_flags & TF_SACK_PERMIT)) | if (tlen > 0 && (tp->t_flags & TF_SACK_PERMIT)) | ||||
Context not available. |