tor  0.4.2.0-alpha-dev
Data Structures | Macros | Typedefs | Functions | Variables
networkstatus.c File Reference
#include "core/or/or.h"
#include "app/config/config.h"
#include "core/mainloop/connection.h"
#include "core/mainloop/mainloop.h"
#include "core/mainloop/netstatus.h"
#include "core/or/channel.h"
#include "core/or/channelpadding.h"
#include "core/or/circuitpadding.h"
#include "core/or/circuitmux.h"
#include "core/or/circuitmux_ewma.h"
#include "core/or/circuitstats.h"
#include "core/or/connection_edge.h"
#include "core/or/connection_or.h"
#include "core/or/dos.h"
#include "core/or/protover.h"
#include "core/or/relay.h"
#include "core/or/scheduler.h"
#include "core/or/versions.h"
#include "feature/client/bridges.h"
#include "feature/client/entrynodes.h"
#include "feature/client/transports.h"
#include "feature/control/control_events.h"
#include "feature/dirauth/reachability.h"
#include "feature/dircache/consdiffmgr.h"
#include "feature/dircache/dirserv.h"
#include "feature/dirclient/dirclient.h"
#include "feature/dirclient/dlstatus.h"
#include "feature/dircommon/directory.h"
#include "feature/dircommon/voting_schedule.h"
#include "feature/dirparse/ns_parse.h"
#include "feature/hibernate/hibernate.h"
#include "feature/nodelist/authcert.h"
#include "feature/nodelist/dirlist.h"
#include "feature/nodelist/fmt_routerstatus.h"
#include "feature/nodelist/microdesc.h"
#include "feature/nodelist/networkstatus.h"
#include "feature/nodelist/node_select.h"
#include "feature/nodelist/nodelist.h"
#include "feature/nodelist/routerinfo.h"
#include "feature/nodelist/routerlist.h"
#include "feature/nodelist/torcert.h"
#include "feature/relay/routermode.h"
#include "lib/crypt_ops/crypto_rand.h"
#include "lib/crypt_ops/crypto_util.h"
#include "feature/dirauth/dirauth_periodic.h"
#include "feature/dirauth/dirvote.h"
#include "feature/dirauth/authmode.h"
#include "feature/dirauth/shared_random.h"
#include "feature/dirauth/voteflags.h"
#include "feature/nodelist/authority_cert_st.h"
#include "feature/dircommon/dir_connection_st.h"
#include "feature/dirclient/dir_server_st.h"
#include "feature/nodelist/document_signature_st.h"
#include "feature/nodelist/networkstatus_st.h"
#include "feature/nodelist/networkstatus_voter_info_st.h"
#include "feature/dirauth/ns_detached_signatures_st.h"
#include "feature/nodelist/node_st.h"
#include "feature/nodelist/routerinfo_st.h"
#include "feature/nodelist/routerlist_st.h"
#include "feature/dirauth/vote_microdesc_hash_st.h"
#include "feature/nodelist/vote_routerstatus_st.h"

Go to the source code of this file.

Data Structures

struct  consensus_waiting_for_certs_t
 

Macros

#define NETWORKSTATUS_PRIVATE
 
#define N_CONSENSUS_BOOTSTRAP_SCHEDULES   2
 
#define CONSENSUS_BOOTSTRAP_SOURCE_AUTHORITY   0
 
#define CONSENSUS_BOOTSTRAP_SOURCE_ANY_DIRSERVER   1
 
#define NETWORKSTATUS_ALLOW_SKEW   (24*60*60)
 
#define AUTHORITY_NS_CACHE_INTERVAL   (10*60)
 
#define NONAUTHORITY_NS_CACHE_INTERVAL   (60*60)
 
#define DELAY_WHILE_FETCHING_CERTS   (20*60)
 
#define MIN_DELAY_FOR_FETCH_CERT_STATUS_FAILURE   (1*60)
 
#define CONSENSUS_MIN_SECONDS_BEFORE_CACHING   120
 
#define REASONABLY_LIVE_TIME   (24*60*60)
 
#define EARLY_CONSENSUS_NOTICE_SKEW   60
 

Typedefs

typedef struct consensus_waiting_for_certs_t consensus_waiting_for_certs_t
 

Functions

static void update_consensus_bootstrap_multiple_downloads (time_t now, const or_options_t *options)
 
static int networkstatus_check_required_protocols (const networkstatus_t *ns, int client_mode, char **warning_out)
 
static int reload_consensus_from_file (const char *fname, const char *flavor, unsigned flags, const char *source_dir)
 
void networkstatus_reset_warnings (void)
 
void networkstatus_reset_download_failures (void)
 
static char * networkstatus_get_cache_fname (int flav, const char *flavorname, int unverified_consensus)
 
static tor_mmap_tnetworkstatus_map_cached_consensus_impl (int flav, const char *flavorname, int unverified_consensus)
 
tor_mmap_tnetworkstatus_map_cached_consensus (const char *flavorname)
 
int router_reload_consensus_networkstatus (void)
 
void vote_routerstatus_free_ (vote_routerstatus_t *rs)
 
void routerstatus_free_ (routerstatus_t *rs)
 
void document_signature_free_ (document_signature_t *sig)
 
document_signature_tdocument_signature_dup (const document_signature_t *sig)
 
void networkstatus_vote_free_ (networkstatus_t *ns)
 
networkstatus_voter_info_tnetworkstatus_get_voter_by_id (networkstatus_t *vote, const char *identity)
 
document_signature_tnetworkstatus_get_voter_sig_by_alg (const networkstatus_voter_info_t *voter, digest_algorithm_t alg)
 
int networkstatus_check_document_signature (const networkstatus_t *consensus, document_signature_t *sig, const authority_cert_t *cert)
 
int networkstatus_check_consensus_signature (networkstatus_t *consensus, int warn)
 
int compare_digest_to_routerstatus_entry (const void *_key, const void **_member)
 
int compare_digest_to_vote_routerstatus_entry (const void *_key, const void **_member)
 
routerstatus_tnetworkstatus_vote_find_mutable_entry (networkstatus_t *ns, const char *digest)
 
 MOCK_IMPL (const routerstatus_t *, networkstatus_vote_find_entry,(networkstatus_t *ns, const char *digest))
 
int networkstatus_vote_find_entry_idx (networkstatus_t *ns, const char *digest, int *found_out)
 
 MOCK_IMPL (routerstatus_t *, router_get_mutable_consensus_status_by_descriptor_digest,(networkstatus_t *consensus, const char *digest))
 
const routerstatus_trouter_get_consensus_status_by_descriptor_digest (networkstatus_t *consensus, const char *digest)
 
static smartlist_trouter_get_descriptor_digests_in_consensus (networkstatus_t *consensus)
 
 MOCK_IMPL (smartlist_t *, router_get_descriptor_digests,(void))
 
 MOCK_IMPL (download_status_t *, router_get_dl_status_by_descriptor_digest,(const char *d))
 
routerstatus_trouter_get_mutable_consensus_status_by_id (const char *digest)
 
const routerstatus_trouter_get_consensus_status_by_id (const char *digest)
 
int we_want_to_fetch_flavor (const or_options_t *options, int flavor)
 
int we_want_to_fetch_unknown_auth_certs (const or_options_t *options)
 
static int check_consensus_waiting_for_certs (int flavor, time_t now, download_status_t *dls)
 
static void update_consensus_networkstatus_downloads (time_t now)
 
static void update_consensus_bootstrap_attempt_downloads (time_t now, download_status_t *dls, download_want_authority_t want_authority)
 
void networkstatus_consensus_download_failed (int status_code, const char *flavname)
 
static void update_consensus_networkstatus_fetch_time_impl (time_t now, int flav)
 
void update_consensus_networkstatus_fetch_time (time_t now)
 
int should_delay_dir_fetches (const or_options_t *options, const char **msg_out)
 
void update_networkstatus_downloads (time_t now)
 
void update_certificate_downloads (time_t now)
 
int consensus_is_waiting_for_certs (void)
 
 MOCK_IMPL (download_status_t *, networkstatus_get_dl_status_by_flavor,(consensus_flavor_t flavor))
 
 MOCK_IMPL (download_status_t *, networkstatus_get_dl_status_by_flavor_bootstrap,(consensus_flavor_t flavor))
 
 MOCK_IMPL (download_status_t *, networkstatus_get_dl_status_by_flavor_running,(consensus_flavor_t flavor))
 
 MOCK_IMPL (networkstatus_t *, networkstatus_get_latest_consensus,(void))
 
 MOCK_IMPL (networkstatus_t *, networkstatus_get_latest_consensus_by_flavor,(consensus_flavor_t f))
 
 MOCK_IMPL (networkstatus_t *, networkstatus_get_live_consensus,(time_t now))
 
int networkstatus_is_live (const networkstatus_t *ns, time_t now)
 
int networkstatus_consensus_reasonably_live (const networkstatus_t *consensus, time_t now)
 
int networkstatus_valid_after_is_reasonably_live (time_t valid_after, time_t now)
 
int networkstatus_valid_until_is_reasonably_live (time_t valid_until, time_t now)
 
 MOCK_IMPL (networkstatus_t *, networkstatus_get_reasonably_live_consensus,(time_t now, int flavor))
 
 MOCK_IMPL (int, networkstatus_consensus_is_bootstrapping,(time_t now))
 
int networkstatus_consensus_can_use_multiple_directories (const or_options_t *options)
 
 MOCK_IMPL (int, networkstatus_consensus_can_use_extra_fallbacks,(const or_options_t *options))
 
int networkstatus_consensus_is_already_downloading (const char *resource)
 
int networkstatus_consensus_has_ipv6 (const or_options_t *options)
 
static int routerstatus_has_changed (const routerstatus_t *a, const routerstatus_t *b)
 
static void notify_control_networkstatus_changed (const networkstatus_t *old_c, const networkstatus_t *new_c)
 
static void notify_before_networkstatus_changes (const networkstatus_t *old_c, const networkstatus_t *new_c)
 
static void notify_after_networkstatus_changes (void)
 
static void networkstatus_copy_old_consensus_info (networkstatus_t *new_c, const networkstatus_t *old_c)
 
static void handle_missing_protocol_warning_impl (const networkstatus_t *c, int is_client)
 
static void handle_missing_protocol_warning (const networkstatus_t *c, const or_options_t *options)
 
STATIC void warn_early_consensus (const networkstatus_t *c, const char *flavor, time_t now)
 
int networkstatus_set_current_consensus (const char *consensus, size_t consensus_len, const char *flavor, unsigned flags, const char *source_dir)
 
void networkstatus_note_certs_arrived (const char *source_dir)
 
void routers_update_all_from_networkstatus (time_t now, int dir_version)
 
void routers_update_status_from_consensus_networkstatus (smartlist_t *routers, int reset_failures)
 
void signed_descs_update_status_from_consensus_networkstatus (smartlist_t *descs)
 
char * networkstatus_getinfo_helper_single (const routerstatus_t *rs)
 
void set_routerstatus_from_routerinfo (routerstatus_t *rs, const node_t *node, const routerinfo_t *ri)
 
char * networkstatus_getinfo_by_purpose (const char *purpose_string, time_t now)
 
static int32_t get_net_param_from_list (smartlist_t *net_params, const char *param_name, int32_t default_val, int32_t min_val, int32_t max_val)
 
 MOCK_IMPL (int32_t, networkstatus_get_param,(const networkstatus_t *ns, const char *param_name, int32_t default_val, int32_t min_val, int32_t max_val))
 
int32_t networkstatus_get_overridable_param (const networkstatus_t *ns, int32_t torrc_value, const char *param_name, int32_t default_val, int32_t min_val, int32_t max_val)
 
int networkstatus_get_weight_scale_param (networkstatus_t *ns)
 
int32_t networkstatus_get_bw_weight (networkstatus_t *ns, const char *weight_name, int32_t default_val)
 
const char * networkstatus_get_flavor_name (consensus_flavor_t flav)
 
int networkstatus_parse_flavor_name (const char *flavname)
 
int client_would_use_router (const routerstatus_t *rs, time_t now)
 
int getinfo_helper_networkstatus (control_connection_t *conn, const char *question, char **answer, const char **errmsg)
 
void networkstatus_free_all (void)
 

Variables

STATIC networkstatus_tcurrent_ns_consensus = NULL
 
STATIC networkstatus_tcurrent_md_consensus = NULL
 
static consensus_waiting_for_certs_t consensus_waiting_for_certs [N_CONSENSUS_FLAVORS]
 
static time_t time_to_download_next_consensus [N_CONSENSUS_FLAVORS]
 
static download_status_t consensus_dl_status [N_CONSENSUS_FLAVORS]
 
static download_status_t consensus_bootstrap_dl_status [N_CONSENSUS_BOOTSTRAP_SCHEDULES]
 
static int have_warned_about_old_version = 0
 
static int have_warned_about_new_version = 0
 

Detailed Description

Functions and structures for handling networkstatus documents as a client or as a directory cache.

A consensus networkstatus object is created by the directory authorities. It authenticates a set of network parameters–most importantly, the list of all the relays in the network. This list of relays is represented as an array of routerstatus_t objects.

There are currently two flavors of consensus. With the older "NS" flavor, each relay is associated with a digest of its router descriptor. Tor instances that use this consensus keep the list of router descriptors as routerinfo_t objects stored and managed in routerlist.c. With the newer "microdesc" flavor, each relay is associated with a digest of the microdescriptor that the authorities made for it. These are stored and managed in microdesc.c. Information about the router is divided between the the networkstatus and the microdescriptor according to the general rule that microdescriptors should hold information that changes much less frequently than the information in the networkstatus.

Modern clients use microdescriptor networkstatuses. Directory caches need to keep both kinds of networkstatus document, so they can serve them.

This module manages fetching, holding, storing, updating, and validating networkstatus objects. The download-and-validate process is slightly complicated by the fact that the keys you need to validate a consensus are stored in the authority certificates, which you might not have yet when you download the consensus.

Definition in file networkstatus.c.

Macro Definition Documentation

◆ AUTHORITY_NS_CACHE_INTERVAL

#define AUTHORITY_NS_CACHE_INTERVAL   (10*60)

How frequently do directory authorities re-download fresh networkstatus documents?

Definition at line 847 of file networkstatus.c.

◆ CONSENSUS_MIN_SECONDS_BEFORE_CACHING

#define CONSENSUS_MIN_SECONDS_BEFORE_CACHING   120

How long do we (as a cache) wait after a consensus becomes non-fresh before trying to fetch another?

Definition at line 1133 of file networkstatus.c.

◆ DELAY_WHILE_FETCHING_CERTS

#define DELAY_WHILE_FETCHING_CERTS   (20*60)

How long will we hang onto a possibly live consensus for which we're fetching certs before we check whether there is a better one?

Definition at line 905 of file networkstatus.c.

◆ MIN_DELAY_FOR_FETCH_CERT_STATUS_FAILURE

#define MIN_DELAY_FOR_FETCH_CERT_STATUS_FAILURE   (1*60)

What is the minimum time we need to have waited fetching certs, before we increment the consensus download schedule on failure?

Definition at line 909 of file networkstatus.c.

◆ NETWORKSTATUS_ALLOW_SKEW

#define NETWORKSTATUS_ALLOW_SKEW   (24*60*60)

How far in the future do we allow a network-status to get before removing it? (seconds)

Definition at line 688 of file networkstatus.c.

◆ NONAUTHORITY_NS_CACHE_INTERVAL

#define NONAUTHORITY_NS_CACHE_INTERVAL   (60*60)

How frequently do non-authority directory caches re-download fresh networkstatus documents?

Definition at line 851 of file networkstatus.c.

Typedef Documentation

◆ consensus_waiting_for_certs_t

A v3 consensus networkstatus that we've received, but which we don't have enough certificates to be happy about.

Function Documentation

◆ client_would_use_router()

int client_would_use_router ( const routerstatus_t rs,
time_t  now 
)

Return 0 if this routerstatus is obsolete, too new, isn't running, or otherwise not a descriptor that we would make any use of even if we had it. Else return 1.

Definition at line 2609 of file networkstatus.c.

References routerstatus_t::is_flagged_running, OLD_ROUTER_DESC_MAX_AGE, and routerstatus_t::published_on.

◆ compare_digest_to_routerstatus_entry()

int compare_digest_to_routerstatus_entry ( const void *  _key,
const void **  _member 
)

Helper for bsearching a list of routerstatus_t pointers: compare a digest in the key to the identity digest of a routerstatus_t.

Definition at line 693 of file networkstatus.c.

References DIGEST_LEN, routerstatus_t::identity_digest, and tor_memcmp().

Referenced by networkstatus_vote_find_entry_idx(), networkstatus_vote_find_mutable_entry(), and router_get_mutable_consensus_status_by_id().

◆ compare_digest_to_vote_routerstatus_entry()

int compare_digest_to_vote_routerstatus_entry ( const void *  _key,
const void **  _member 
)

Helper for bsearching a list of routerstatus_t pointers: compare a digest in the key to the identity digest of a routerstatus_t.

Definition at line 703 of file networkstatus.c.

References DIGEST_LEN, routerstatus_t::identity_digest, vote_routerstatus_t::status, and tor_memcmp().

Referenced by measured_bw_line_apply().

◆ consensus_is_waiting_for_certs()

int consensus_is_waiting_for_certs ( void  )

Return 1 if we have a consensus but we don't have enough certificates to start using it yet.

Definition at line 1332 of file networkstatus.c.

References consensus_waiting_for_certs_t::consensus, and consensus_waiting_for_certs.

Referenced by MOCK_IMPL().

◆ document_signature_dup()

document_signature_t* document_signature_dup ( const document_signature_t sig)

Return a newly allocated copy of sig

Definition at line 334 of file networkstatus.c.

◆ document_signature_free_()

void document_signature_free_ ( document_signature_t sig)

Free all storage held in sig

Definition at line 326 of file networkstatus.c.

References document_signature_t::signature, and tor_free.

◆ getinfo_helper_networkstatus()

int getinfo_helper_networkstatus ( control_connection_t conn,
const char *  question,
char **  answer,
const char **  errmsg 
)

If question is a string beginning with "ns/" in a format the control interface expects for a GETINFO question, set *answer to a newly-allocated string containing networkstatus lines for the appropriate ORs. Return 0 on success, -1 on unrecognized question format.

Definition at line 2634 of file networkstatus.c.

◆ handle_missing_protocol_warning()

static void handle_missing_protocol_warning ( const networkstatus_t c,
const or_options_t options 
)
static

Called when we have received a networkstatus c. If there are any required protocols we are missing, log an error and exit immediately. If there are any recommended protocols we are missing, warn.

Definition at line 1815 of file networkstatus.c.

References handle_missing_protocol_warning_impl(), and options_any_client_port_set().

◆ handle_missing_protocol_warning_impl()

static void handle_missing_protocol_warning_impl ( const networkstatus_t c,
int  is_client 
)
static

Helper for handle_missing_protocol_warning: handles either the client case (if is_client is set) or the server case otherwise.

Definition at line 1789 of file networkstatus.c.

References LD_GENERAL, LOG_ERR, LOG_WARN, networkstatus_check_required_protocols(), and tor_log().

Referenced by handle_missing_protocol_warning().

◆ MOCK_IMPL() [1/14]

MOCK_IMPL ( const routerstatus_t ,
networkstatus_vote_find_entry  ,
(networkstatus_t *ns, const char *digest)   
)

Return the entry in ns for the identity digest digest, or NULL if none was found.

Definition at line 721 of file networkstatus.c.

References networkstatus_vote_find_mutable_entry().

◆ MOCK_IMPL() [2/14]

MOCK_IMPL ( routerstatus_t ,
router_get_mutable_consensus_status_by_descriptor_digest  ,
( networkstatus_t *consensus, const char *digest)   
)

As router_get_consensus_status_by_descriptor_digest, but does not return a const pointer.

Definition at line 742 of file networkstatus.c.

References networkstatus_t::desc_digest_map, networkstatus_t::routerstatus_list, and SMARTLIST_FOREACH.

◆ MOCK_IMPL() [3/14]

MOCK_IMPL ( smartlist_t ,
router_get_descriptor_digests  ,
(void)   
)

Return a smartlist of all router descriptor digests in the current consensus

Definition at line 797 of file networkstatus.c.

References current_ns_consensus, and router_get_descriptor_digests_in_consensus().

◆ MOCK_IMPL() [4/14]

MOCK_IMPL ( download_status_t ,
router_get_dl_status_by_descriptor_digest  ,
(const char *d)   
)

Given the digest of a router descriptor, return its current download status, or NULL if the digest is unrecognized.

Definition at line 812 of file networkstatus.c.

References current_ns_consensus.

◆ MOCK_IMPL() [5/14]

MOCK_IMPL ( download_status_t ,
networkstatus_get_dl_status_by_flavor  ,
(consensus_flavor_t flavor)   
)

Look up the currently active (depending on bootstrap status) download status for this consensus flavor and return a pointer to it.

Definition at line 1341 of file networkstatus.c.

References N_CONSENSUS_FLAVORS.

◆ MOCK_IMPL() [6/14]

MOCK_IMPL ( download_status_t ,
networkstatus_get_dl_status_by_flavor_bootstrap  ,
(consensus_flavor_t flavor)   
)

Look up the bootstrap download status for this consensus flavor and return a pointer to it.

Definition at line 1358 of file networkstatus.c.

References N_CONSENSUS_FLAVORS.

◆ MOCK_IMPL() [7/14]

MOCK_IMPL ( download_status_t ,
networkstatus_get_dl_status_by_flavor_running  ,
(consensus_flavor_t flavor)   
)

Look up the running (non-bootstrap) download status for this consensus flavor and return a pointer to it.

Definition at line 1372 of file networkstatus.c.

References consensus_dl_status, and N_CONSENSUS_FLAVORS.

◆ MOCK_IMPL() [8/14]

MOCK_IMPL ( networkstatus_t ,
networkstatus_get_latest_consensus  ,
(void)   
)

Return the most recent consensus that we have downloaded, or NULL if we don't have one. May return future or expired consensuses.

Definition at line 1386 of file networkstatus.c.

References current_md_consensus, current_ns_consensus, and we_use_microdescriptors_for_circuits().

◆ MOCK_IMPL() [9/14]

MOCK_IMPL ( networkstatus_t ,
networkstatus_get_latest_consensus_by_flavor  ,
(consensus_flavor_t f)   
)

Return the latest consensus we have whose flavor matches f, or NULL if we don't have one. May return future or expired consensuses.

Definition at line 1397 of file networkstatus.c.

◆ MOCK_IMPL() [10/14]

MOCK_IMPL ( networkstatus_t ,
networkstatus_get_live_consensus  ,
(time_t now)   
)

Return the most recent consensus that we have downloaded, or NULL if it is no longer live.

Definition at line 1412 of file networkstatus.c.

References networkstatus_is_live().

◆ MOCK_IMPL() [11/14]

MOCK_IMPL ( networkstatus_t ,
networkstatus_get_reasonably_live_consensus  ,
(time_t now, int flavor)   
)

As networkstatus_get_live_consensus(), but is way more tolerant of expired and future consensuses.

Definition at line 1473 of file networkstatus.c.

References networkstatus_consensus_reasonably_live().

◆ MOCK_IMPL() [12/14]

MOCK_IMPL ( int  ,
networkstatus_consensus_is_bootstrapping  ,
(time_t now)   
)

Check if we need to download a consensus during tor's bootstrap phase. If we have no consensus, or our consensus is unusably old, return 1. As soon as we have received a consensus, return 0, even if we don't have enough certificates to validate it. If a fallback directory gives us a consensus we can never get certs for, check_consensus_waiting_for_certs() will wait 20 minutes before failing the cert downloads. After that, a new consensus will be fetched from a randomly chosen fallback.

Definition at line 1493 of file networkstatus.c.

References consensus_is_waiting_for_certs().

◆ MOCK_IMPL() [13/14]

MOCK_IMPL ( int  ,
networkstatus_consensus_can_use_extra_fallbacks  ,
(const or_options_t *options)   
)

Check if we can use fallback directory mirrors for a consensus download. If we have fallbacks and don't want to fetch from the authorities, we can use them.

Definition at line 1529 of file networkstatus.c.

References tor_assert().

◆ MOCK_IMPL() [14/14]

MOCK_IMPL ( int32_t  ,
networkstatus_get_param  ,
(const networkstatus_t *ns, const char *param_name, int32_t default_val, int32_t min_val, int32_t max_val)   
)

Return the value of a integer parameter from the networkstatus ns whose name is param_name. If ns is NULL, try loading the latest consensus ourselves. Return default_val if no latest consensus, or if it has no parameter called param_name. Make sure the value parsed from the consensus is at least min_val and at most max_val and raise/cap the parsed value if necessary.

Definition at line 2500 of file networkstatus.c.

References networkstatus_t::net_params.

◆ networkstatus_check_consensus_signature()

int networkstatus_check_consensus_signature ( networkstatus_t consensus,
int  warn 
)

Given a v3 networkstatus consensus in consensus, check every as-yet-unchecked signature on consensus. Return 1 if there is a signature from every recognized authority on it, 0 if there are enough good signatures from recognized authorities on it, -1 if we might get enough good signatures by fetching missing certificates, and -2 otherwise. Log messages at INFO or WARN: if warn is over 1, warn about every problem; if warn is at least 1, warn only if we can't get enough signatures; if warn is negative, log nothing at all.

Definition at line 508 of file networkstatus.c.

References authority_cert_dl_looks_uncertain(), authority_cert_get_by_digests(), DIGEST_LEN, authority_cert_t::expires, get_n_authorities(), networkstatus_check_document_signature(), smartlist_add(), SMARTLIST_FOREACH_BEGIN, tor_assert(), tor_memeq(), networkstatus_t::type, V3_DIRINFO, and networkstatus_t::voters.

Referenced by networkstatus_note_certs_arrived().

◆ networkstatus_check_document_signature()

int networkstatus_check_document_signature ( const networkstatus_t consensus,
document_signature_t sig,
const authority_cert_t cert 
)

Check whether the signature sig is correctly signed with the signing key in cert. Return -1 if cert doesn't match the signing key; otherwise set the good_signature or bad_signature flag on voter, and return 0.

Definition at line 455 of file networkstatus.c.

References document_signature_t::alg, and DIGEST_LEN.

Referenced by networkstatus_check_consensus_signature().

◆ networkstatus_check_required_protocols()

int networkstatus_check_required_protocols ( const networkstatus_t ns,
int  client_mode,
char **  warning_out 
)
static

Check whether the networkstatus ns lists any protocol versions as "required" or "recommended" that we do not support. If so, set *warning_out to a newly allocated string describing the problem.

Return 1 if we should exit, 0 if we should not.

Definition at line 2717 of file networkstatus.c.

References protover_all_supported(), networkstatus_t::recommended_relay_protocols, tor_asprintf(), tor_assert(), tor_free, tor_get_approx_release_date(), and networkstatus_t::valid_after.

Referenced by handle_missing_protocol_warning_impl().

◆ networkstatus_consensus_can_use_multiple_directories()

int networkstatus_consensus_can_use_multiple_directories ( const or_options_t options)

Check if we can use multiple directories for a consensus download. Only clients (including bridge relays, which act like clients) benefit from multiple simultaneous consensus downloads.

Definition at line 1519 of file networkstatus.c.

Referenced by update_consensus_bootstrap_multiple_downloads(), and update_consensus_networkstatus_downloads().

◆ networkstatus_consensus_download_failed()

void networkstatus_consensus_download_failed ( int  status_code,
const char *  flavname 
)

Called when an attempt to download a consensus fails: note that the failure occurred, and possibly retry.

Definition at line 1119 of file networkstatus.c.

References consensus_dl_status, download_status_failed, N_CONSENSUS_FLAVORS, networkstatus_parse_flavor_name(), tor_assert(), and update_consensus_networkstatus_downloads().

◆ networkstatus_consensus_reasonably_live()

int networkstatus_consensus_reasonably_live ( const networkstatus_t consensus,
time_t  now 
)

Determine if consensus is valid, or expired recently enough, or not too far in the future, so that we can still use it.

Return 1 if the consensus is reasonably live, or 0 if it is too old or too new.

Definition at line 1437 of file networkstatus.c.

Referenced by check_expired_networkstatus_callback(), and MOCK_IMPL().

◆ networkstatus_copy_old_consensus_info()

static void networkstatus_copy_old_consensus_info ( networkstatus_t new_c,
const networkstatus_t old_c 
)
static

Copy all the ancillary information (like router download status and so on) from old_c to new_c.

Definition at line 1690 of file networkstatus.c.

◆ networkstatus_free_all()

void networkstatus_free_all ( void  )

Free all storage held locally in this module.

Definition at line 2765 of file networkstatus.c.

◆ networkstatus_get_bw_weight()

int32_t networkstatus_get_bw_weight ( networkstatus_t ns,
const char *  weight_name,
int32_t  default_val 
)

Return the value of a integer bw weight parameter from the networkstatus ns whose name is weight_name. If ns is NULL, try loading the latest consensus ourselves. Return default_val if no latest consensus, or if it has no parameter called weight_name.

Definition at line 2553 of file networkstatus.c.

References networkstatus_get_weight_scale_param(), and networkstatus_t::weight_params.

Referenced by networkstatus_verify_bw_weights().

◆ networkstatus_get_cache_fname()

static char* networkstatus_get_cache_fname ( int  flav,
const char *  flavorname,
int  unverified_consensus 
)
static

Return the filename used to cache the consensus of a given flavor

Definition at line 219 of file networkstatus.c.

Referenced by networkstatus_map_cached_consensus_impl(), and networkstatus_note_certs_arrived().

◆ networkstatus_get_flavor_name()

const char* networkstatus_get_flavor_name ( consensus_flavor_t  flav)

◆ networkstatus_get_overridable_param()

int32_t networkstatus_get_overridable_param ( const networkstatus_t ns,
int32_t  torrc_value,
const char *  param_name,
int32_t  default_val,
int32_t  min_val,
int32_t  max_val 
)

As networkstatus_get_param(), but check torrc_value before checking the consensus. If torrc_value is in-range, then return it instead of the value from the consensus.

Definition at line 2520 of file networkstatus.c.

◆ networkstatus_get_voter_by_id()

networkstatus_voter_info_t* networkstatus_get_voter_by_id ( networkstatus_t vote,
const char *  identity 
)

Return the voter info from vote for the voter whose identity digest is identity, or NULL if no such voter is associated with vote.

Definition at line 425 of file networkstatus.c.

References SMARTLIST_FOREACH, and networkstatus_t::voters.

◆ networkstatus_get_voter_sig_by_alg()

document_signature_t* networkstatus_get_voter_sig_by_alg ( const networkstatus_voter_info_t voter,
digest_algorithm_t  alg 
)

Return the signature made by voter using the algorithm alg, or NULL if none is found.

Definition at line 439 of file networkstatus.c.

References networkstatus_voter_info_t::sigs, and SMARTLIST_FOREACH.

◆ networkstatus_get_weight_scale_param()

int networkstatus_get_weight_scale_param ( networkstatus_t ns)

Retrieve the consensus parameter that governs the fixed-point precision of our network balancing 'bandwidth-weights' (which are themselves integer consensus values). We divide them by this value and ensure they never exceed this value.

Definition at line 2540 of file networkstatus.c.

References BW_WEIGHT_SCALE.

Referenced by networkstatus_get_bw_weight(), and networkstatus_verify_bw_weights().

◆ networkstatus_getinfo_by_purpose()

char* networkstatus_getinfo_by_purpose ( const char *  purpose_string,
time_t  now 
)

Alloc and return a string describing routerstatuses for the most recent info of each router we know about that is of purpose purpose_string. Return NULL if unrecognized purpose.

Right now this function is oriented toward listing bridges (you shouldn't use this for general-purpose routers, since those should be listed from the consensus, not from the routers list).

Definition at line 2420 of file networkstatus.c.

References router_get_routerlist(), ROUTER_MAX_AGE_TO_PUBLISH, and router_purpose_from_string().

◆ networkstatus_getinfo_helper_single()

char* networkstatus_getinfo_helper_single ( const routerstatus_t rs)

Generate networkstatus lines for a single routerstatus_t object, and return the result in a newly allocated string. Used only by controller interface (for now.)

Definition at line 2362 of file networkstatus.c.

References NS_CONTROL_PORT, and routerstatus_format_entry().

◆ networkstatus_is_live()

int networkstatus_is_live ( const networkstatus_t ns,
time_t  now 
)

Given a consensus in ns, return true iff currently live and unexpired.

Definition at line 1425 of file networkstatus.c.

References networkstatus_t::valid_after.

Referenced by MOCK_IMPL().

◆ networkstatus_map_cached_consensus()

tor_mmap_t* networkstatus_map_cached_consensus ( const char *  flavorname)

Map the file containing the current cached consensus of flavor flavorname

Definition at line 259 of file networkstatus.c.

References networkstatus_map_cached_consensus_impl(), and networkstatus_parse_flavor_name().

◆ networkstatus_map_cached_consensus_impl()

static tor_mmap_t* networkstatus_map_cached_consensus_impl ( int  flav,
const char *  flavorname,
int  unverified_consensus 
)
static

Read and and return the cached consensus of type flavorname. If unverified is false, get the one we haven't verified. Return NULL if the file isn't there.

Definition at line 244 of file networkstatus.c.

References networkstatus_get_cache_fname().

Referenced by networkstatus_map_cached_consensus().

◆ networkstatus_note_certs_arrived()

void networkstatus_note_certs_arrived ( const char *  source_dir)

Called when we have gotten more certificates: see whether we can now verify a pending consensus.

If source_dir is non-NULL, it's the identity digest for a directory that we've just successfully retrieved certificates from, so try it first to fetch any missing certificates.

Definition at line 2203 of file networkstatus.c.

References consensus_waiting_for_certs_t::consensus, consensus_waiting_for_certs, N_CONSENSUS_FLAVORS, networkstatus_check_consensus_signature(), networkstatus_get_cache_fname(), networkstatus_get_flavor_name(), and reload_consensus_from_file().

◆ networkstatus_parse_flavor_name()

int networkstatus_parse_flavor_name ( const char *  flavname)

Return the consensus_flavor_t value for the flavor called flavname, or -1 if the flavor is not recognized.

Definition at line 2595 of file networkstatus.c.

Referenced by networkstatus_consensus_download_failed(), networkstatus_map_cached_consensus(), and networkstatus_set_current_consensus().

◆ networkstatus_reset_download_failures()

void networkstatus_reset_download_failures ( void  )

Reset the descriptor download failure count on all networkstatus docs, so that we can retry any long-failed documents immediately.

Definition at line 203 of file networkstatus.c.

◆ networkstatus_reset_warnings()

void networkstatus_reset_warnings ( void  )

Forget that we've warned about anything networkstatus-related, so we will give fresh warnings if the same behavior happens again.

Definition at line 190 of file networkstatus.c.

References have_warned_about_new_version, have_warned_about_old_version, node_t::name_lookup_warned, and SMARTLIST_FOREACH.

Referenced by routerlist_reset_warnings().

◆ networkstatus_set_current_consensus()

int networkstatus_set_current_consensus ( const char *  consensus,
size_t  consensus_len,
const char *  flavor,
unsigned  flags,
const char *  source_dir 
)

Try to replace the current cached v3 networkstatus with the one in consensus. If we don't have enough certificates to validate it, store it in consensus_waiting_for_certs and launch a certificate fetch.

If flags & NSSET_FROM_CACHE, this networkstatus has come from the disk cache. If flags & NSSET_WAS_WAITING_FOR_CERTS, this networkstatus was already received, but we were waiting for certificates on it. If flags & NSSET_DONT_DOWNLOAD_CERTS, do not launch certificate downloads as needed. If flags & NSSET_ACCEPT_OBSOLETE, then we should be willing to take this consensus, even if it comes from many days in the past.

If source_dir is non-NULL, it's the identity digest for a directory that we've just successfully retrieved a consensus or certificates from, so try it first to fetch any missing certificates.

Return 0 on success, <0 on failure. On failure, caller should increment the failure count as appropriate.

We return -1 for mild failures that don't need to be reported to the user, and -2 for more serious problems.

Definition at line 1900 of file networkstatus.c.

References approx_time(), and networkstatus_parse_flavor_name().

◆ networkstatus_valid_after_is_reasonably_live()

int networkstatus_valid_after_is_reasonably_live ( time_t  valid_after,
time_t  now 
)

As networkstatus_consensus_reasonably_live, but takes a valid_after time, and checks to see if it is in the past, or not too far in the future.

Definition at line 1455 of file networkstatus.c.

◆ networkstatus_valid_until_is_reasonably_live()

int networkstatus_valid_until_is_reasonably_live ( time_t  valid_until,
time_t  now 
)

As networkstatus_consensus_reasonably_live, but takes a valid_until time, and checks to see if it is in the future, or not too far in the past.

Definition at line 1465 of file networkstatus.c.

◆ networkstatus_vote_find_entry_idx()

int networkstatus_vote_find_entry_idx ( networkstatus_t ns,
const char *  digest,
int *  found_out 
)

Search the routerstatuses in ns for one whose identity digest is digest. Return value and set *found_out as for smartlist_bsearch_idx().

Definition at line 732 of file networkstatus.c.

References compare_digest_to_routerstatus_entry(), networkstatus_t::routerstatus_list, and smartlist_bsearch_idx().

◆ networkstatus_vote_find_mutable_entry()

routerstatus_t* networkstatus_vote_find_mutable_entry ( networkstatus_t ns,
const char *  digest 
)

As networkstatus_find_entry, but do not return a const pointer

Definition at line 713 of file networkstatus.c.

References compare_digest_to_routerstatus_entry(), networkstatus_t::routerstatus_list, and smartlist_bsearch().

Referenced by MOCK_IMPL().

◆ networkstatus_vote_free_()

void networkstatus_vote_free_ ( networkstatus_t ns)

◆ notify_control_networkstatus_changed()

static void notify_control_networkstatus_changed ( const networkstatus_t old_c,
const networkstatus_t new_c 
)
static

Notify controllers of any router status entries that changed between old_c and new_c.

Definition at line 1635 of file networkstatus.c.

References control_event_is_interesting(), and control_event_newconsensus().

◆ reload_consensus_from_file()

static int reload_consensus_from_file ( const char *  fname,
const char *  flavor,
unsigned  flags,
const char *  source_dir 
)
static

Helper: Read the current consensus of type flavor from fname. Flags and return values are as for networkstatus_set_current_consensus().

Definition at line 1752 of file networkstatus.c.

Referenced by networkstatus_note_certs_arrived().

◆ router_get_consensus_status_by_descriptor_digest()

const routerstatus_t* router_get_consensus_status_by_descriptor_digest ( networkstatus_t consensus,
const char *  digest 
)

Return the consensus view of the status of the router whose current descriptor digest in consensus is digest, or NULL if no such router is known.

Definition at line 766 of file networkstatus.c.

Referenced by signed_descs_update_status_from_consensus_networkstatus().

◆ router_get_consensus_status_by_id()

const routerstatus_t* router_get_consensus_status_by_id ( const char *  digest)

Return the consensus view of the status of the router whose identity digest is digest, or NULL if we don't know about any such router.

Definition at line 840 of file networkstatus.c.

References router_get_mutable_consensus_status_by_id().

Referenced by connection_or_digest_is_known_relay().

◆ router_get_descriptor_digests_in_consensus()

static smartlist_t* router_get_descriptor_digests_in_consensus ( networkstatus_t consensus)
static

Return a smartlist of all router descriptor digests in a consensus

Definition at line 775 of file networkstatus.c.

References networkstatus_t::desc_digest_map.

Referenced by MOCK_IMPL().

◆ router_get_mutable_consensus_status_by_id()

routerstatus_t* router_get_mutable_consensus_status_by_id ( const char *  digest)

As router_get_consensus_status_by_id, but do not return a const pointer

Definition at line 827 of file networkstatus.c.

References compare_digest_to_routerstatus_entry(), networkstatus_t::routerstatus_list, and smartlist_bsearch().

Referenced by mark_all_dirservers_up(), and router_get_consensus_status_by_id().

◆ router_reload_consensus_networkstatus()

int router_reload_consensus_networkstatus ( void  )

Read every cached v3 consensus networkstatus from the disk.

Definition at line 269 of file networkstatus.c.

◆ routers_update_all_from_networkstatus()

void routers_update_all_from_networkstatus ( time_t  now,
int  dir_version 
)

If the network-status list has changed since the last time we called this function, update the status of every routerinfo from the network-status list. If dir_version is 2, it's a v2 networkstatus that changed. If dir_version is 3, it's a v3 consensus that changed.

Definition at line 2226 of file networkstatus.c.

References router_get_routerlist().

◆ routers_update_status_from_consensus_networkstatus()

void routers_update_status_from_consensus_networkstatus ( smartlist_t routers,
int  reset_failures 
)

Given a list routers of routerinfo_t *, update each status field according to our current consensus networkstatus. May re-order routers.

Definition at line 2290 of file networkstatus.c.

Referenced by router_load_routers_from_string().

◆ routerstatus_free_()

void routerstatus_free_ ( routerstatus_t rs)

Free all storage held by the routerstatus object rs.

Definition at line 316 of file networkstatus.c.

References routerstatus_t::exitsummary, and tor_free.

◆ routerstatus_has_changed()

static int routerstatus_has_changed ( const routerstatus_t a,
const routerstatus_t b 
)
static

Given two router status entries for the same router identity, return 1 if if the contents have changed between them. Otherwise, return 0.

Definition at line 1608 of file networkstatus.c.

References DIGEST_LEN, routerstatus_t::identity_digest, routerstatus_t::nickname, tor_assert(), and tor_memeq().

◆ set_routerstatus_from_routerinfo()

void set_routerstatus_from_routerinfo ( routerstatus_t rs,
const node_t node,
const routerinfo_t ri 
)

Extract status information from ri and from other authority functions and store it in rs. rs is zeroed out before it is set.

We assume that node->is_running has already been set, e.g. by dirserv_set_router_is_running(ri, now);

Definition at line 2378 of file networkstatus.c.

References routerstatus_t::is_authority.

Referenced by dirauth_set_routerstatus_from_routerinfo().

◆ should_delay_dir_fetches()

int should_delay_dir_fetches ( const or_options_t options,
const char **  msg_out 
)

Return 1 if there's a reason we shouldn't try any directory fetches yet (e.g. we demand bridges and none are yet known). Else return 0.

If we return 1 and msg_out is provided, set msg_out to an explanation of why directory fetches are delayed. (If we return 0, we set msg_out to NULL.)

Definition at line 1250 of file networkstatus.c.

References or_options_t::DisableNetwork.

Referenced by fetch_networkstatus_callback(), launch_descriptor_fetches_callback(), MOCK_IMPL(), update_all_descriptor_downloads(), update_consensus_networkstatus_downloads(), update_extrainfo_downloads(), update_microdesc_downloads(), update_networkstatus_downloads(), and update_router_descriptor_downloads().

◆ signed_descs_update_status_from_consensus_networkstatus()

void signed_descs_update_status_from_consensus_networkstatus ( smartlist_t descs)

Given a list of signed_descriptor_t, update their fields (mainly, when they were last listed) from the most recent consensus.

Definition at line 2335 of file networkstatus.c.

References current_ns_consensus, networkstatus_t::desc_digest_map, DIGEST_LEN, router_get_consensus_status_by_descriptor_digest(), SMARTLIST_FOREACH, and networkstatus_t::valid_until.

◆ update_certificate_downloads()

void update_certificate_downloads ( time_t  now)

Launch requests as appropriate for missing directory authority certificates.

Definition at line 1314 of file networkstatus.c.

References authority_certs_fetch_missing(), consensus_waiting_for_certs, current_md_consensus, current_ns_consensus, and N_CONSENSUS_FLAVORS.

◆ update_consensus_bootstrap_attempt_downloads()

static void update_consensus_bootstrap_attempt_downloads ( time_t  now,
download_status_t dls,
download_want_authority_t  want_authority 
)
static

When we're bootstrapping, launch one or more consensus download connections, if schedule indicates connection(s) should be made after now. If is_authority, connect to an authority, otherwise, use a fallback directory mirror.

Definition at line 1037 of file networkstatus.c.

References networkstatus_get_flavor_name(), download_status_t::schedule, and tor_assert().

◆ update_consensus_bootstrap_multiple_downloads()

static void update_consensus_bootstrap_multiple_downloads ( time_t  now,
const or_options_t options 
)
static

If we're bootstrapping, check the connection schedules and see if we want to make additional, potentially concurrent, consensus download connections. Only call when bootstrapping, and when we want to make additional connections. Only nodes that satisfy networkstatus_consensus_can_use_multiple_directories make additional connections.

Definition at line 1073 of file networkstatus.c.

References networkstatus_consensus_can_use_multiple_directories().

◆ update_consensus_networkstatus_downloads()

static void update_consensus_networkstatus_downloads ( time_t  now)
static

If we want to download a fresh consensus, launch a new download as appropriate.

Check if we're waiting for certificates to download. If we are, launch download for missing directory authority certificates.

Definition at line 948 of file networkstatus.c.

References or_options_t::ClientBootstrapConsensusMaxInProgressTries, connection_dir_count_by_purpose_and_resource(), DIR_PURPOSE_FETCH_CONSENSUS, N_CONSENSUS_FLAVORS, networkstatus_consensus_can_use_multiple_directories(), networkstatus_get_flavor_name(), should_delay_dir_fetches(), time_to_download_next_consensus, networkstatus_t::valid_after, and we_want_to_fetch_flavor().

Referenced by networkstatus_consensus_download_failed(), and update_networkstatus_downloads().

◆ update_consensus_networkstatus_fetch_time()

void update_consensus_networkstatus_fetch_time ( time_t  now)

Update the time at which we'll consider replacing the current consensus of flavor 'flavor'

Definition at line 1232 of file networkstatus.c.

References N_CONSENSUS_FLAVORS, update_consensus_networkstatus_fetch_time_impl(), and we_want_to_fetch_flavor().

◆ update_consensus_networkstatus_fetch_time_impl()

static void update_consensus_networkstatus_fetch_time_impl ( time_t  now,
int  flav 
)
static

◆ update_networkstatus_downloads()

void update_networkstatus_downloads ( time_t  now)

Launch requests for networkstatus documents as appropriate. This is called when we retry all the connections on a SIGHUP and periodically by a Periodic event which checks whether we want to download any networkstatus documents.

Launch a consensus download request, we will wait for the consensus to download and when it completes we will launch a certificate download request.

Definition at line 1300 of file networkstatus.c.

References should_delay_dir_fetches(), and update_consensus_networkstatus_downloads().

Referenced by fetch_networkstatus_callback().

◆ vote_routerstatus_free_()

void vote_routerstatus_free_ ( vote_routerstatus_t rs)

◆ warn_early_consensus()

STATIC void warn_early_consensus ( const networkstatus_t c,
const char *  flavor,
time_t  now 
)

Check whether we received a consensus that appears to be coming from the future. Because we implicitly trust the directory authorities' idea of the current time, we produce a warning if we get an early consensus.

If we got a consensus that is time stamped far in the past, that could simply have come from a stale cache. Possible ways to get a consensus from the future can include:

  • enough directory authorities have wrong clocks
  • directory authorities collude to produce misleading time stamps
  • our own clock is wrong (this is by far the most likely)

We neglect highly improbable scenarios that involve actual time travel.

If a consensus appears more than this many seconds before it could possibly be a sufficiently-signed consensus, declare that our clock is skewed.

Definition at line 1845 of file networkstatus.c.

◆ we_want_to_fetch_flavor()

int we_want_to_fetch_flavor ( const or_options_t options,
int  flavor 
)

Return true iff, given the options listed in options, flavor is the flavor of a consensus networkstatus that we would like to fetch.

For certificate fetches, use we_want_to_fetch_unknown_auth_certs, and for serving fetched documents, use directory_caches_dir_info.

Definition at line 859 of file networkstatus.c.

References N_CONSENSUS_FLAVORS.

Referenced by update_consensus_networkstatus_downloads(), update_consensus_networkstatus_fetch_time(), and update_consensus_networkstatus_fetch_time_impl().

◆ we_want_to_fetch_unknown_auth_certs()

int we_want_to_fetch_unknown_auth_certs ( const or_options_t options)

Return true iff, given the options listed in options, we would like to fetch and store unknown authority certificates.

For consensus and descriptor fetches, use we_want_to_fetch_flavor, and for serving fetched certificates, use directory_caches_unknown_auth_certs.

Definition at line 887 of file networkstatus.c.

Variable Documentation

◆ consensus_bootstrap_dl_status

download_status_t consensus_bootstrap_dl_status[N_CONSENSUS_BOOTSTRAP_SCHEDULES]
static
Initial value:
=
{
{ 0, 0, 0, DL_SCHED_CONSENSUS, DL_WANT_AUTHORITY,
DL_SCHED_INCREMENT_ATTEMPT, 0, 0 },
{ 0, 0, 0, DL_SCHED_CONSENSUS, DL_WANT_ANY_DIRSERVER,
DL_SCHED_INCREMENT_ATTEMPT, 0, 0 },
}

Definition at line 160 of file networkstatus.c.

◆ consensus_dl_status

download_status_t consensus_dl_status[N_CONSENSUS_FLAVORS]
static
Initial value:
=
{
{ 0, 0, 0, DL_SCHED_CONSENSUS, DL_WANT_ANY_DIRSERVER,
DL_SCHED_INCREMENT_FAILURE, 0, 0 },
{ 0, 0, 0, DL_SCHED_CONSENSUS, DL_WANT_ANY_DIRSERVER,
DL_SCHED_INCREMENT_FAILURE, 0, 0 },
}

Download status for the current consensus networkstatus.

Definition at line 141 of file networkstatus.c.

Referenced by MOCK_IMPL(), and networkstatus_consensus_download_failed().

◆ consensus_waiting_for_certs

consensus_waiting_for_certs_t consensus_waiting_for_certs[N_CONSENSUS_FLAVORS]
static

An array, for each flavor of consensus we might want, of consensuses that we have downloaded, but which we cannot verify due to having insufficient authority certificates.

Definition at line 134 of file networkstatus.c.

Referenced by consensus_is_waiting_for_certs(), networkstatus_note_certs_arrived(), and update_certificate_downloads().

◆ current_md_consensus

STATIC networkstatus_t* current_md_consensus = NULL

Most recently received and validated v3 "microdesc"-flavored consensus network status.

Definition at line 114 of file networkstatus.c.

Referenced by MOCK_IMPL(), and update_certificate_downloads().

◆ current_ns_consensus

STATIC networkstatus_t* current_ns_consensus = NULL

Most recently received and validated v3 "ns"-flavored consensus network status.

Definition at line 110 of file networkstatus.c.

Referenced by MOCK_IMPL(), signed_descs_update_status_from_consensus_networkstatus(), and update_certificate_downloads().

◆ have_warned_about_new_version

int have_warned_about_new_version = 0
static

True iff we have logged a warning about this OR's version being newer than listed by the authorities.

Definition at line 174 of file networkstatus.c.

Referenced by networkstatus_reset_warnings().

◆ have_warned_about_old_version

int have_warned_about_old_version = 0
static

True iff we have logged a warning about this OR's version being older than listed by the authorities.

Definition at line 171 of file networkstatus.c.

Referenced by networkstatus_reset_warnings().

◆ time_to_download_next_consensus

time_t time_to_download_next_consensus[N_CONSENSUS_FLAVORS]
static

A time before which we shouldn't try to replace the current consensus: this will be at some point after the next consensus becomes valid, but before the current consensus becomes invalid.

Definition at line 139 of file networkstatus.c.

Referenced by update_consensus_networkstatus_downloads().