Use L2 vanguards during path selection

Co-authored-by: Mike Perry <mikeperry-git@torproject.org>
This commit is contained in:
George Kadianakis 2021-07-01 17:49:27 +03:00
parent 314a6b42c5
commit e23947716e
3 changed files with 16 additions and 11 deletions

View File

@ -2259,8 +2259,9 @@ middle_node_must_be_vanguard(const or_options_t *options,
return 0;
}
/* If we have sticky L2 nodes, and this is an L2 pick, use vanguards */
if (options->HSLayer2Nodes && cur_len == 1) {
/* If we are a hidden service circuit, always use either vanguards-lite
* or HSLayer2Nodes for 2nd hop. */
if (cur_len == 1) {
return 1;
}
@ -2284,7 +2285,8 @@ pick_vanguard_middle_node(const or_options_t *options,
/* Pick the right routerset based on the current hop */
if (cur_len == 1) {
vanguard_routerset = options->HSLayer2Nodes;
vanguard_routerset = options->HSLayer2Nodes ?
options->HSLayer2Nodes : get_layer2_guards();
} else if (cur_len == 2) {
vanguard_routerset = options->HSLayer3Nodes;
} else {
@ -2293,6 +2295,10 @@ pick_vanguard_middle_node(const or_options_t *options,
return NULL;
}
if (BUG(!vanguard_routerset)) {
return NULL;
}
node = pick_restricted_middle_node(flags, vanguard_routerset,
options->ExcludeNodes, excluded,
cur_len+1);

View File

@ -2022,16 +2022,12 @@ circuit_is_hs_v3(const circuit_t *circ)
int
circuit_should_use_vanguards(uint8_t purpose)
{
const or_options_t *options = get_options();
/* Only hidden service circuits use vanguards */
if (!circuit_purpose_is_hidden_service(purpose))
return 0;
/* Pinned middles are effectively vanguards */
if (options->HSLayer2Nodes || options->HSLayer3Nodes)
/* All hidden service circuits use either vanguards or
* vanguards-lite. */
if (circuit_purpose_is_hidden_service(purpose))
return 1;
/* Everything else is a normal circuit */
return 0;
}

View File

@ -1699,6 +1699,9 @@ notify_after_networkstatus_changes(void)
channelpadding_new_consensus_params(c);
circpad_new_consensus_params(c);
router_new_consensus_params(c);
/* Maintenance of our L2 guard list */
maintain_layer2_guards();
}
/** Copy all the ancillary information (like router download status and so on)