RendguardConfig

Struct RendguardConfig 

Source
pub struct RendguardConfig {
    pub use_global_start_count: u32,
    pub use_scale_at_count: u32,
    pub use_relay_start_count: u32,
    pub use_max_use_to_bw_ratio: f64,
    pub use_max_consensus_weight_churn: f64,
    pub close_circuits_on_overuse: bool,
}
Expand description

Rendezvous point monitoring configuration options.

Controls detection of rendezvous point overuse attacks. These attacks attempt to identify hidden services by observing which relays are frequently used as rendezvous points.

§Attack Detection

Rendguard tracks rendezvous point usage and compares it to expected bandwidth distribution:

┌─────────────────────────────────────────────────────────────────┐
│                Rendezvous Point Overuse Detection               │
└─────────────────────────────────────────────────────────────────┘

  Expected Usage = Relay Bandwidth Weight / Total Network Bandwidth

  Actual Usage = Times Used as Rend Point / Total Rend Point Uses

  Overuse Ratio = Actual Usage / Expected Usage

  If Overuse Ratio > use_max_use_to_bw_ratio:
     └── Alert and optionally close circuits

§Fields

FieldDefaultDescription
use_global_start_count1000Min total uses before checking
use_scale_at_count20000Scale counts by half at this total
use_relay_start_count100Min relay uses before checking
use_max_use_to_bw_ratio5.0Max ratio of use to bandwidth
use_max_consensus_weight_churn1.0Max consensus weight churn %
close_circuits_on_overusetrueClose circuits on overuse detection

§Example

use vanguards_rs::RendguardConfig;

let mut config = RendguardConfig::default();

// More aggressive detection
config.use_max_use_to_bw_ratio = 3.0;

// Require more samples before alerting
config.use_global_start_count = 2000;
config.use_relay_start_count = 200;

§See Also

  • Config - Main configuration struct
  • RendGuard - Runtime rendezvous tracking

Fields§

§use_global_start_count: u32

Minimum total uses before checking for overuse.

§use_scale_at_count: u32

Scale counts by half when reaching this total.

§use_relay_start_count: u32

Minimum relay uses before checking for overuse.

§use_max_use_to_bw_ratio: f64

Maximum ratio of use to bandwidth weight.

§use_max_consensus_weight_churn: f64

Maximum consensus weight churn percentage.

§close_circuits_on_overuse: bool

Close circuits on rendezvous point overuse.

Trait Implementations§

Source§

impl Clone for RendguardConfig

Source§

fn clone(&self) -> RendguardConfig

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RendguardConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for RendguardConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for RendguardConfig

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for RendguardConfig

Source§

fn eq(&self, other: &RendguardConfig) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for RendguardConfig

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for RendguardConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,