From 1aaab8288d4b5afdff56c17a01c82a2a89e4ef01 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Sun, 21 Jun 2009 08:54:35 -0400 Subject: 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. --- src/or/routerlist.c | 22 ++++++++++++++++++---- 1 file 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); -- cgit v1.2.3-54-g00ecf From b91428cfd36d1014bbd77ea1a53cddded92a6d14 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Sun, 21 Jun 2009 08:55:12 -0400 Subject: add a changelog entry: clients use bw in consensus --- ChangeLog | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/ChangeLog b/ChangeLog index f7da7c4cba..a150710767 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,13 @@ Changes in version 0.2.1.17-?? - 2009-??-?? - Serve the DirPortFrontPage page even when we have been approaching our quotas recently. Fixes bug 1013; bugfix on 0.2.1.8-alpha. + o Major features: + - Clients now use the 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. + Changes in version 0.2.1.16-rc - 2009-06-20 o Security fixes: -- cgit v1.2.3-54-g00ecf