[DCCP] ccid3: Fix two bugs in sending rate computation
This fixes 1) a bug in the recomputation of the sending rate by the nofeedback timer when no feedback at all has so far been sent by the receiver: min_t was used instead of max_t, which is wrong (cf. RFC 3448, p. 10); 2) an error in the computation of larger initial windows: instead of min(... max()) (cf. RFC 4342, 5.), the code had used max(... max()). Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Acked-by: Ian McDonald <ian.mcdonald@jandi.co.nz> Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
Родитель
ff58629824
Коммит
179ebc9f92
|
@ -193,7 +193,7 @@ static void ccid3_hc_tx_no_feedback_timer(unsigned long data)
|
||||||
switch (hctx->ccid3hctx_state) {
|
switch (hctx->ccid3hctx_state) {
|
||||||
case TFRC_SSTATE_NO_FBACK:
|
case TFRC_SSTATE_NO_FBACK:
|
||||||
/* RFC 3448, 4.4: Halve send rate directly */
|
/* RFC 3448, 4.4: Halve send rate directly */
|
||||||
hctx->ccid3hctx_x = min_t(u32, hctx->ccid3hctx_x / 2,
|
hctx->ccid3hctx_x = max_t(u32, hctx->ccid3hctx_x / 2,
|
||||||
hctx->ccid3hctx_s / TFRC_T_MBI);
|
hctx->ccid3hctx_s / TFRC_T_MBI);
|
||||||
|
|
||||||
ccid3_pr_debug("%s, sk=%p, state=%s, updated tx rate to %d "
|
ccid3_pr_debug("%s, sk=%p, state=%s, updated tx rate to %d "
|
||||||
|
@ -477,7 +477,7 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb)
|
||||||
if (hctx->ccid3hctx_state == TFRC_SSTATE_NO_FBACK) {
|
if (hctx->ccid3hctx_state == TFRC_SSTATE_NO_FBACK) {
|
||||||
/* Use Larger Initial Windows [RFC 4342, sec. 5]
|
/* Use Larger Initial Windows [RFC 4342, sec. 5]
|
||||||
* We deviate in that we use `s' instead of `MSS'. */
|
* We deviate in that we use `s' instead of `MSS'. */
|
||||||
u16 w_init = max( 4 * hctx->ccid3hctx_s,
|
u16 w_init = min( 4 * hctx->ccid3hctx_s,
|
||||||
max(2 * hctx->ccid3hctx_s, 4380));
|
max(2 * hctx->ccid3hctx_s, 4380));
|
||||||
hctx->ccid3hctx_rtt = r_sample;
|
hctx->ccid3hctx_rtt = r_sample;
|
||||||
hctx->ccid3hctx_x = usecs_div(w_init, r_sample);
|
hctx->ccid3hctx_x = usecs_div(w_init, r_sample);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче