mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 10:12:15 +01:00
r16129@tombo: nickm | 2008-06-10 14:28:06 -0400
More geoip tweaks. Include in the file a rough estimator of our total share. svn:r15099
This commit is contained in:
parent
d0a4ad3a1c
commit
b87a7760e0
@ -107,8 +107,9 @@ Changes in version 0.2.1.1-alpha - 2008-??-??
|
|||||||
- Allow comments in geoip file.
|
- Allow comments in geoip file.
|
||||||
- New configure/torrc options (--enable-geoip-stats,
|
- New configure/torrc options (--enable-geoip-stats,
|
||||||
DirRecordUsageByCountry) to record how many IPs we've served directory
|
DirRecordUsageByCountry) to record how many IPs we've served directory
|
||||||
info to in each country code, and how many status documents total
|
info to in each country code, how many status documents total
|
||||||
we've sent to each country code.
|
we've sent to each country code, and what share of the total
|
||||||
|
directory requests we should expect to see.
|
||||||
- Never use OpenSSL compression: it wastes RAM and CPU trying to
|
- Never use OpenSSL compression: it wastes RAM and CPU trying to
|
||||||
compress cells, which are basically all encrypted, compressed, or
|
compress cells, which are basically all encrypted, compressed, or
|
||||||
both.
|
both.
|
||||||
|
@ -528,6 +528,7 @@ dump_geoip_stats(void)
|
|||||||
char *data_v2 = NULL, *data_v3 = NULL;
|
char *data_v2 = NULL, *data_v3 = NULL;
|
||||||
char since[ISO_TIME_LEN+1], written[ISO_TIME_LEN+1];
|
char since[ISO_TIME_LEN+1], written[ISO_TIME_LEN+1];
|
||||||
open_file_t *open_file = NULL;
|
open_file_t *open_file = NULL;
|
||||||
|
double v2_share = 0.0, v3_share = 0.0;
|
||||||
FILE *out;
|
FILE *out;
|
||||||
|
|
||||||
data_v2 = geoip_get_client_history(now, GEOIP_CLIENT_NETWORKSTATUS_V2);
|
data_v2 = geoip_get_client_history(now, GEOIP_CLIENT_NETWORKSTATUS_V2);
|
||||||
@ -554,6 +555,12 @@ dump_geoip_stats(void)
|
|||||||
since,
|
since,
|
||||||
data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
|
data_v3 ? data_v3 : "", data_v2 ? data_v2 : "") < 0)
|
||||||
goto done;
|
goto done;
|
||||||
|
if (!router_get_my_share_of_directory_requests(&v2_share, &v3_share)) {
|
||||||
|
if (fprintf(out, "v2-ns-share %0.2lf%%\n", v2_share*100) < 0)
|
||||||
|
goto done;
|
||||||
|
if (fprintf(out, "v3-ns-share %0.2lf%%\n", v3_share*100) < 0)
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
finish_writing_to_file(open_file);
|
finish_writing_to_file(open_file);
|
||||||
open_file = NULL;
|
open_file = NULL;
|
||||||
|
@ -3967,6 +3967,8 @@ routerstatus_t *router_pick_directory_server(authority_type_t type, int flags);
|
|||||||
trusted_dir_server_t *router_get_trusteddirserver_by_digest(const char *d);
|
trusted_dir_server_t *router_get_trusteddirserver_by_digest(const char *d);
|
||||||
trusted_dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d);
|
trusted_dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d);
|
||||||
routerstatus_t *router_pick_trusteddirserver(authority_type_t type, int flags);
|
routerstatus_t *router_pick_trusteddirserver(authority_type_t type, int flags);
|
||||||
|
int router_get_my_share_of_directory_requests(double *v2_share_out,
|
||||||
|
double *v3_share_out);
|
||||||
void router_reset_status_download_failures(void);
|
void router_reset_status_download_failures(void);
|
||||||
void routerlist_add_family(smartlist_t *sl, routerinfo_t *router);
|
void routerlist_add_family(smartlist_t *sl, routerinfo_t *router);
|
||||||
int routers_in_same_family(routerinfo_t *r1, routerinfo_t *r2);
|
int routers_in_same_family(routerinfo_t *r1, routerinfo_t *r2);
|
||||||
|
@ -80,6 +80,11 @@ static smartlist_t *warned_nicknames = NULL;
|
|||||||
* download is low. */
|
* download is low. */
|
||||||
static time_t last_routerdesc_download_attempted = 0;
|
static time_t last_routerdesc_download_attempted = 0;
|
||||||
|
|
||||||
|
/* DOCDOC This is a massive massive kludge XXXX021 */
|
||||||
|
static uint64_t sl_last_total_weighted_bw = 0;
|
||||||
|
static double sl_last_guard_weight = 0.0;
|
||||||
|
static double sl_last_exit_weight = 0.0;
|
||||||
|
|
||||||
/** Return the number of directory authorities whose type matches some bit set
|
/** Return the number of directory authorities whose type matches some bit set
|
||||||
* in <b>type</b> */
|
* in <b>type</b> */
|
||||||
int
|
int
|
||||||
@ -862,6 +867,57 @@ router_pick_directory_server(authority_type_t type, int flags)
|
|||||||
return choice;
|
return choice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** DOCDOC */
|
||||||
|
int
|
||||||
|
router_get_my_share_of_directory_requests(double *v2_share_out,
|
||||||
|
double *v3_share_out)
|
||||||
|
{
|
||||||
|
routerinfo_t *me = router_get_my_routerinfo();
|
||||||
|
routerinfo_t *me_published;
|
||||||
|
routerstatus_t *rs;
|
||||||
|
const int pds_flags = PDS_ALLOW_SELF|PDS_IGNORE_FASCISTFIREWALL;
|
||||||
|
uint32_t bw;
|
||||||
|
*v2_share_out = *v3_share_out = 0.0;
|
||||||
|
if (!me)
|
||||||
|
return -1;
|
||||||
|
me_published = router_get_by_digest(me->cache_info.identity_digest);
|
||||||
|
rs = router_get_consensus_status_by_id(me->cache_info.identity_digest);
|
||||||
|
if (!rs || !me_published)
|
||||||
|
return -1;
|
||||||
|
bw = me_published->bandwidthcapacity;
|
||||||
|
if (!rs->is_running)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Calling for side effect */
|
||||||
|
if (rs->is_v2_dir) {
|
||||||
|
sl_last_total_weighted_bw = 0;
|
||||||
|
router_pick_directory_server(V2_AUTHORITY, pds_flags);
|
||||||
|
if (sl_last_total_weighted_bw != 0) {
|
||||||
|
double share = (double)bw;
|
||||||
|
if (rs->is_exit)
|
||||||
|
share *= sl_last_exit_weight;
|
||||||
|
if (rs->is_possible_guard)
|
||||||
|
share *= sl_last_guard_weight;
|
||||||
|
*v2_share_out = share / U64_TO_DBL(sl_last_total_weighted_bw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rs->version_supports_v3_dir) {
|
||||||
|
sl_last_total_weighted_bw = 0;
|
||||||
|
router_pick_directory_server(V3_AUTHORITY, pds_flags);
|
||||||
|
if (sl_last_total_weighted_bw != 0) {
|
||||||
|
double share = (double)bw;
|
||||||
|
if (rs->is_exit)
|
||||||
|
share *= sl_last_exit_weight;
|
||||||
|
if (rs->is_possible_guard)
|
||||||
|
share *= sl_last_guard_weight;
|
||||||
|
*v2_share_out = share / U64_TO_DBL(sl_last_total_weighted_bw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/** Return the trusted_dir_server_t for the directory authority whose identity
|
/** Return the trusted_dir_server_t for the directory authority whose identity
|
||||||
* key hashes to <b>digest</b>, or NULL if no such authority is known.
|
* key hashes to <b>digest</b>, or NULL if no such authority is known.
|
||||||
*/
|
*/
|
||||||
@ -1577,6 +1633,12 @@ smartlist_choose_by_bandwidth(smartlist_t *sl, bandwidth_weight_rule_t rule,
|
|||||||
total_bw += bandwidths[i];
|
total_bw += bandwidths[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXXX021 this is a kludge to expose these values. */
|
||||||
|
sl_last_total_weighted_bw = total_bw;
|
||||||
|
sl_last_guard_weight = guard_weight;
|
||||||
|
sl_last_exit_weight = exit_weight;
|
||||||
|
|
||||||
log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
|
log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
|
||||||
", exit bw = "U64_FORMAT
|
", exit bw = "U64_FORMAT
|
||||||
", nonexit bw = "U64_FORMAT", exit weight = %lf "
|
", nonexit bw = "U64_FORMAT", exit weight = %lf "
|
||||||
|
Loading…
Reference in New Issue
Block a user