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:
Richard Scheffenegger 2021-03-06 00:36:48 +01:00
parent fef8450971
commit e53138694a
3 changed files with 17 additions and 14 deletions

View file

@ -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;

View file

@ -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);

View file

@ -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)