diff options
author | Roger Dingledine <arma@torproject.org> | 2010-01-19 17:30:52 -0500 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2010-01-19 17:30:52 -0500 |
commit | 0642ab242865c00816510934ea1c3f6ce6982db9 (patch) | |
tree | 3fead2aabe3b4be8a90b6ca57298553a936b7c67 | |
parent | f43f87db5b945ea86cfb2bce316b46eb6fd9affd (diff) | |
download | tor-0642ab242865c00816510934ea1c3f6ce6982db9.tar.gz tor-0642ab242865c00816510934ea1c3f6ce6982db9.zip |
weight guard choice by bandwidth; discard old guards
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | src/or/circuitbuild.c | 29 |
2 files changed, 31 insertions, 9 deletions
@@ -1,3 +1,14 @@ +Changes in version 0.2.1.23 - 2010-0?-?? + o Major bugfixes (performance): + - We were selecting our guards uniformly at random, and then weighting + which of our guards we'd use uniformly at random. This imbalance + meant that Tor clients were severely limited on throughput (and + probably latency too) by the first hop in their circuit. Now we + select guards weighted by currently advertised bandwidth. We also + automatically discard guards picked using the old algorithm. Fixes + bug 1217; bugfix on 0.2.1.3-alpha. Found by Mike Perry. + + Changes in version 0.2.1.22 - 2010-01-19 Tor 0.2.1.22 fixes a critical privacy problem in bridge directory authorities -- it would tell you its whole history of bridge descriptors diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c index 4b5ba62fa2..1f4a493fa5 100644 --- a/src/or/circuitbuild.c +++ b/src/or/circuitbuild.c @@ -1697,7 +1697,7 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state) routerinfo_t *r, *choice; smartlist_t *excluded; or_options_t *options = get_options(); - router_crn_flags_t flags = 0; + router_crn_flags_t flags = CRN_NEED_GUARD; if (state && options->UseEntryGuards && (purpose != CIRCUIT_PURPOSE_TESTING || options->BridgeRelay)) { @@ -1734,7 +1734,6 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state) } if (state) { - flags |= CRN_NEED_GUARD; if (state->need_uptime) flags |= CRN_NEED_UPTIME; if (state->need_capacity) @@ -2203,13 +2202,25 @@ remove_obsolete_entry_guards(void) } else if (tor_version_parse(ver, &v)) { msg = "does not seem to be from any recognized version of Tor"; version_is_bad = 1; - } else if ((tor_version_as_new_as(ver, "0.1.0.10-alpha") && - !tor_version_as_new_as(ver, "0.1.2.16-dev")) || - (tor_version_as_new_as(ver, "0.2.0.0-alpha") && - !tor_version_as_new_as(ver, "0.2.0.6-alpha"))) { - msg = "was selected without regard for guard bandwidth"; - version_is_bad = 1; - } else if (entry->chosen_on_date + 3600*24*35 < this_month) { + } else { + size_t len = strlen(ver)+5; + char *tor_ver = tor_malloc(len); + tor_snprintf(tor_ver, len, "Tor %s", ver); + if ((tor_version_as_new_as(tor_ver, "0.1.0.10-alpha") && + !tor_version_as_new_as(tor_ver, "0.1.2.16-dev")) || + (tor_version_as_new_as(tor_ver, "0.2.0.0-alpha") && + !tor_version_as_new_as(tor_ver, "0.2.0.6-alpha")) || + /* above are bug 440; below are bug 1217 */ + (tor_version_as_new_as(tor_ver, "0.2.1.3-alpha") && + !tor_version_as_new_as(tor_ver, "0.2.1.23")) || + (tor_version_as_new_as(tor_ver, "0.2.2.0-alpha") && + !tor_version_as_new_as(tor_ver, "0.2.2.7-alpha"))) { + msg = "was selected without regard for guard bandwidth"; + version_is_bad = 1; + } + tor_free(tor_ver); + } + if (!version_is_bad && entry->chosen_on_date + 3600*24*35 < this_month) { /* It's been more than a month, and probably more like two since * chosen_on_date is clipped to the beginning of its month. */ msg = "was selected several months ago"; |