Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/tcp_input.c
Show First 20 Lines • Show All 1,835 Lines • ▼ Show 20 Lines | #endif | ||||
* nothing on the reassembly queue and we have enough | * nothing on the reassembly queue and we have enough | ||||
* buffer space to take it. | * buffer space to take it. | ||||
*/ | */ | ||||
/* Clean receiver SACK report if present */ | /* Clean receiver SACK report if present */ | ||||
if ((tp->t_flags & TF_SACK_PERMIT) && tp->rcv_numsacks) | if ((tp->t_flags & TF_SACK_PERMIT) && tp->rcv_numsacks) | ||||
tcp_clean_sackreport(tp); | tcp_clean_sackreport(tp); | ||||
TCPSTAT_INC(tcps_preddat); | TCPSTAT_INC(tcps_preddat); | ||||
tp->rcv_nxt += tlen; | tp->rcv_nxt += tlen; | ||||
if (tlen && | |||||
((tp->t_flags2 & TF2_FBYTES_COMPLETE) == 0) && | |||||
(tp->t_fbyte_in == 0)) { | |||||
tp->t_fbyte_in = ticks; | |||||
if (tp->t_fbyte_in == 0) | |||||
tp->t_fbyte_in = 1; | |||||
if (tp->t_fbyte_out && tp->t_fbyte_in) | |||||
tp->t_flags2 |= TF2_FBYTES_COMPLETE; | |||||
} | |||||
/* | /* | ||||
* Pull snd_wl1 up to prevent seq wrap relative to | * Pull snd_wl1 up to prevent seq wrap relative to | ||||
* th_seq. | * th_seq. | ||||
*/ | */ | ||||
tp->snd_wl1 = th->th_seq; | tp->snd_wl1 = th->th_seq; | ||||
/* | /* | ||||
* Pull rcv_up up to prevent seq wrap relative to | * Pull rcv_up up to prevent seq wrap relative to | ||||
* rcv_nxt. | * rcv_nxt. | ||||
▲ Show 20 Lines • Show All 1,159 Lines • ▼ Show 20 Lines | if (th->th_seq == tp->rcv_nxt && | ||||
SEGQ_EMPTY(tp) && | 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) | ||||
tp->t_flags |= TF_DELACK; | tp->t_flags |= TF_DELACK; | ||||
else | else | ||||
tp->t_flags |= TF_ACKNOW; | tp->t_flags |= TF_ACKNOW; | ||||
tp->rcv_nxt += tlen; | tp->rcv_nxt += tlen; | ||||
if (tlen && | |||||
((tp->t_flags2 & TF2_FBYTES_COMPLETE) == 0) && | |||||
(tp->t_fbyte_in == 0)) { | |||||
tp->t_fbyte_in = ticks; | |||||
if (tp->t_fbyte_in == 0) | |||||
tp->t_fbyte_in = 1; | |||||
if (tp->t_fbyte_out && tp->t_fbyte_in) | |||||
tp->t_flags2 |= TF2_FBYTES_COMPLETE; | |||||
} | |||||
thflags = th->th_flags & TH_FIN; | thflags = th->th_flags & TH_FIN; | ||||
TCPSTAT_INC(tcps_rcvpack); | TCPSTAT_INC(tcps_rcvpack); | ||||
TCPSTAT_ADD(tcps_rcvbyte, tlen); | TCPSTAT_ADD(tcps_rcvbyte, tlen); | ||||
SOCKBUF_LOCK(&so->so_rcv); | SOCKBUF_LOCK(&so->so_rcv); | ||||
if (so->so_rcv.sb_state & SBS_CANTRCVMORE) | if (so->so_rcv.sb_state & SBS_CANTRCVMORE) | ||||
m_freem(m); | m_freem(m); | ||||
else | else | ||||
sbappendstream_locked(&so->so_rcv, m, 0); | sbappendstream_locked(&so->so_rcv, m, 0); | ||||
▲ Show 20 Lines • Show All 842 Lines • Show Last 20 Lines |