summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2009-06-21 08:54:35 -0400
committerNick Mathewson <nickm@torproject.org>2009-06-22 14:01:34 -0400
commit1aaab8288d4b5afdff56c17a01c82a2a89e4ef01 (patch)
treefc8a6f51d02a1a85411ffa0d1507accb7cfb60d8
parent262455527a82d1a9d482e3df32651700b2ba8c6e (diff)
downloadtor-1aaab8288d4b5afdff56c17a01c82a2a89e4ef01.tar.gz
tor-1aaab8288d4b5afdff56c17a01c82a2a89e4ef01.zip
Clients now use bandwidth values in the consensus
rather than the bandwidth values in each relay descriptor. This approach opens the door to more accurate bandwidth estimates once the directory authorities start doing active measurements. Implements more of proposal 141.
-rw-r--r--src/or/routerlist.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index d8165e63bd..1419ae4665 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1591,28 +1591,42 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, bandwidth_weight_rule_t rule,
int32_t flags = 0;
uint32_t this_bw = 0;
if (statuses) {
- /* need to extract router info */
status = smartlist_get(sl, i);
if (router_digest_is_me(status->identity_digest))
me_idx = i;
router = router_get_by_digest(status->identity_digest);
is_exit = status->is_exit;
is_guard = status->is_possible_guard;
- if (router) {
- this_bw = router_get_advertised_bandwidth(router);
+ if (status->has_bandwidth) {
+ this_bw = status->bandwidth*1000;
} else { /* guess */
+ /* XXX022 once consensuses always list bandwidths, we can take
+ * this guessing business out. -RD */
is_known = 0;
flags = status->is_fast ? 1 : 0;
flags |= is_exit ? 2 : 0;
flags |= is_guard ? 4 : 0;
}
} else {
+ routerstatus_t *rs;
router = smartlist_get(sl, i);
+ rs = router_get_consensus_status_by_id(
+ router->cache_info.identity_digest);
if (router_digest_is_me(router->cache_info.identity_digest))
me_idx = i;
is_exit = router->is_exit;
is_guard = router->is_possible_guard;
- this_bw = router_get_advertised_bandwidth(router);
+ if (rs && rs->has_bandwidth) {
+ this_bw = rs->bandwidth*1000;
+ } else if (rs) { /* guess; don't trust the descriptor */
+ /* XXX022 once consensuses always list bandwidths, we can take
+ * this guessing business out. -RD */
+ is_known = 0;
+ flags = router->is_fast ? 1 : 0;
+ flags |= is_exit ? 2 : 0;
+ flags |= is_guard ? 4 : 0;
+ } else /* bridge or other descriptor not in our consensus */
+ this_bw = router_get_advertised_bandwidth(router);
}
if (is_exit)
bitarray_set(exit_bits, i);