sackhint
new_sacked_bytes = (tp->sackhint.last_sack_ack != 0);
ack = tp->sackhint.last_sack_ack;
tp->sackhint.last_sack_ack = 0;
tp->sackhint.sacked_bytes = 0;
tp->sackhint.delivered_data));
tp->sackhint.delivered_data));
tp->sackhint.sacked_bytes >
tp->sackhint.prr_delivered =
tp->sackhint.prr_delivered =
tp->sackhint.recover_fs = max(1,
(tp->sackhint.sacked_bytes >
tp->sackhint.delivered_data =
del_data = tp->sackhint.delivered_data;
if (tp->sackhint.prr_delivered < (tcprexmtthresh * maxseg +
tp->sackhint.prr_delivered += del_data;
if (tp->sackhint.recover_fs == 0)
tp->sackhint.recover_fs =
snd_cnt = howmany((long)tp->sackhint.prr_delivered *
tp->snd_ssthresh, tp->sackhint.recover_fs) -
tp->sackhint.prr_out + maxseg - 1;
limit = tp->sackhint.prr_delivered -
tp->sackhint.prr_out;
limit = imax(tp->sackhint.prr_delivered -
tp->sackhint.prr_out, del_data) +
tp->sackhint.sack_bytes_rexmit -
tp->sackhint.sacked_bytes -
tp->sackhint.lost_bytes;
tp->sackhint.delivered_data = 0;
tp->sackhint.prr_delivered = 0;
tp->sackhint.prr_out = 0;
tp->sackhint.sack_bytes_rexmit += len;
tp->sackhint.prr_out += len;
tp->sackhint.sack_bytes_rexmit -= len;
KASSERT(tp->sackhint.sack_bytes_rexmit >= 0,
tp->sackhint.prr_out -= len;
(tp->sackhint.nexthole != NULL) &&
tp->sackhint.hole_bytes +=
*sack_bytes_rexmt = tp->sackhint.sack_bytes_rexmit;
hole = tp->sackhint.nexthole;
tp->sackhint.nexthole = hole;
return (tp->sackhint.sacked_bytes);
return (tp->sackhint.sacked_bytes);
tp->sackhint.nexthole = temp;
tp->sackhint.recover_fs = (tp->snd_max - tp->snd_una) -
tp->sackhint.recover_fs;
if (tp->sackhint.nexthole == NULL)
tp->sackhint.nexthole = hole;
if (tp->sackhint.nexthole == hole)
tp->sackhint.nexthole = TAILQ_NEXT(hole, scblink);
tp->sackhint.last_sack_ack = sblkp->end;
tp->sackhint.hole_bytes -= temp->end - temp->start;
tp->sackhint.hole_bytes += temp->end - temp->start;
KASSERT(tp->sackhint.hole_bytes >= 0,
tp->sackhint.hole_bytes += temp->end - temp->start;
tp->sackhint.sack_bytes_rexmit -=
KASSERT(tp->sackhint.sack_bytes_rexmit >= 0,
tp->sackhint.hole_bytes -= temp->end - temp->start;
tp->sackhint.hole_bytes -= sblkp->end - cur->start;
tp->sackhint.hole_bytes -= cur->end - sblkp->start;
tp->sackhint.sack_bytes_rexmit +=
tp->sackhint.hole_bytes -= sblkp->end - sblkp->start;
tp->sackhint.sack_bytes_rexmit +=
KASSERT(notlost_bytes <= tp->sackhint.hole_bytes,
KASSERT(tp->sackhint.hole_bytes == 0,
tp->sackhint.sack_bytes_rexmit = 0;
tp->sackhint.sacked_bytes = 0;
tp->sackhint.lost_bytes = 0;
KASSERT(tp->sackhint.hole_bytes > 0,
tp->sackhint.delivered_data = delivered_data;
tp->sackhint.sacked_bytes += delivered_data - left_edge_delta;
KASSERT((tp->sackhint.sacked_bytes >= 0), ("sacked_bytes < 0"));
tp->sackhint.lost_bytes = tp->sackhint.hole_bytes -
tp->sackhint.sack_bytes_rexmit = 0;
tp->sackhint.delivered_data = 0;
tp->sackhint.sacked_bytes = 0;
tp->sackhint.hole_bytes = 0;
tp->sackhint.lost_bytes = 0;
KASSERT(tp->sackhint.nexthole == NULL,
tp->sackhint.nexthole = TAILQ_FIRST(&tp->snd_holes);
tp->sackhint.sack_bytes_rexmit = 0;
tp->snd_cwnd = (tp->sackhint.sack_bytes_rexmit +
(tp->sackhint.delivered_data > 0)) {
if (tp->sackhint.recover_fs == 0)
tp->sackhint.recover_fs = max(1,
struct sackhint sackhint; /* SACK scoreboard hint */