Loading ChangeLog +5 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ Changes in version 0.1.2.7-alpha - 2007-01-26 pointer loops. - Fix a memory leak when sending a 503 response for a networkstatus request. - If we're not marking exits as guards, ignore exit bandwidth when we're deciding the required bandwidth to become a guard. o Minor bugfixes: - When computing clock skew from directory HTTP headers, consider what Loading Loading @@ -50,6 +52,9 @@ Changes in version 0.1.2.7-alpha - 2007-01-26 connections. (Fixes bug 382.) o Minor features: - Create a new file ReleaseNotes which was the old ChangeLog. The new ChangeLog file now includes the summaries for even development versions. - Check for addresses with invalid characters at the exit as well as at the client, and warn less verbosely when they fail. You can override this by setting ServerDNSAllowNonRFC953Addresses to 1. Loading doc/TODO +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ N - Test guard unreachable logic; make sure that we actually attempt to connect to guards that we think are unreachable from time to time. Make sure that we don't freak out when the network is down. R - Reconstruct ChangeLog; put rolled-up info in ReleaseNotes or something. o Reconstruct ChangeLog; put rolled-up info in ReleaseNotes or something. Items for 0.1.2.x: - weight dir requests by advertised bandwidth? with maybe a lower cutoff Loading src/or/dirserv.c +34 −9 Original line number Diff line number Diff line Loading @@ -1332,7 +1332,8 @@ should_generate_v2_networkstatus(void) * generate_v2_networkstatus */ static uint32_t stable_uptime = 0; /* start at a safe value */ static uint32_t fast_bandwidth = 0; static uint32_t guard_bandwidth = 0; static uint32_t guard_bandwidth_including_exits = 0; static uint32_t guard_bandwidth_excluding_exits = 0; static uint64_t total_bandwidth = 0; static uint64_t total_exit_bandwidth = 0; Loading Loading @@ -1386,14 +1387,21 @@ _compare_uint32(const void **a, const void **b) static void dirserv_compute_performance_thresholds(routerlist_t *rl) { smartlist_t *uptimes, *bandwidths; smartlist_t *uptimes, *bandwidths, *bandwidths_excluding_exits; time_t now = time(NULL); /* initialize these all here, in case there are no routers */ stable_uptime = 0; fast_bandwidth = 0; guard_bandwidth_including_exits = 0; guard_bandwidth_excluding_exits = 0; total_bandwidth = 0; total_exit_bandwidth = 0; uptimes = smartlist_create(); bandwidths = smartlist_create(); bandwidths_excluding_exits = smartlist_create(); SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, { if (ri->is_running && ri->is_valid) { Loading @@ -1404,14 +1412,20 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) smartlist_add(uptimes, up); *bw = router_get_advertised_bandwidth(ri); total_bandwidth += *bw; if (ri->is_exit && !ri->is_bad_exit) if (ri->is_exit && !ri->is_bad_exit) { total_exit_bandwidth += *bw; } else { uint32_t *bw_not_exit = tor_malloc(sizeof(uint32_t)); *bw_not_exit = *bw; smartlist_add(bandwidths_excluding_exits, bw_not_exit); } smartlist_add(bandwidths, bw); } }); smartlist_sort(uptimes, _compare_uint32); smartlist_sort(bandwidths, _compare_uint32); smartlist_sort(bandwidths_excluding_exits, _compare_uint32); if (smartlist_len(uptimes)) stable_uptime = *(uint32_t*)smartlist_get(uptimes, Loading @@ -1423,20 +1437,29 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) if (fast_bandwidth < ROUTER_REQUIRED_MIN_BANDWIDTH) fast_bandwidth = *(uint32_t*)smartlist_get(bandwidths, smartlist_len(bandwidths)/4); guard_bandwidth = *(uint32_t*)smartlist_get(bandwidths, smartlist_len(bandwidths)/2); guard_bandwidth_including_exits = *(uint32_t*)smartlist_get(bandwidths, smartlist_len(bandwidths)/2); } if (smartlist_len(bandwidths_excluding_exits)) { guard_bandwidth_excluding_exits = *(uint32_t*)smartlist_get(bandwidths_excluding_exits, smartlist_len(bandwidths_excluding_exits)/2); } log(LOG_INFO, LD_DIRSERV, "Cutoffs: %lus uptime, %lu b/s fast, %lu b/s guard.", "Cutoffs: %lus uptime, %lu b/s fast, %lu or %lu b/s guard.", (unsigned long)stable_uptime, (unsigned long)fast_bandwidth, (unsigned long)guard_bandwidth); (unsigned long)guard_bandwidth_including_exits, (unsigned long)guard_bandwidth_excluding_exits); SMARTLIST_FOREACH(uptimes, uint32_t *, up, tor_free(up)); SMARTLIST_FOREACH(bandwidths, uint32_t *, bw, tor_free(bw)); SMARTLIST_FOREACH(bandwidths_excluding_exits, uint32_t *, bw, tor_free(bw)); smartlist_free(uptimes); smartlist_free(bandwidths); smartlist_free(bandwidths_excluding_exits); } /** For authoritative directories only: replace the contents of Loading Loading @@ -1564,8 +1587,10 @@ generate_v2_networkstatus(void) int f_named = naming && ri->is_named; int f_valid = ri->is_valid; int f_guard = f_fast && f_stable && router_get_advertised_bandwidth(ri) >= guard_bandwidth && (!f_exit || exits_can_be_guards); (!f_exit || exits_can_be_guards) && router_get_advertised_bandwidth(ri) >= (exits_can_be_guards ? guard_bandwidth_including_exits : guard_bandwidth_excluding_exits); int f_bad_exit = listbadexits && ri->is_bad_exit; /* 0.1.1.9-alpha is the first version to support fetch by descriptor * hash. */ Loading Loading
ChangeLog +5 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ Changes in version 0.1.2.7-alpha - 2007-01-26 pointer loops. - Fix a memory leak when sending a 503 response for a networkstatus request. - If we're not marking exits as guards, ignore exit bandwidth when we're deciding the required bandwidth to become a guard. o Minor bugfixes: - When computing clock skew from directory HTTP headers, consider what Loading Loading @@ -50,6 +52,9 @@ Changes in version 0.1.2.7-alpha - 2007-01-26 connections. (Fixes bug 382.) o Minor features: - Create a new file ReleaseNotes which was the old ChangeLog. The new ChangeLog file now includes the summaries for even development versions. - Check for addresses with invalid characters at the exit as well as at the client, and warn less verbosely when they fail. You can override this by setting ServerDNSAllowNonRFC953Addresses to 1. Loading
doc/TODO +1 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ N - Test guard unreachable logic; make sure that we actually attempt to connect to guards that we think are unreachable from time to time. Make sure that we don't freak out when the network is down. R - Reconstruct ChangeLog; put rolled-up info in ReleaseNotes or something. o Reconstruct ChangeLog; put rolled-up info in ReleaseNotes or something. Items for 0.1.2.x: - weight dir requests by advertised bandwidth? with maybe a lower cutoff Loading
src/or/dirserv.c +34 −9 Original line number Diff line number Diff line Loading @@ -1332,7 +1332,8 @@ should_generate_v2_networkstatus(void) * generate_v2_networkstatus */ static uint32_t stable_uptime = 0; /* start at a safe value */ static uint32_t fast_bandwidth = 0; static uint32_t guard_bandwidth = 0; static uint32_t guard_bandwidth_including_exits = 0; static uint32_t guard_bandwidth_excluding_exits = 0; static uint64_t total_bandwidth = 0; static uint64_t total_exit_bandwidth = 0; Loading Loading @@ -1386,14 +1387,21 @@ _compare_uint32(const void **a, const void **b) static void dirserv_compute_performance_thresholds(routerlist_t *rl) { smartlist_t *uptimes, *bandwidths; smartlist_t *uptimes, *bandwidths, *bandwidths_excluding_exits; time_t now = time(NULL); /* initialize these all here, in case there are no routers */ stable_uptime = 0; fast_bandwidth = 0; guard_bandwidth_including_exits = 0; guard_bandwidth_excluding_exits = 0; total_bandwidth = 0; total_exit_bandwidth = 0; uptimes = smartlist_create(); bandwidths = smartlist_create(); bandwidths_excluding_exits = smartlist_create(); SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, { if (ri->is_running && ri->is_valid) { Loading @@ -1404,14 +1412,20 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) smartlist_add(uptimes, up); *bw = router_get_advertised_bandwidth(ri); total_bandwidth += *bw; if (ri->is_exit && !ri->is_bad_exit) if (ri->is_exit && !ri->is_bad_exit) { total_exit_bandwidth += *bw; } else { uint32_t *bw_not_exit = tor_malloc(sizeof(uint32_t)); *bw_not_exit = *bw; smartlist_add(bandwidths_excluding_exits, bw_not_exit); } smartlist_add(bandwidths, bw); } }); smartlist_sort(uptimes, _compare_uint32); smartlist_sort(bandwidths, _compare_uint32); smartlist_sort(bandwidths_excluding_exits, _compare_uint32); if (smartlist_len(uptimes)) stable_uptime = *(uint32_t*)smartlist_get(uptimes, Loading @@ -1423,20 +1437,29 @@ dirserv_compute_performance_thresholds(routerlist_t *rl) if (fast_bandwidth < ROUTER_REQUIRED_MIN_BANDWIDTH) fast_bandwidth = *(uint32_t*)smartlist_get(bandwidths, smartlist_len(bandwidths)/4); guard_bandwidth = *(uint32_t*)smartlist_get(bandwidths, smartlist_len(bandwidths)/2); guard_bandwidth_including_exits = *(uint32_t*)smartlist_get(bandwidths, smartlist_len(bandwidths)/2); } if (smartlist_len(bandwidths_excluding_exits)) { guard_bandwidth_excluding_exits = *(uint32_t*)smartlist_get(bandwidths_excluding_exits, smartlist_len(bandwidths_excluding_exits)/2); } log(LOG_INFO, LD_DIRSERV, "Cutoffs: %lus uptime, %lu b/s fast, %lu b/s guard.", "Cutoffs: %lus uptime, %lu b/s fast, %lu or %lu b/s guard.", (unsigned long)stable_uptime, (unsigned long)fast_bandwidth, (unsigned long)guard_bandwidth); (unsigned long)guard_bandwidth_including_exits, (unsigned long)guard_bandwidth_excluding_exits); SMARTLIST_FOREACH(uptimes, uint32_t *, up, tor_free(up)); SMARTLIST_FOREACH(bandwidths, uint32_t *, bw, tor_free(bw)); SMARTLIST_FOREACH(bandwidths_excluding_exits, uint32_t *, bw, tor_free(bw)); smartlist_free(uptimes); smartlist_free(bandwidths); smartlist_free(bandwidths_excluding_exits); } /** For authoritative directories only: replace the contents of Loading Loading @@ -1564,8 +1587,10 @@ generate_v2_networkstatus(void) int f_named = naming && ri->is_named; int f_valid = ri->is_valid; int f_guard = f_fast && f_stable && router_get_advertised_bandwidth(ri) >= guard_bandwidth && (!f_exit || exits_can_be_guards); (!f_exit || exits_can_be_guards) && router_get_advertised_bandwidth(ri) >= (exits_can_be_guards ? guard_bandwidth_including_exits : guard_bandwidth_excluding_exits); int f_bad_exit = listbadexits && ri->is_bad_exit; /* 0.1.1.9-alpha is the first version to support fetch by descriptor * hash. */ Loading