Home | History | Annotate | Download | only in netinet

Lines Matching defs:sack

157 /* SACK block pool. */
237 * tcp_sack_option: parse the given SACK option and update the scoreboard.
246 struct sackblk *sack = NULL;
254 * If we aren't processing SACK responses, this is not an ACK
255 * or the peer sends us a sack option with invalid length, don't
264 * If we don't want any SACK holes to be allocated, just return.
270 /* If the ACK is outside [snd_una, snd_max], ignore the SACK options. */
275 * Extract SACK blocks.
278 * one pass over the sequence number space. (SACK "fast-path")
290 /* SACK entry that's old, or invalid. */
309 sack = &t_sack_block[i];
314 if (SEQ_GEQ(sack->right, tp->snd_fack))
315 tp->snd_fack = sack->right;
319 cur = sack_inserthole(tp, th->th_ack, sack->left, NULL);
324 tp->rcv_lastsack = sack->right;
325 continue; /* With next sack block */
330 if (SEQ_LEQ(sack->right, cur->start))
334 if (SEQ_GEQ(sack->left, cur->end)) {
340 if (SEQ_LEQ(sack->left, cur->start)) {
342 if (SEQ_GEQ(sack->right, cur->end)) {
349 cur->start = sack->right;
354 if (SEQ_GEQ(sack->right, cur->end)) {
356 cur->end = sack->left;
362 if (SEQ_LT(cur->start, sack->left) &&
363 SEQ_GT(cur->end, sack->right)) {
368 tmp = sack_inserthole(tp, sack->right, cur->end,
374 cur->end = sack->left;
382 if (SEQ_LT(tp->rcv_lastsack, sack->left)) {
386 cur = sack_inserthole(tp, tp->rcv_lastsack, sack->left,
392 if (SEQ_LT(tp->rcv_lastsack, sack->right)) {
393 tp->rcv_lastsack = sack->right;
430 struct sackhole *sack;
432 /* Free up the SACK hole list. */
433 while ((sack = TAILQ_FIRST(&tp->snd_holes)) != NULL) {
434 sack_removehole(tp, sack);
455 /* old SACK hole */
468 * After a timeout, the SACK list may be rebuilt. This SACK information
470 * traverses the SACK list to see if snd_nxt should be moved forward.
506 * tcp_sack_numblks: return the number of SACK blocks to send.