Tor
0.4.7.0-alpha-dev
|
Code to read and apply bandwidth authority data. More...
#include "core/or/or.h"
#include "feature/dirauth/bwauth.h"
#include "app/config/config.h"
#include "feature/dirauth/dirauth_sys.h"
#include "feature/nodelist/networkstatus.h"
#include "feature/nodelist/routerlist.h"
#include "feature/dirparse/ns_parse.h"
#include "feature/dirauth/dirauth_options_st.h"
#include "feature/nodelist/routerinfo_st.h"
#include "feature/nodelist/vote_routerstatus_st.h"
#include "lib/crypt_ops/crypto_format.h"
#include "lib/encoding/keyval.h"
Go to the source code of this file.
Data Structures | |
struct | mbw_cache_entry_t |
Functions | |
void | dirserv_count_measured_bws (const smartlist_t *routers) |
int | dirserv_get_last_n_measured_bws (void) |
STATIC void | dirserv_cache_measured_bw (const measured_bw_line_t *parsed_line, time_t as_of) |
void | dirserv_clear_measured_bw_cache (void) |
STATIC void | dirserv_expire_measured_bw_cache (time_t now) |
int | dirserv_query_measured_bw_cache_kb (const char *node_id, long *bw_kb_out, time_t *as_of_out) |
int | dirserv_has_measured_bw (const char *node_id) |
int | dirserv_get_measured_bw_cache_size (void) |
uint32_t | dirserv_get_credible_bandwidth_kb (const routerinfo_t *ri) |
int | dirserv_read_measured_bandwidths (const char *from_file, smartlist_t *routerstatuses, smartlist_t *bw_file_headers, uint8_t *digest_out) |
STATIC int | measured_bw_line_parse (measured_bw_line_t *out, const char *orig_line, int line_is_after_headers) |
STATIC int | measured_bw_line_apply (measured_bw_line_t *parsed_line, smartlist_t *routerstatuses) |
Variables | |
static int | routers_with_measured_bw = 0 |
static digestmap_t * | mbw_cache = NULL |
Code to read and apply bandwidth authority data.
Code to read and apply guard fraction data.
Definition in file bwauth.c.
STATIC void dirserv_cache_measured_bw | ( | const measured_bw_line_t * | parsed_line, |
time_t | as_of | ||
) |
void dirserv_clear_measured_bw_cache | ( | void | ) |
void dirserv_count_measured_bws | ( | const smartlist_t * | routers | ) |
STATIC void dirserv_expire_measured_bw_cache | ( | time_t | now | ) |
uint32_t dirserv_get_credible_bandwidth_kb | ( | const routerinfo_t * | ri | ) |
Return the bandwidth we believe for assigning flags; prefer measured over advertised, and if we have above a threshold quantity of measured bandwidths, we don't want to ever give flags to unmeasured routers, so return 0.
Definition at line 177 of file bwauth.c.
Referenced by dirauth_set_routerstatus_from_routerinfo(), and dirserv_thinks_router_is_unreliable().
int dirserv_get_last_n_measured_bws | ( | void | ) |
int dirserv_get_measured_bw_cache_size | ( | void | ) |
int dirserv_has_measured_bw | ( | const char * | node_id | ) |
Predicate wrapper for dirserv_query_measured_bw_cache()
Definition at line 159 of file bwauth.c.
Referenced by dirserv_count_measured_bws(), and router_counts_toward_thresholds().
int dirserv_query_measured_bw_cache_kb | ( | const char * | node_id, |
long * | bw_kb_out, | ||
time_t * | as_of_out | ||
) |
Query the cache by identity digest, return value indicates whether we found it. The bw_out and as_of_out pointers receive the cached bandwidth value and the time it was cached if not NULL.
Definition at line 138 of file bwauth.c.
Referenced by dirserv_get_bandwidth_for_router_kb(), dirserv_get_credible_bandwidth_kb(), and dirserv_has_measured_bw().
int dirserv_read_measured_bandwidths | ( | const char * | from_file, |
smartlist_t * | routerstatuses, | ||
smartlist_t * | bw_file_headers, | ||
uint8_t * | digest_out | ||
) |
Read the measured bandwidth list from_file:
Returns -1 on error, 0 otherwise.
If the file can't be read, or is empty:
Otherwise, if there is an error later in the file:
STATIC int measured_bw_line_apply | ( | measured_bw_line_t * | parsed_line, |
smartlist_t * | routerstatuses | ||
) |
STATIC int measured_bw_line_parse | ( | measured_bw_line_t * | out, |
const char * | orig_line, | ||
int | line_is_after_headers | ||
) |
Helper function to parse out a line in the measured bandwidth file into a measured_bw_line_t output structure.
If line_is_after_headers is true, then if we encounter an incomplete bw line, return -1 and warn, since we are after the headers and we should only parse bw lines. Return 0 otherwise.
If line_is_after_headers is false then it means that we are not past the header block yet. If we encounter an incomplete bw line, return -1 but don't warn since there could be additional header lines coming. If we encounter a proper bw line, return 0 (and we got past the headers).
If the line contains "vote=0", stop parsing it, and return -1, so that the line is ignored during voting.
|
static |
Measured bandwidth cache - keys are identity_digests, values are mbw_cache_entry_t *.
Definition at line 68 of file bwauth.c.
Referenced by dirserv_cache_measured_bw(), dirserv_clear_measured_bw_cache(), dirserv_expire_measured_bw_cache(), and dirserv_get_measured_bw_cache_size().
|
static |
Total number of routers with measured bandwidth; this is set by dirserv_count_measured_bs() before the loop in dirserv_generate_networkstatus_vote_obj() and checked by dirserv_get_credible_bandwidth() and dirserv_compute_performance_thresholds()
Definition at line 33 of file bwauth.c.
Referenced by dirserv_count_measured_bws(), and dirserv_get_last_n_measured_bws().