aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/ccids
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2006-12-09 21:01:22 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-12-11 17:34:41 -0500
commit179ebc9f92da88e15ea86d7d27308c92712d8ee9 (patch)
tree6b8a18fd9e5b3447b8b32560d258f92276c358b7 /net/dccp/ccids
parentff58629824c068e2a75402b5b83f12af0b36d394 (diff)
[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>
Diffstat (limited to 'net/dccp/ccids')
-rw-r--r--net/dccp/ccids/ccid3.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c
index 92e893ee77c2..c54663f21fdd 100644
--- a/net/dccp/ccids/ccid3.c
+++ b/net/dccp/ccids/ccid3.c
@@ -193,7 +193,7 @@ static void ccid3_hc_tx_no_feedback_timer(unsigned long data)
193 switch (hctx->ccid3hctx_state) { 193 switch (hctx->ccid3hctx_state) {
194 case TFRC_SSTATE_NO_FBACK: 194 case TFRC_SSTATE_NO_FBACK:
195 /* RFC 3448, 4.4: Halve send rate directly */ 195 /* RFC 3448, 4.4: Halve send rate directly */
196 hctx->ccid3hctx_x = min_t(u32, hctx->ccid3hctx_x / 2, 196 hctx->ccid3hctx_x = max_t(u32, hctx->ccid3hctx_x / 2,
197 hctx->ccid3hctx_s / TFRC_T_MBI); 197 hctx->ccid3hctx_s / TFRC_T_MBI);
198 198
199 ccid3_pr_debug("%s, sk=%p, state=%s, updated tx rate to %d " 199 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)
477 if (hctx->ccid3hctx_state == TFRC_SSTATE_NO_FBACK) { 477 if (hctx->ccid3hctx_state == TFRC_SSTATE_NO_FBACK) {
478 /* Use Larger Initial Windows [RFC 4342, sec. 5] 478 /* Use Larger Initial Windows [RFC 4342, sec. 5]
479 * We deviate in that we use `s' instead of `MSS'. */ 479 * We deviate in that we use `s' instead of `MSS'. */
480 u16 w_init = max( 4 * hctx->ccid3hctx_s, 480 u16 w_init = min( 4 * hctx->ccid3hctx_s,
481 max(2 * hctx->ccid3hctx_s, 4380)); 481 max(2 * hctx->ccid3hctx_s, 4380));
482 hctx->ccid3hctx_rtt = r_sample; 482 hctx->ccid3hctx_rtt = r_sample;
483 hctx->ccid3hctx_x = usecs_div(w_init, r_sample); 483 hctx->ccid3hctx_x = usecs_div(w_init, r_sample);