Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/tcp_sack.c
Show First 20 Lines • Show All 159 Lines • ▼ Show 20 Lines | tcp_update_dsack_list(struct tcpcb *tp, tcp_seq rcv_start, tcp_seq rcv_end) | ||||
struct sackblk head_blk,mid_blk,saved_blks[MAX_SACK_BLKS]; | struct sackblk head_blk,mid_blk,saved_blks[MAX_SACK_BLKS]; | ||||
int i, j, n, identical; | int i, j, n, identical; | ||||
tcp_seq start, end; | tcp_seq start, end; | ||||
INP_WLOCK_ASSERT(tp->t_inpcb); | INP_WLOCK_ASSERT(tp->t_inpcb); | ||||
KASSERT(SEQ_LT(rcv_start, rcv_end), ("rcv_start < rcv_end")); | KASSERT(SEQ_LT(rcv_start, rcv_end), ("rcv_start < rcv_end")); | ||||
if (tp->t_inpcb->inp_socket->so_options & SO_DEBUG) { | |||||
log(LOG_DEBUG, "\nDSACK update: %d..%d, rcv_nxt: %u\n", | |||||
rcv_start, rcv_end, tp->rcv_nxt); | |||||
} | |||||
if (SEQ_LT(rcv_end, tp->rcv_nxt) || | if (SEQ_LT(rcv_end, tp->rcv_nxt) || | ||||
((rcv_end == tp->rcv_nxt) && | ((rcv_end == tp->rcv_nxt) && | ||||
(tp->rcv_numsacks > 0 ) && | (tp->rcv_numsacks > 0 ) && | ||||
(tp->sackblks[0].end == tp->rcv_nxt))) { | (tp->sackblks[0].end == tp->rcv_nxt))) { | ||||
saved_blks[0].start = rcv_start; | saved_blks[0].start = rcv_start; | ||||
saved_blks[0].end = rcv_end; | saved_blks[0].end = rcv_end; | ||||
} else { | } else { | ||||
saved_blks[0].start = saved_blks[0].end = 0; | saved_blks[0].start = saved_blks[0].end = 0; | ||||
▲ Show 20 Lines • Show All 711 Lines • Show Last 20 Lines |