Changeset View
Changeset View
Standalone View
Standalone View
head/sys/netinet/tcp_sack.c
Show First 20 Lines • Show All 363 Lines • ▼ Show 20 Lines | if (SEQ_LT(tp->snd_una, th_ack) && !TAILQ_EMPTY(&tp->snd_holes)) { | ||||
sack_blocks[num_sack_blks].start = tp->snd_una; | sack_blocks[num_sack_blks].start = tp->snd_una; | ||||
sack_blocks[num_sack_blks++].end = th_ack; | sack_blocks[num_sack_blks++].end = th_ack; | ||||
} | } | ||||
/* | /* | ||||
* Append received valid SACK blocks to sack_blocks[], but only if we | * Append received valid SACK blocks to sack_blocks[], but only if we | ||||
* received new blocks from the other side. | * received new blocks from the other side. | ||||
*/ | */ | ||||
if (to->to_flags & TOF_SACK) { | if (to->to_flags & TOF_SACK) { | ||||
tp->sackhint.sacked_bytes = 0; /* reset */ | |||||
for (i = 0; i < to->to_nsacks; i++) { | for (i = 0; i < to->to_nsacks; i++) { | ||||
bcopy((to->to_sacks + i * TCPOLEN_SACK), | bcopy((to->to_sacks + i * TCPOLEN_SACK), | ||||
&sack, sizeof(sack)); | &sack, sizeof(sack)); | ||||
sack.start = ntohl(sack.start); | sack.start = ntohl(sack.start); | ||||
sack.end = ntohl(sack.end); | sack.end = ntohl(sack.end); | ||||
if (SEQ_GT(sack.end, sack.start) && | if (SEQ_GT(sack.end, sack.start) && | ||||
SEQ_GT(sack.start, tp->snd_una) && | SEQ_GT(sack.start, tp->snd_una) && | ||||
SEQ_GT(sack.start, th_ack) && | SEQ_GT(sack.start, th_ack) && | ||||
SEQ_LT(sack.start, tp->snd_max) && | SEQ_LT(sack.start, tp->snd_max) && | ||||
SEQ_GT(sack.end, tp->snd_una) && | SEQ_GT(sack.end, tp->snd_una) && | ||||
SEQ_LEQ(sack.end, tp->snd_max)) | SEQ_LEQ(sack.end, tp->snd_max)) { | ||||
sack_blocks[num_sack_blks++] = sack; | sack_blocks[num_sack_blks++] = sack; | ||||
tp->sackhint.sacked_bytes += | |||||
(sack.end-sack.start); | |||||
} | |||||
} | } | ||||
} | } | ||||
/* | /* | ||||
* Return if SND.UNA is not advanced and no valid SACK block is | * Return if SND.UNA is not advanced and no valid SACK block is | ||||
* received. | * received. | ||||
*/ | */ | ||||
if (num_sack_blks == 0) | if (num_sack_blks == 0) | ||||
return; | return; | ||||
▲ Show 20 Lines • Show All 296 Lines • Show Last 20 Lines |