From efa9bb55351e54026e66d9b28eec14f143e62544 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Thu, 3 Feb 2005 22:58:22 +0000 Subject: [PATCH] fix the latest bug: don't explode when some router declares a bandwidthburst of 500 gigabytes. this bug seems to have taken down most of the network. oops. svn:r3523 --- src/or/config.c | 6 +++--- src/or/connection.c | 5 ++--- src/or/connection_or.c | 4 +++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/or/config.c b/src/or/config.c index 41f8c3f1ec..a7d29a49dc 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -97,7 +97,7 @@ static config_var_t config_vars[] = { VAR("AllowUnverifiedNodes",CSV, AllowUnverifiedNodes, "middle,rendezvous"), VAR("AuthoritativeDirectory",BOOL, AuthoritativeDir, "0"), VAR("BandwidthRate", MEMUNIT, BandwidthRate, "1 MB"), - VAR("BandwidthBurst", MEMUNIT, BandwidthBurst, "48 MB"), + VAR("BandwidthBurst", MEMUNIT, BandwidthBurst, "5 MB"), VAR("ClientOnly", BOOL, ClientOnly, "0"), VAR("ContactInfo", STRING, ContactInfo, NULL), VAR("ControlPort", UINT, ControlPort, "0"), @@ -1414,11 +1414,11 @@ options_validate(or_options_t *options) log(LOG_WARN,"BandwidthBurst must be at least equal to BandwidthRate."); result = -1; } +#if 0 if (2*options->BandwidthRate > options->BandwidthBurst) { log(LOG_NOTICE,"You have chosen a BandwidthBurst less than twice BandwidthRate. Please consider setting your BandwidthBurst higher (at least %d), to provide better service to the Tor network.", (int)(2*options->BandwidthRate)); - result = -1; } - +#endif if (options->_MonthlyAccountingStart) { if (options->AccountingStart) { diff --git a/src/or/connection.c b/src/or/connection.c index fb71291ca1..cf42edba81 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -814,7 +814,7 @@ void connection_bucket_refill(struct timeval *now) { conn = carray[i]; if (connection_receiver_bucket_should_increase(conn)) { - conn->receiver_bucket += conn->bandwidth; + conn->receiver_bucket = conn->bandwidth; //log_fn(LOG_DEBUG,"Receiver bucket %d now %d.", i, conn->receiver_bucket); } @@ -848,8 +848,7 @@ static int connection_receiver_bucket_should_increase(connection_t *conn) { if (conn->state != OR_CONN_STATE_OPEN) return 0; /* only open connections play the rate limiting game */ - tor_assert(conn->bandwidth > 0); - if (conn->receiver_bucket > 9*conn->bandwidth) + if (conn->receiver_bucket >= conn->bandwidth) return 0; return 1; diff --git a/src/or/connection_or.c b/src/or/connection_or.c index 98c1f3bcb8..aa0e624efc 100644 --- a/src/or/connection_or.c +++ b/src/or/connection_or.c @@ -114,9 +114,11 @@ int connection_or_finished_connecting(connection_t *conn) */ static void connection_or_init_conn_from_router(connection_t *conn, routerinfo_t *router) { + or_options_t *options = get_options(); + conn->addr = router->addr; conn->port = router->or_port; - conn->receiver_bucket = conn->bandwidth = router->bandwidthburst; + conn->receiver_bucket = conn->bandwidth = (int)options->BandwidthBurst; conn->identity_pkey = crypto_pk_dup_key(router->identity_pkey); crypto_pk_get_digest(conn->identity_pkey, conn->identity_digest); conn->nickname = tor_strdup(router->nickname);