summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-07-29 05:32:03 +0000
committerNick Mathewson <nickm@torproject.org>2007-07-29 05:32:03 +0000
commit9031bbd4d86b4222af8e487a2f8204c334e410a5 (patch)
tree7aa262546352c1f9014443b16a073c881fe93826
parent1b665b3c7e13b493e229bf308bf4de7a1d7413c3 (diff)
downloadtor-9031bbd4d86b4222af8e487a2f8204c334e410a5.tar.gz
tor-9031bbd4d86b4222af8e487a2f8204c334e410a5.zip
r13982@catbus: nickm | 2007-07-29 01:31:53 -0400
Actually, we missed a rule about what routers to prefer: first prefer authority to non-authority, *then* running, *then* bandwidth. svn:r10969
-rw-r--r--doc/spec/dir-spec-v2.txt10
-rw-r--r--doc/spec/dir-spec.txt10
-rw-r--r--src/or/dirserv.c14
3 files changed, 24 insertions, 10 deletions
diff --git a/doc/spec/dir-spec-v2.txt b/doc/spec/dir-spec-v2.txt
index 553e565cc5..7f71f8f071 100644
--- a/doc/spec/dir-spec-v2.txt
+++ b/doc/spec/dir-spec-v2.txt
@@ -482,11 +482,11 @@ $Id$
Directory server administrators may label some servers or IPs as
blacklisted, and elect not to include them in their network-status lists.
- Authorities SHOULD 'disable' any servers in excess of 3 on any single
- IP. When there are more than 3 to choose from, authorities should first
- prefer Running to non-Running, and then prefer high-bandwidth to
- low-bandwidth. To 'disable' a server, the authority *should* advertise
- it without the Running or Valid flag.
+ Authorities SHOULD 'disable' any servers in excess of 3 on any single IP.
+ When there are more than 3 to choose from, authorities should first prefer
+ authorities to non-authorities, then prefer Running to non-Running, and
+ then prefer high-bandwidth to low-bandwidth. To 'disable' a server, the
+ authority *should* advertise it without the Running or Valid flag.
Thus, the network-status list includes all non-blacklisted,
non-expired, non-superseded descriptors.
diff --git a/doc/spec/dir-spec.txt b/doc/spec/dir-spec.txt
index 1900fe3716..a7b2e5d803 100644
--- a/doc/spec/dir-spec.txt
+++ b/doc/spec/dir-spec.txt
@@ -968,11 +968,11 @@ $Id$
Directory server administrators may label some servers or IPs as
blacklisted, and elect not to include them in their network-status lists.
- Authorities SHOULD 'disable' any servers in excess of 3 on any single
- IP. When there are more than 3 to choose from, authorities should first
- prefer Running to non-Running, and then prefer high-bandwidth to
- low-bandwidth. To 'disable' a server, the authority *should* advertise
- it without the Running or Valid flag.
+ Authorities SHOULD 'disable' any servers in excess of 3 on any single IP.
+ When there are more than 3 to choose from, authorities should first prefer
+ authorities to non-authorities, then prefer Running to non-Running, and
+ then prefer high-bandwidth to low-bandwidth. To 'disable' a server, the
+ authority *should* advertise it without the Running or Valid flag.
Thus, the network-status vote includes all non-blacklisted,
non-expired, non-superseded descriptors.
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index 0a7a5f01af..bf818d01eb 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -1727,16 +1727,30 @@ static int
_compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
{
routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b;
+ int first_is_auth, second_is_auth;
+
/* we return -1 if first should appear before second... that is,
* if first is a better router. */
if (first->addr < second->addr)
return -1;
else if (first->addr > second->addr)
return 1;
+
+ first_is_auth =
+ router_digest_is_trusted_dir(first->cache_info.identity_digest);
+ second_is_auth =
+ router_digest_is_trusted_dir(second->cache_info.identity_digest);
+
+ if (first_is_auth && !second_is_auth)
+ return -1;
+ else if (!first_is_auth && second_is_auth)
+ return 1;
+
else if (first->is_running && !second->is_running)
return -1;
else if (!first->is_running && second->is_running)
return 1;
+
else if (first->bandwidthrate > second->bandwidthrate)
return -1;
else if (first->bandwidthrate < second->bandwidthrate)