mirror of
https://github.com/freebsd/freebsd-src
synced 2024-11-05 18:22:52 +00:00
tcp: Add prr_out in preparation for PRR/nonSACK and LRD
Reviewed By: #transport, kbowling MFC after: 3 days Sponsored By: Netapp, Inc. Differential Revision: https://reviews.freebsd.org/D29058
This commit is contained in:
parent
fef8450971
commit
e53138694a
3 changed files with 17 additions and 14 deletions
|
@ -510,6 +510,7 @@ cc_post_recovery(struct tcpcb *tp, struct tcphdr *th)
|
|||
}
|
||||
/* XXXLAS: EXIT_RECOVERY ? */
|
||||
tp->t_bytes_acked = 0;
|
||||
tp->sackhint.prr_out = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2595,17 +2596,14 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
|
|||
imax(1, tp->snd_nxt - tp->snd_una);
|
||||
snd_cnt = howmany((long)tp->sackhint.prr_delivered *
|
||||
tp->snd_ssthresh, tp->sackhint.recover_fs) -
|
||||
(tp->sackhint.sack_bytes_rexmit +
|
||||
(tp->snd_nxt - tp->snd_recover));
|
||||
tp->sackhint.prr_out;
|
||||
} else {
|
||||
if (V_tcp_do_prr_conservative)
|
||||
limit = tp->sackhint.prr_delivered -
|
||||
(tp->sackhint.sack_bytes_rexmit +
|
||||
(tp->snd_nxt - tp->snd_recover));
|
||||
tp->sackhint.prr_out;
|
||||
else
|
||||
limit = imax(tp->sackhint.prr_delivered -
|
||||
(tp->sackhint.sack_bytes_rexmit +
|
||||
(tp->snd_nxt - tp->snd_recover)),
|
||||
tp->sackhint.prr_out,
|
||||
del_data) + maxseg;
|
||||
snd_cnt = imin(tp->snd_ssthresh - pipe, limit);
|
||||
}
|
||||
|
@ -3972,18 +3970,15 @@ tcp_prr_partialack(struct tcpcb *tp, struct tcphdr *th)
|
|||
imax(1, tp->snd_nxt - tp->snd_una);
|
||||
snd_cnt = howmany((long)tp->sackhint.prr_delivered *
|
||||
tp->snd_ssthresh, tp->sackhint.recover_fs) -
|
||||
(tp->sackhint.sack_bytes_rexmit +
|
||||
(tp->snd_nxt - tp->snd_recover));
|
||||
tp->sackhint.prr_out;
|
||||
} else {
|
||||
if (V_tcp_do_prr_conservative)
|
||||
limit = tp->sackhint.prr_delivered -
|
||||
(tp->sackhint.sack_bytes_rexmit +
|
||||
(tp->snd_nxt - tp->snd_recover));
|
||||
tp->sackhint.prr_out;
|
||||
else
|
||||
limit = imax(tp->sackhint.prr_delivered -
|
||||
(tp->sackhint.sack_bytes_rexmit +
|
||||
(tp->snd_nxt - tp->snd_recover)),
|
||||
del_data) + maxseg;
|
||||
tp->sackhint.prr_out, del_data) +
|
||||
maxseg;
|
||||
snd_cnt = imin((tp->snd_ssthresh - pipe), limit);
|
||||
}
|
||||
snd_cnt = imax(snd_cnt, 0) / maxseg;
|
||||
|
|
|
@ -1236,6 +1236,14 @@ tcp_output(struct tcpcb *tp)
|
|||
p->rxmit += len;
|
||||
tp->sackhint.sack_bytes_rexmit += len;
|
||||
}
|
||||
if (IN_RECOVERY(tp->t_flags)) {
|
||||
/*
|
||||
* Account all bytes transmitted while
|
||||
* IN_RECOVERY, simplifying PRR and
|
||||
* Lost Retransmit Detection
|
||||
*/
|
||||
tp->sackhint.prr_out += len;
|
||||
}
|
||||
th->th_ack = htonl(tp->rcv_nxt);
|
||||
if (optlen) {
|
||||
bcopy(opt, th + 1, optlen);
|
||||
|
|
|
@ -115,7 +115,7 @@ struct sackhint {
|
|||
*/
|
||||
uint32_t recover_fs; /* Flight Size at the start of Loss recovery */
|
||||
uint32_t prr_delivered; /* Total bytes delivered using PRR */
|
||||
uint32_t _pad[1]; /* TBD */
|
||||
uint32_t prr_out; /* Bytes sent during IN_RECOVERY */
|
||||
};
|
||||
|
||||
#define SEGQ_EMPTY(tp) TAILQ_EMPTY(&(tp)->t_segq)
|
||||
|
|
Loading…
Reference in a new issue