ipfrs_network/rate_limiter/mod.rs
1//! Connection rate limiting for preventing connection storms and resource exhaustion.
2//!
3//! This module provides sophisticated rate limiting capabilities to control the rate
4//! of connection establishment, preventing connection storms, respecting peer limits,
5//! and protecting against resource exhaustion.
6//!
7//! # Features
8//!
9//! - **Token Bucket Algorithm**: Classic token bucket with configurable rate and burst
10//! - **Per-Peer Limits**: Individual rate limits for each peer
11//! - **Global Limits**: System-wide connection rate limits
12//! - **Priority-based Limiting**: Different limits for different priority levels
13//! - **Adaptive Rate Limiting**: Adjust rates based on success/failure patterns
14//! - **Backpressure Support**: Queue connections when rate limit is exceeded
15//!
16//! # Example
17//!
18//! ```rust
19//! use ipfrs_network::rate_limiter::{ConnectionRateLimiter, RateLimiterConfig};
20//! use std::time::Duration;
21//!
22//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
23//! // Create rate limiter allowing 10 connections per second with burst of 20
24//! let mut limiter = ConnectionRateLimiter::new(RateLimiterConfig {
25//! max_rate: 10.0,
26//! burst_size: 20,
27//! enable_per_peer_limits: true,
28//! ..Default::default()
29//! });
30//!
31//! // Check if connection is allowed
32//! let peer_id = "QmExample".to_string();
33//! if limiter.allow_connection(&peer_id).await {
34//! println!("Connection allowed");
35//! // Establish connection...
36//! } else {
37//! println!("Rate limit exceeded, queuing...");
38//! }
39//! # Ok(())
40//! # }
41//! ```
42
43pub mod atomictokenbucket_traits;
44pub mod backpressurecontroller_traits;
45pub mod constants;
46pub mod peerratelimiterconfig_traits;
47pub mod ratelimiter_traits;
48pub mod ratelimiterconfig_traits;
49pub mod types;
50pub mod types_7;
51
52// Re-export all types
53pub use types::*;
54pub use types_7::*;
55
56#[cfg(test)]
57mod tests;