Changeset View
Changeset View
Standalone View
Standalone View
sys/netinet/tcp_input.c
Show First 20 Lines • Show All 504 Lines • ▼ Show 20 Lines | cc_post_recovery(struct tcpcb *tp, struct tcphdr *th) | ||||
/* XXXLAS: KASSERT that we're in recovery? */ | /* XXXLAS: KASSERT that we're in recovery? */ | ||||
if (CC_ALGO(tp)->post_recovery != NULL) { | if (CC_ALGO(tp)->post_recovery != NULL) { | ||||
tp->ccv->curack = th->th_ack; | tp->ccv->curack = th->th_ack; | ||||
CC_ALGO(tp)->post_recovery(tp->ccv); | CC_ALGO(tp)->post_recovery(tp->ccv); | ||||
} | } | ||||
/* XXXLAS: EXIT_RECOVERY ? */ | /* XXXLAS: EXIT_RECOVERY ? */ | ||||
tp->t_bytes_acked = 0; | tp->t_bytes_acked = 0; | ||||
tp->sackhint.prr_out = 0; | |||||
kbowling: style nit | |||||
} | } | ||||
/* | /* | ||||
* Indicate whether this ack should be delayed. We can delay the ack if | * Indicate whether this ack should be delayed. We can delay the ack if | ||||
* following conditions are met: | * following conditions are met: | ||||
* - There is no delayed ack timer in progress. | * - There is no delayed ack timer in progress. | ||||
* - Our last ack wasn't a 0-sized window. We never want to delay | * - Our last ack wasn't a 0-sized window. We never want to delay | ||||
* the ack that opens up a 0-sized window. | * the ack that opens up a 0-sized window. | ||||
▲ Show 20 Lines • Show All 2,069 Lines • ▼ Show 20 Lines | if (SEQ_LEQ(th->th_ack, tp->snd_una)) { | ||||
tp->sackhint.sack_bytes_rexmit; | tp->sackhint.sack_bytes_rexmit; | ||||
tp->sackhint.prr_delivered += del_data; | tp->sackhint.prr_delivered += del_data; | ||||
if (pipe >= tp->snd_ssthresh) { | if (pipe >= tp->snd_ssthresh) { | ||||
if (tp->sackhint.recover_fs == 0) | if (tp->sackhint.recover_fs == 0) | ||||
tp->sackhint.recover_fs = | tp->sackhint.recover_fs = | ||||
imax(1, tp->snd_nxt - tp->snd_una); | imax(1, tp->snd_nxt - tp->snd_una); | ||||
snd_cnt = howmany((long)tp->sackhint.prr_delivered * | snd_cnt = howmany((long)tp->sackhint.prr_delivered * | ||||
tp->snd_ssthresh, tp->sackhint.recover_fs) - | tp->snd_ssthresh, tp->sackhint.recover_fs) - | ||||
(tp->sackhint.sack_bytes_rexmit + | tp->sackhint.prr_out; | ||||
(tp->snd_nxt - tp->snd_recover)); | |||||
} else { | } else { | ||||
if (V_tcp_do_prr_conservative) | if (V_tcp_do_prr_conservative) | ||||
limit = tp->sackhint.prr_delivered - | limit = tp->sackhint.prr_delivered - | ||||
(tp->sackhint.sack_bytes_rexmit + | tp->sackhint.prr_out; | ||||
(tp->snd_nxt - tp->snd_recover)); | |||||
else | else | ||||
limit = imax(tp->sackhint.prr_delivered - | limit = imax(tp->sackhint.prr_delivered - | ||||
(tp->sackhint.sack_bytes_rexmit + | tp->sackhint.prr_out, | ||||
(tp->snd_nxt - tp->snd_recover)), | |||||
del_data) + maxseg; | del_data) + maxseg; | ||||
snd_cnt = imin(tp->snd_ssthresh - pipe, limit); | snd_cnt = imin(tp->snd_ssthresh - pipe, limit); | ||||
} | } | ||||
snd_cnt = imax(snd_cnt, 0) / maxseg; | snd_cnt = imax(snd_cnt, 0) / maxseg; | ||||
/* | /* | ||||
* Send snd_cnt new data into the network in | * Send snd_cnt new data into the network in | ||||
* response to this ACK. If there is a going | * response to this ACK. If there is a going | ||||
* to be a SACK retransmission, adjust snd_cwnd | * to be a SACK retransmission, adjust snd_cwnd | ||||
▲ Show 20 Lines • Show All 1,350 Lines • ▼ Show 20 Lines | tcp_prr_partialack(struct tcpcb *tp, struct tcphdr *th) | ||||
* Proportional Rate Reduction | * Proportional Rate Reduction | ||||
*/ | */ | ||||
if (pipe >= tp->snd_ssthresh) { | if (pipe >= tp->snd_ssthresh) { | ||||
if (tp->sackhint.recover_fs == 0) | if (tp->sackhint.recover_fs == 0) | ||||
tp->sackhint.recover_fs = | tp->sackhint.recover_fs = | ||||
imax(1, tp->snd_nxt - tp->snd_una); | imax(1, tp->snd_nxt - tp->snd_una); | ||||
snd_cnt = howmany((long)tp->sackhint.prr_delivered * | snd_cnt = howmany((long)tp->sackhint.prr_delivered * | ||||
tp->snd_ssthresh, tp->sackhint.recover_fs) - | tp->snd_ssthresh, tp->sackhint.recover_fs) - | ||||
(tp->sackhint.sack_bytes_rexmit + | tp->sackhint.prr_out; | ||||
(tp->snd_nxt - tp->snd_recover)); | |||||
} else { | } else { | ||||
if (V_tcp_do_prr_conservative) | if (V_tcp_do_prr_conservative) | ||||
limit = tp->sackhint.prr_delivered - | limit = tp->sackhint.prr_delivered - | ||||
(tp->sackhint.sack_bytes_rexmit + | tp->sackhint.prr_out; | ||||
(tp->snd_nxt - tp->snd_recover)); | |||||
else | else | ||||
limit = imax(tp->sackhint.prr_delivered - | limit = imax(tp->sackhint.prr_delivered - | ||||
(tp->sackhint.sack_bytes_rexmit + | tp->sackhint.prr_out, del_data) + | ||||
(tp->snd_nxt - tp->snd_recover)), | maxseg; | ||||
del_data) + maxseg; | |||||
snd_cnt = imin((tp->snd_ssthresh - pipe), limit); | snd_cnt = imin((tp->snd_ssthresh - pipe), limit); | ||||
} | } | ||||
snd_cnt = imax(snd_cnt, 0) / maxseg; | snd_cnt = imax(snd_cnt, 0) / maxseg; | ||||
/* | /* | ||||
* Send snd_cnt new data into the network in response to this ack. | * Send snd_cnt new data into the network in response to this ack. | ||||
* If there is going to be a SACK retransmission, adjust snd_cwnd | * If there is going to be a SACK retransmission, adjust snd_cwnd | ||||
* accordingly. | * accordingly. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 79 Lines • Show Last 20 Lines |
style nit