mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Make dirservers generate a separate "guard" flag to mean, "would make a good entry guard". Make clients parse it and vote on it.
svn:r5856
This commit is contained in:
parent
f1864dfff3
commit
9f42c9d650
@ -1422,6 +1422,7 @@ generate_v2_networkstatus(void)
|
|||||||
ri->cache_info.identity_digest);
|
ri->cache_info.identity_digest);
|
||||||
int f_named = naming && ri->is_named;
|
int f_named = naming && ri->is_named;
|
||||||
int f_valid = ri->is_verified;
|
int f_valid = ri->is_verified;
|
||||||
|
int f_guard = f_fast && f_stable;
|
||||||
/* 0.1.1.9-alpha is the first version to support fetch by descriptor
|
/* 0.1.1.9-alpha is the first version to support fetch by descriptor
|
||||||
* hash. */
|
* hash. */
|
||||||
int f_v2_dir = ri->dir_port &&
|
int f_v2_dir = ri->dir_port &&
|
||||||
@ -1450,6 +1451,7 @@ generate_v2_networkstatus(void)
|
|||||||
f_authority?" Authority":"",
|
f_authority?" Authority":"",
|
||||||
f_exit?" Exit":"",
|
f_exit?" Exit":"",
|
||||||
f_fast?" Fast":"",
|
f_fast?" Fast":"",
|
||||||
|
f_guard?" Guard":"",
|
||||||
f_named?" Named":"",
|
f_named?" Named":"",
|
||||||
f_stable?" Stable":"",
|
f_stable?" Stable":"",
|
||||||
f_running?" Running":"",
|
f_running?" Running":"",
|
||||||
|
@ -844,6 +844,8 @@ typedef struct routerstatus_t {
|
|||||||
* information with v2 of the directory
|
* information with v2 of the directory
|
||||||
* protocol. (All directory caches cache v1
|
* protocol. (All directory caches cache v1
|
||||||
* directories.) */
|
* directories.) */
|
||||||
|
unsigned int is_possible_guard:1; /**< True iff this router would be a good
|
||||||
|
* choice as an entry guard. */
|
||||||
|
|
||||||
/** True if we, as a directory mirror, want to download the corresponding
|
/** True if we, as a directory mirror, want to download the corresponding
|
||||||
* routerinfo from the authority who gave us this routerstatus. (That is,
|
* routerinfo from the authority who gave us this routerstatus. (That is,
|
||||||
|
@ -2941,7 +2941,7 @@ routerstatus_list_update_from_networkstatus(time_t now)
|
|||||||
*/
|
*/
|
||||||
while (1) {
|
while (1) {
|
||||||
int n_running=0, n_named=0, n_valid=0, n_listing=0;
|
int n_running=0, n_named=0, n_valid=0, n_listing=0;
|
||||||
int n_v2_dir=0, n_fast=0, n_stable=0, n_exit=0;
|
int n_v2_dir=0, n_fast=0, n_stable=0, n_exit=0, n_guard=0;
|
||||||
int n_desc_digests=0, highest_count=0;
|
int n_desc_digests=0, highest_count=0;
|
||||||
const char *the_name = NULL;
|
const char *the_name = NULL;
|
||||||
local_routerstatus_t *rs_out, *rs_old;
|
local_routerstatus_t *rs_out, *rs_old;
|
||||||
@ -3020,6 +3020,8 @@ routerstatus_list_update_from_networkstatus(time_t now)
|
|||||||
++n_exit;
|
++n_exit;
|
||||||
if (rs->is_fast)
|
if (rs->is_fast)
|
||||||
++n_fast;
|
++n_fast;
|
||||||
|
if (rs->is_possible_guard)
|
||||||
|
++n_guard;
|
||||||
if (rs->is_stable)
|
if (rs->is_stable)
|
||||||
++n_stable;
|
++n_stable;
|
||||||
if (rs->is_v2_dir)
|
if (rs->is_v2_dir)
|
||||||
@ -3069,6 +3071,7 @@ routerstatus_list_update_from_networkstatus(time_t now)
|
|||||||
rs_out->status.is_running = n_running > n_recent/2;
|
rs_out->status.is_running = n_running > n_recent/2;
|
||||||
rs_out->status.is_exit = n_exit > n_statuses/2;
|
rs_out->status.is_exit = n_exit > n_statuses/2;
|
||||||
rs_out->status.is_fast = n_fast > n_statuses/2;
|
rs_out->status.is_fast = n_fast > n_statuses/2;
|
||||||
|
rs_out->status.is_fast = n_guard > n_statuses/2;
|
||||||
rs_out->status.is_stable = n_stable > n_statuses/2;
|
rs_out->status.is_stable = n_stable > n_statuses/2;
|
||||||
rs_out->status.is_v2_dir = n_v2_dir > n_statuses/2;
|
rs_out->status.is_v2_dir = n_v2_dir > n_statuses/2;
|
||||||
}
|
}
|
||||||
|
@ -1037,6 +1037,8 @@ routerstatus_parse_entry_from_string(const char **s, smartlist_t *tokens)
|
|||||||
rs->is_valid = 1;
|
rs->is_valid = 1;
|
||||||
else if (!strcmp(tok->args[i], "V2Dir"))
|
else if (!strcmp(tok->args[i], "V2Dir"))
|
||||||
rs->is_v2_dir = 1;
|
rs->is_v2_dir = 1;
|
||||||
|
else if (!strcmp(tok->args[i], "Guard"))
|
||||||
|
rs->is_possible_guard = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user