Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_reass.c
Show First 20 Lines • Show All 953 Lines • ▼ Show 20 Lines | if (th->th_seq == tp->rcv_nxt && TCPS_HAVEESTABLISHED(tp->t_state)) { | ||||
TCPSTAT_INC(tcps_rcvoopack); | TCPSTAT_INC(tcps_rcvoopack); | ||||
TCPSTAT_ADD(tcps_rcvoobyte, *tlenp); | TCPSTAT_ADD(tcps_rcvoobyte, *tlenp); | ||||
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); | ||||
} | } | ||||
SOCKBUF_UNLOCK(&so->so_rcv); | |||||
tp->t_flags |= TF_WAKESOR; | tp->t_flags |= TF_WAKESOR; | ||||
tp->cl4_spare = 11; | |||||
return (flags); | return (flags); | ||||
} | } | ||||
if (tcp_new_limits) { | if (tcp_new_limits) { | ||||
if ((tp->t_segqlen > tcp_reass_queue_guard) && | if ((tp->t_segqlen > tcp_reass_queue_guard) && | ||||
(*tlenp < MSIZE)) { | (*tlenp < MSIZE)) { | ||||
/* | /* | ||||
* This is really a lie, we are not full but | * This is really a lie, we are not full but | ||||
* are getting a segment that is above | * are getting a segment that is above | ||||
▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | #ifdef TCP_REASS_LOGGING | ||||
} | } | ||||
#endif | #endif | ||||
tp->t_segqmbuflen = 0; | tp->t_segqmbuflen = 0; | ||||
#endif | #endif | ||||
} | } | ||||
#ifdef TCP_REASS_LOGGING | #ifdef TCP_REASS_LOGGING | ||||
tcp_reass_log_dump(tp); | tcp_reass_log_dump(tp); | ||||
#endif | #endif | ||||
SOCKBUF_UNLOCK(&so->so_rcv); | |||||
tp->t_flags |= TF_WAKESOR; | tp->t_flags |= TF_WAKESOR; | ||||
tp->cl4_spare = 12; | |||||
return (flags); | return (flags); | ||||
} | } |