Expand description
Functions for applying the correct weights to relays when choosing a relay at random.
The weight to use when picking a relay depends on several factors:
- The relayโs apparent bandwidth. (This is ideally measured by a set of bandwidth authorities, but if no bandwidth authorities are running (as on a test network), we might fall back either to relaysโ self-declared values, or we might treat all relays as having equal bandwidth.)
- The role that weโre selecting a relay to play. (See
WeightRole). - The flags that a relay has in the consensus, and their scarcity. If a relay provides particularly scarce functionality, we might choose not to use it for other roles, or to use it less commonly for them.
Structsยง
- Relay
Weight ๐ - Description for how to weight a single kind of relay for each WeightRole.
- Weight
Kind ๐ - A kind of relay, for the purposes of selecting a relay by weight.
- Weight
Set ๐ - Information derived from a consensus to use when picking relays by weighted bandwidth.
Enumsยง
- Bandwidth
Fn ๐ - Internal: how should we find the base bandwidth of each relay? This value is global over a whole directory, and depends on the bandwidth weights in the consensus.
- Weight
Role - Possible ways to weight relays when selecting them a random.
Constantsยง
- DFLT_
WEIGHT ๐ - The value to return if a weight parameter is absent.
Functionsยง
- calculate_
shift ๐ - Compute a โshiftโ value such that
(a * b) >> shiftwill be contained inside 64 bits. - clamp_
to_ ๐pos - If
inpis less than 0, return 0. Otherwise returninpas a u32. - log2_
upper ๐ - Return an upper bound for the log2 of n.
- pick_
bandwidth_ ๐fn - Helper: Calculate the function we should use to find initial relay bandwidths.
- w_param ๐
- Return the weight param named โkwdโ in p.