diff --git a/src/or/dirserv.c b/src/or/dirserv.c index e59b84d90b..d7dd46ba66 100644 --- a/src/or/dirserv.c +++ b/src/or/dirserv.c @@ -1866,11 +1866,27 @@ routerstatus_format_entry(char *buf, size_t buf_len, int r; struct in_addr in; char *cp; + char *summary; char published[ISO_TIME_LEN+1]; char ipaddr[INET_NTOA_BUF_LEN]; char identity64[BASE64_DIGEST_LEN+1]; char digest64[BASE64_DIGEST_LEN+1]; + routerinfo_t* desc = router_get_by_digest(rs->identity_digest); + + if (!desc) { + char id[HEX_DIGEST_LEN+1]; + char dd[HEX_DIGEST_LEN+1]; + + base16_encode(id, sizeof(id), rs->identity_digest, DIGEST_LEN); + base16_encode(dd, sizeof(dd), rs->descriptor_digest, DIGEST_LEN); + log_warn(LD_BUG, "Cannot get the descriptor with digest %s for %s.", + id, dd); + return -1; + }; + tor_assert(!memcmp(desc->cache_info.signed_descriptor_digest, + rs->descriptor_digest, + DIGEST_LEN)); format_iso_time(published, rs->published_on); digest_to_base64(identity64, rs->identity_digest); @@ -1896,7 +1912,8 @@ routerstatus_format_entry(char *buf, size_t buf_len, cp = buf + strlen(buf); /* NOTE: Whenever this list expands, be sure to increase MAX_FLAG_LINE_LEN*/ r = tor_snprintf(cp, buf_len - (cp-buf), - "s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", + "s%s%s%s%s%s%s%s%s%s%s%s%s%s\n" + "w Bandwidth=%d\n", /* These must stay in alphabetical order. */ rs->is_authority?" Authority":"", rs->is_bad_directory?" BadDirectory":"", @@ -1910,7 +1927,8 @@ routerstatus_format_entry(char *buf, size_t buf_len, rs->is_stable?" Stable":"", rs->is_unnamed?" Unnamed":"", rs->is_v2_dir?" V2Dir":"", - rs->is_valid?" Valid":""); + rs->is_valid?" Valid":"", + router_get_advertised_bandwidth_capped(desc)); if (r<0) { log_warn(LD_BUG, "Not enough space in buffer."); return -1; @@ -1926,6 +1944,16 @@ routerstatus_format_entry(char *buf, size_t buf_len, } } + summary = policy_summarize(desc->exit_policy); + if (summary) { + r = tor_snprintf(cp, buf_len - (cp-buf), "p %s\n", summary); + if (r<0) { + log_warn(LD_BUG, "Not enough space in buffer."); + return -1; + } + tor_free(summary); + } + return 0; } diff --git a/src/or/routerlist.c b/src/or/routerlist.c index bce675ce0d..b504c5d608 100644 --- a/src/or/routerlist.c +++ b/src/or/routerlist.c @@ -1431,6 +1431,19 @@ router_get_advertised_bandwidth(routerinfo_t *router) * routers by bandwidth. */ #define DEFAULT_MAX_BELIEVABLE_BANDWIDTH 10000000 /* 10 MB/sec */ +/** Return the smaller of the router's configured BandwidthRate + * and its advertised capacity, capped by max-believe-bw. */ +uint32_t +router_get_advertised_bandwidth_capped(routerinfo_t *router) +{ + uint32_t result = router->bandwidthcapacity; + if (result > router->bandwidthrate) + result = router->bandwidthrate; + if (result > DEFAULT_MAX_BELIEVABLE_BANDWIDTH) + result = DEFAULT_MAX_BELIEVABLE_BANDWIDTH; + return result; +} + /** Eventually, the number we return will come from the directory * consensus, so clients can dynamically update to better numbers. *