mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-28 14:23:30 +01:00
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
This commit is contained in:
parent
a035032f09
commit
efa9bb5535
@ -97,7 +97,7 @@ static config_var_t config_vars[] = {
|
|||||||
VAR("AllowUnverifiedNodes",CSV, AllowUnverifiedNodes, "middle,rendezvous"),
|
VAR("AllowUnverifiedNodes",CSV, AllowUnverifiedNodes, "middle,rendezvous"),
|
||||||
VAR("AuthoritativeDirectory",BOOL, AuthoritativeDir, "0"),
|
VAR("AuthoritativeDirectory",BOOL, AuthoritativeDir, "0"),
|
||||||
VAR("BandwidthRate", MEMUNIT, BandwidthRate, "1 MB"),
|
VAR("BandwidthRate", MEMUNIT, BandwidthRate, "1 MB"),
|
||||||
VAR("BandwidthBurst", MEMUNIT, BandwidthBurst, "48 MB"),
|
VAR("BandwidthBurst", MEMUNIT, BandwidthBurst, "5 MB"),
|
||||||
VAR("ClientOnly", BOOL, ClientOnly, "0"),
|
VAR("ClientOnly", BOOL, ClientOnly, "0"),
|
||||||
VAR("ContactInfo", STRING, ContactInfo, NULL),
|
VAR("ContactInfo", STRING, ContactInfo, NULL),
|
||||||
VAR("ControlPort", UINT, ControlPort, "0"),
|
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.");
|
log(LOG_WARN,"BandwidthBurst must be at least equal to BandwidthRate.");
|
||||||
result = -1;
|
result = -1;
|
||||||
}
|
}
|
||||||
|
#if 0
|
||||||
if (2*options->BandwidthRate > options->BandwidthBurst) {
|
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));
|
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->_MonthlyAccountingStart) {
|
||||||
if (options->AccountingStart) {
|
if (options->AccountingStart) {
|
||||||
|
@ -814,7 +814,7 @@ void connection_bucket_refill(struct timeval *now) {
|
|||||||
conn = carray[i];
|
conn = carray[i];
|
||||||
|
|
||||||
if (connection_receiver_bucket_should_increase(conn)) {
|
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);
|
//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)
|
if (conn->state != OR_CONN_STATE_OPEN)
|
||||||
return 0; /* only open connections play the rate limiting game */
|
return 0; /* only open connections play the rate limiting game */
|
||||||
|
|
||||||
tor_assert(conn->bandwidth > 0);
|
if (conn->receiver_bucket >= conn->bandwidth)
|
||||||
if (conn->receiver_bucket > 9*conn->bandwidth)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -114,9 +114,11 @@ int connection_or_finished_connecting(connection_t *conn)
|
|||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
connection_or_init_conn_from_router(connection_t *conn, routerinfo_t *router) {
|
connection_or_init_conn_from_router(connection_t *conn, routerinfo_t *router) {
|
||||||
|
or_options_t *options = get_options();
|
||||||
|
|
||||||
conn->addr = router->addr;
|
conn->addr = router->addr;
|
||||||
conn->port = router->or_port;
|
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);
|
conn->identity_pkey = crypto_pk_dup_key(router->identity_pkey);
|
||||||
crypto_pk_get_digest(conn->identity_pkey, conn->identity_digest);
|
crypto_pk_get_digest(conn->identity_pkey, conn->identity_digest);
|
||||||
conn->nickname = tor_strdup(router->nickname);
|
conn->nickname = tor_strdup(router->nickname);
|
||||||
|
Loading…
Reference in New Issue
Block a user