pub struct DhtRateLimitConfig {
pub per_peer_rate_per_sec: Option<f64>,
pub per_peer_burst: Option<u32>,
pub per_ip_rate_per_sec: Option<f64>,
pub per_ip_burst: Option<u32>,
pub global_rate_per_sec: Option<f64>,
pub global_burst: Option<u32>,
pub max_tracked_per_ip: Option<usize>,
pub max_tracked_per_peer: Option<usize>,
}Expand description
[dht.rate_limit] — three-layer token-bucket settings (ADR 022 §DHT
Rate Limiting).
Defaults match the ADR’s conservative ceilings on adversarial load; they are NOT steady-state operating targets — the ADR’s bandwidth analysis (§DHT Bandwidth Analysis “Headroom against rate limits”) shows realistic node traffic is two orders of magnitude below the per-peer cap.
Setting any *_rate_per_sec to 0.0 disables that layer (operator
opt-out); the matching *_burst must also be 0 to avoid a deny-all
configuration. The resolver enforces this pairing the same way
security.per_source_rate_per_sec / per_source_burst are paired.
Fields§
§per_peer_rate_per_sec: Option<f64>Per-peer (source NodeId) sustained rate. Absent => 20 req/s
(ADR 022 §DHT Rate Limiting). 0.0 disables the layer.
per_peer_burst: Option<u32>Per-peer burst capacity. Absent => 40. Required > 0 when
per_peer_rate_per_sec > 0.
per_ip_rate_per_sec: Option<f64>Per-IP sustained rate. Absent => 100 req/s. 0.0 disables.
per_ip_burst: Option<u32>Per-IP burst capacity. Absent => 200.
global_rate_per_sec: Option<f64>Global inbound DHT sustained rate. Absent => 1000 req/s.
global_burst: Option<u32>Global inbound DHT burst capacity. Absent => 2000.
max_tracked_per_ip: Option<usize>Hard cap on the per-IP keyed-limiter map. Absent => 4096. 0
makes the map unbounded — operator opt-in (#645). Mirrors
security.max_tracked_sources for the dispatch layer.
max_tracked_per_peer: Option<usize>Hard cap on the per-peer (NodeId) keyed-limiter map. Absent =>
4096. 0 makes the map unbounded (#645).
Trait Implementations§
Source§impl Debug for DhtRateLimitConfig
impl Debug for DhtRateLimitConfig
Source§impl Default for DhtRateLimitConfig
impl Default for DhtRateLimitConfig
Source§impl<'de> Deserialize<'de> for DhtRateLimitConfig
impl<'de> Deserialize<'de> for DhtRateLimitConfig
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for DhtRateLimitConfig
impl RefUnwindSafe for DhtRateLimitConfig
impl Send for DhtRateLimitConfig
impl Sync for DhtRateLimitConfig
impl Unpin for DhtRateLimitConfig
impl UnsafeUnpin for DhtRateLimitConfig
impl UnwindSafe for DhtRateLimitConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more