From fea6342bdcfb9c6134a41e480bdf44f499586044 Mon Sep 17 00:00:00 2001 From: Gerrit Renker Date: Sun, 10 Dec 2006 00:06:32 -0200 Subject: [PATCH] --- yaml --- r: 44279 b: refs/heads/master c: de553c189e3faa0d0c38f366f73379b46587b80e h: refs/heads/master i: 44277: 3cc2064afd7d034a59457904759770fb2e2f75c3 44275: c4c80c2536c51cc399b058d4b215c3dbea7f51a0 44271: de387d9421ff5fdc70ad94546b6a76c2e1f02648 v: v3 --- [refs] | 2 +- trunk/net/dccp/ccids/ccid3.c | 4 +++- trunk/net/dccp/ccids/ccid3.h | 10 ++++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 85da53fe2428..d1097354108b 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fe0499ae95f5f636bda1f6e0bdba5b7b023ea827 +refs/heads/master: de553c189e3faa0d0c38f366f73379b46587b80e diff --git a/trunk/net/dccp/ccids/ccid3.c b/trunk/net/dccp/ccids/ccid3.c index 7618d51aa2d2..122a716eb877 100644 --- a/trunk/net/dccp/ccids/ccid3.c +++ b/trunk/net/dccp/ccids/ccid3.c @@ -456,8 +456,9 @@ static void ccid3_hc_tx_packet_recv(struct sock *sk, struct sk_buff *skb) r_sample, t_elapsed); else r_sample -= t_elapsed; + CCID3_RTT_SANITY_CHECK(r_sample); - /* Update RTT estimate by + /* Update RTT estimate by * If (No feedback recv) * R = R_sample; * Else @@ -1000,6 +1001,7 @@ static void ccid3_hc_rx_packet_recv(struct sock *sk, struct sk_buff *skb) r_sample, t_elapsed); else r_sample -= t_elapsed; + CCID3_RTT_SANITY_CHECK(r_sample); if (hcrx->ccid3hcrx_state == TFRC_RSTATE_NO_DATA) hcrx->ccid3hcrx_rtt = r_sample; diff --git a/trunk/net/dccp/ccids/ccid3.h b/trunk/net/dccp/ccids/ccid3.h index da0ca3c0a7b3..3fa0f69ed320 100644 --- a/trunk/net/dccp/ccids/ccid3.h +++ b/trunk/net/dccp/ccids/ccid3.h @@ -51,6 +51,16 @@ /* Parameter t_mbi from [RFC 3448, 4.3]: backoff interval in seconds */ #define TFRC_T_MBI 64 +/* What we think is a reasonable upper limit on RTT values */ +#define CCID3_SANE_RTT_MAX (4 * USEC_PER_SEC) + +#define CCID3_RTT_SANITY_CHECK(rtt) do { \ + if (rtt > CCID3_SANE_RTT_MAX) { \ + DCCP_CRIT("RTT (%ld) too large, substituting %ld", \ + rtt, CCID3_SANE_RTT_MAX); \ + rtt = CCID3_SANE_RTT_MAX; \ + } } while (0) + enum ccid3_options { TFRC_OPT_LOSS_EVENT_RATE = 192, TFRC_OPT_LOSS_INTERVALS = 193,