Expand description
Router status entry parsing for Tor network status documents.
This module provides types for parsing router status entries, which describe individual relays within a network status consensus document. Router status entries are the core building blocks of consensus documents, containing essential information about each relay in the Tor network.
§Overview
Router status entries appear in several contexts:
- Network status consensus documents - The authoritative list of relays
- Control port responses - Via
GETINFO ns/*andGETINFO md/*queries - Cached consensus files - Local copies of network status documents
Each entry contains information about a single relay including its identity, network address, capabilities (flags), bandwidth, and exit policy summary.
§Entry Types
Different versions and flavors of network status documents use different entry formats:
| Type | Description | Digest Field |
|---|---|---|
RouterStatusEntryType::V2 | Legacy v2 network status | SHA-1 hex digest |
RouterStatusEntryType::V3 | Standard v3 consensus | SHA-1 hex digest |
RouterStatusEntryType::MicroV3 | Microdescriptor consensus | Base64 microdesc digest |
RouterStatusEntryType::Bridge | Bridge network status | SHA-1 hex digest |
§Entry Format
Router status entries consist of several lines, each starting with a keyword:
r- Router identity (nickname, fingerprint, address, ports, publication time)a- Additional OR addresses (IPv6 addresses)s- Flags assigned by directory authoritiesv- Tor version stringw- Bandwidth weights for path selectionp- Exit policy summary (accept/reject port ranges)pr- Protocol versions supportedm- Microdescriptor digest (for microdescriptor consensus)id- Ed25519 identity key (in votes)
§Example
use stem_rs::descriptor::router_status::RouterStatusEntry;
let entry_content = r#"r example ARIJF2zbqirB9IwsW0mQznccWww oQZFLYe9e4A7bOkWKR7TaNxb0JE 2024-01-15 12:00:00 192.0.2.1 9001 0
s Fast Guard Running Stable Valid
v Tor 0.4.8.10
w Bandwidth=5000
p reject 1-65535"#;
let entry = RouterStatusEntry::parse(entry_content).unwrap();
assert_eq!(entry.nickname, "example");
assert!(entry.flags.contains(&"Guard".to_string()));§Flags
Directory authorities assign flags to relays based on their behavior and capabilities. Common flags include:
Authority- A directory authorityBadExit- Believed to be useless as an exit nodeExit- Suitable for exit trafficFast- Suitable for high-bandwidth circuitsGuard- Suitable as an entry guardHSDir- Hidden service directoryRunning- Currently usableStable- Suitable for long-lived circuitsValid- Has been validatedV2Dir- Supports v2 directory protocol
§Bandwidth Weights
The w line contains bandwidth information used for path selection:
Bandwidth- Consensus bandwidth weight (arbitrary units, typically KB/s)Measured- Bandwidth measured by bandwidth authoritiesUnmeasured- Set to 1 if bandwidth is not based on measurements
§See Also
crate::descriptor::consensus- Network status consensus documentscrate::descriptor::micro- Microdescriptor parsingcrate::descriptor::server- Full server descriptorscrate::exit_policy- Exit policy evaluation
§See Also
- Tor Directory Protocol Specification
- Python Stem’s
RouterStatusEntryclass
Structs§
- Microdescriptor
Hash - Microdescriptor hash information from vote documents.
- Router
Status Entry - Information about an individual relay in a network status document.
Enums§
- Router
Status Entry Type - The type of router status entry, determining its format and available fields.