aboutsummaryrefslogtreecommitdiff
path: root/guard-spec.txt
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-02-01 08:54:07 -0500
committerNick Mathewson <nickm@torproject.org>2017-02-01 08:54:07 -0500
commitb729833befc66d94ce0510356290586e43402dee (patch)
treec72a7a0c12b26d39c4b37af25888ef7b747f1d4b /guard-spec.txt
parentee2a7f89fe1b9ce824f38f8bdb0f911d7938bfc8 (diff)
downloadtorspec-b729833befc66d94ce0510356290586e43402dee.tar.gz
torspec-b729833befc66d94ce0510356290586e43402dee.zip
Explain more about primary guards and about building circuits
In path-spec: explain our rules (post-21242) for waiting to build circuits. In guard-spec: - explain what to do about missing descriptors - explain parallel use of multiple primary guards, based on parameters.
Diffstat (limited to 'guard-spec.txt')
-rw-r--r--guard-spec.txt22
1 files changed, 20 insertions, 2 deletions
diff --git a/guard-spec.txt b/guard-spec.txt
index 59c66b8..87e16a7 100644
--- a/guard-spec.txt
+++ b/guard-spec.txt
@@ -451,8 +451,10 @@
When we want to build a circuit, and we need to pick a guard:
* If any entry in PRIMARY_GUARDS has {is_reachable} status of
- <maybe> or <yes>, return the first such guard. The circuit is
- <usable_on_completion>.
+ <maybe> or <yes>, return one of the first
+ {NUM_USABLE_PRIMARY_GUARDS} or
+ {NUM_USABLE_PRIMARY_DIRECTORY_GUARDS} such guards, chosen
+ uniformly at random. The circuit is <usable_on_completion>.
[Note: We do not use {is_pending} on primary guards, since we
are willing to try to build multiple circuits through them
@@ -620,6 +622,18 @@
circuits are neither built nor in-progress; that <complete>
circuits are built; and that the other states are in-progress.
+4.12. When we are missing descriptors
+ [Section:MISSING_DESCRIPTORS]
+
+ We need either a router descriptor or a microdescriptor in order
+ to build a circuit through a guard. If we do not have such a
+ descriptor for a guard, we can still use the guard for one-hop
+ directory fetches, but not for longer circuits.
+
+ (Also, when we are missing descriptors for our first
+ {NUM_USABLE_PRIMARY_GUARDS} primary guards, we don't build
+ circuits at all until we have fetched them.)
+
A. Appendices
A.1. Parameters with suggested values. [Section:PARAM_VALS]
@@ -663,6 +677,10 @@ A.1. Parameters with suggested values. [Section:PARAM_VALS]
{param:GUARD_CONFIRMED_MIN_LIFETIME} -- 60 days
+ {param:NUM_USABLE_PRIMARY_GUARDS} -- 1
+
+ {param:NUM_USABLE_PRIMARY_DIRECTORY_GUARDS} -- 3
+
A.2. Random values [Section:RANDOM]
Frequently, we want to randomize the expiration time of something