Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_sack.c
Show First 20 Lines • Show All 232 Lines • ▼ Show 20 Lines | tcp_update_dsack_list(struct tcpcb *tp, tcp_seq rcv_start, tcp_seq rcv_end) | ||||
for (j = 0; (j < tp->rcv_numsacks) && (n < MAX_SACK_BLKS); j++) { | for (j = 0; (j < tp->rcv_numsacks) && (n < MAX_SACK_BLKS); j++) { | ||||
if (((SEQ_LT(tp->sackblks[j].end, mid_blk.start) || | if (((SEQ_LT(tp->sackblks[j].end, mid_blk.start) || | ||||
SEQ_GT(tp->sackblks[j].start, mid_blk.end)) && | SEQ_GT(tp->sackblks[j].start, mid_blk.end)) && | ||||
(SEQ_GT(tp->sackblks[j].start, tp->rcv_nxt)))) | (SEQ_GT(tp->sackblks[j].start, tp->rcv_nxt)))) | ||||
saved_blks[n++] = tp->sackblks[j]; | saved_blks[n++] = tp->sackblks[j]; | ||||
} | } | ||||
j = 0; | j = 0; | ||||
for (i = 0; i < n; i++) { | for (i = 0; i < n; i++) { | ||||
/* we can end up with a stale inital entry */ | /* we can end up with a stale initial entry */ | ||||
if (SEQ_LT(saved_blks[i].start, saved_blks[i].end)) { | if (SEQ_LT(saved_blks[i].start, saved_blks[i].end)) { | ||||
tp->sackblks[j++] = saved_blks[i]; | tp->sackblks[j++] = saved_blks[i]; | ||||
} | } | ||||
} | } | ||||
tp->rcv_numsacks = j; | tp->rcv_numsacks = j; | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 637 Lines • Show Last 20 Lines |