Prop 313: 3. Write a Script that Counts IPv6 Relays in the Consensus
We want to write a script that generates statistics for relays that:
- have an IPv6 ORPort,
- support IPv6 clients,
- support IPv6 reachability checks, and
- support IPv6 reachability checks, and IPv6 clients.
The first two statistics have no dependencies. The last two statistics depend on the "Relay=3" subprotocol in legacy/trac#33226 (moved).
The script should calculate:
- the number of relays, and
- the consensus weight fraction of relays.
In order to provide easy access to these statistics, we propose that the script should:
- download a consensus (or read an existing consensus), and
- calculate and report these statistics.
We could write this script using Python 3 and Stem: https://stem.torproject.org
The following consensus weight fractions should divide by the total consensus weight:
- have an IPv6 ORPort (all relays have an IPv4 ORPort), and
- support IPv6 reachability checks (all relays support IPv4 reachability).
The following consensus weight fractions should divide by the "usable Guard" consensus weight:
- support IPv6 clients, and
- support IPv6 reachability checks and IPv6 clients.
"Usable Guards" have the Guard flag, but do not have the Exit flag. If the Guard also has the BadExit flag, the Exit flag should be ignored.
The script should check that Wgd is 0. If it is not, the script should log a warning about the accuracy of the "Usable Guard" statistics.
See proposal 313, section 3: https://gitweb.torproject.org/torspec.git/tree/proposals/313-relay-ipv6-stats.txt#n82