• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/xnu-2782.1.97/bsd/netinet/

Lines Matching refs:hole

239 	struct sackhole *hole;
247 hole = (struct sackhole *)zalloc(sack_hole_zone);
248 if (hole == NULL)
251 hole->start = start;
252 hole->end = end;
253 hole->rxmit = start;
258 return hole;
265 tcp_sackhole_free(struct tcpcb *tp, struct sackhole *hole)
267 zfree(sack_hole_zone, hole);
274 * Insert new SACK hole into scoreboard.
280 struct sackhole *hole;
282 /* Allocate a new SACK hole. */
283 hole = tcp_sackhole_alloc(tp, start, end);
284 if (hole == NULL)
286 hole->rxmit_start = tcp_now;
287 /* Insert the new SACK hole into scoreboard */
289 TAILQ_INSERT_AFTER(&tp->snd_holes, after, hole, scblink);
291 TAILQ_INSERT_TAIL(&tp->snd_holes, hole, scblink);
295 tp->sackhint.nexthole = hole;
297 return hole;
301 * Remove SACK hole from scoreboard.
304 tcp_sackhole_remove(struct tcpcb *tp, struct sackhole *hole)
307 if (tp->sackhint.nexthole == hole)
308 tp->sackhint.nexthole = TAILQ_NEXT(hole, scblink);
310 /* Remove this SACK hole. */
311 TAILQ_REMOVE(&tp->snd_holes, hole, scblink);
313 /* Free this SACK hole. */
314 tcp_sackhole_free(tp, hole);
329 * If the SACK hole is past snd_fack, this is from new SACK
344 * if recently sacked data was never retransmitted from this hole.
476 * Append new SACK hole at the tail.
479 * way of hole splitting in the while-loop below.
490 * We failed to add a new hole based on the current
511 /* We must have at least one SACK hole in scoreboard */
512 cur = TAILQ_LAST(&tp->snd_holes, sackhole_head); /* Last SACK hole */
520 * SACKs data beyond the current hole.
528 * SACKs data before the current hole.
529 * Go to the previous hole.
536 /* Data acks at least the beginning of hole */
538 /* Acks entire hole, so delete hole */
548 * hole too, so continue onto the next hole.
552 /* Move start of hole forward */
560 /* Data acks at least the end of hole */
562 /* Move end of hole backward */
570 * ACKs some data in the middle of a hole;
571 * need to split current hole
590 * the current hole as that will
601 * we're done with the sack block or the sack hole.
670 if (SEQ_LT(p->rxmit, tp->snd_una)) {/* old SACK hole */
682 * Returns the next hole to retransmit and the number of retransmitted bytes
683 * from the scoreboard. We store both the next hole and the number of
688 * For the loop to traverse more than 1 link before finding the next hole to
694 * But that can't happen, (start == end) means that all the data in that hole
695 * has been sacked, in which case, the hole would have been removed from the
701 struct sackhole *hole = NULL, *dbg_hole = NULL;
706 hole = tp->sackhint.nexthole;
707 if (hole == NULL || SEQ_LT(hole->rxmit, hole->end))
709 while ((hole = TAILQ_NEXT(hole, scblink)) != NULL) {
710 if (SEQ_LT(hole->rxmit, hole->end)) {
711 tp->sackhint.nexthole = hole;
716 if (dbg_hole != hole) {
717 printf("%s: Computed sack hole not the same as cached value\n", __func__);
718 hole = dbg_hole;
726 return (hole);
745 * i) snd_nxt lies between end of one hole and beginning of another
746 * ii) snd_nxt lies between end of last hole and snd_fack