Module router_status

Module router_status 

Source
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/* and GETINFO 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:

TypeDescriptionDigest Field
RouterStatusEntryType::V2Legacy v2 network statusSHA-1 hex digest
RouterStatusEntryType::V3Standard v3 consensusSHA-1 hex digest
RouterStatusEntryType::MicroV3Microdescriptor consensusBase64 microdesc digest
RouterStatusEntryType::BridgeBridge network statusSHA-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 authorities
  • v - Tor version string
  • w - Bandwidth weights for path selection
  • p - Exit policy summary (accept/reject port ranges)
  • pr - Protocol versions supported
  • m - 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 authority
  • BadExit - Believed to be useless as an exit node
  • Exit - Suitable for exit traffic
  • Fast - Suitable for high-bandwidth circuits
  • Guard - Suitable as an entry guard
  • HSDir - Hidden service directory
  • Running - Currently usable
  • Stable - Suitable for long-lived circuits
  • Valid - Has been validated
  • V2Dir - 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 authorities
  • Unmeasured - Set to 1 if bandwidth is not based on measurements

§See Also

§See Also

Structs§

MicrodescriptorHash
Microdescriptor hash information from vote documents.
RouterStatusEntry
Information about an individual relay in a network status document.

Enums§

RouterStatusEntryType
The type of router status entry, determining its format and available fields.