Improve description of what must be Fast or Stable
For arti#1100 (closed), I need to know which circuits require Fast or Stable relays. But the information in path-spec about Stable is a little outdated, and the information about Fast is basically non-existent.
I have tried to reverse-engineer stuff in tor
a bit, and here is what I came up with:
-
Only pick a node as a possible guard if it is Stable and Fast, in addition to having the Guard flag.
-
A circuit must have only Stable nodes...
- If it's for an introduction or rendezvous circuit.
- (Actually, it seems that we don't enforce this for rendezvous circuits from onion services to the RP if none of our virtual ports is long-lived. This seems like a mistake to me, since re-creating a rendezvous circuit is somewhat expensive.)
- If we're going to use it for a long-lived port.
Notably, the following do not need to be stable:
- Ciruits used only for traffic on non-longlived-ports
- One-hop directory circuits
- Circuits built to HsDirs for uploading and downloading
- Self-testing circuits
- ...
- A circuit must have only Fast nodes, unless...
- (I can't find any circuits like this.)
@mikeperry, do you have any ideas here? Am I on the right track?