pub struct IPDiversityEnforcer { /* private fields */ }Expand description
IP diversity enforcement system
Implementations§
Source§impl IPDiversityEnforcer
impl IPDiversityEnforcer
Sourcepub fn new(config: IPDiversityConfig) -> Self
pub fn new(config: IPDiversityConfig) -> Self
Create a new IP diversity enforcer
Sourcepub fn with_geo_provider(
config: IPDiversityConfig,
provider: Arc<dyn GeoProvider + Send + Sync>,
) -> Self
pub fn with_geo_provider( config: IPDiversityConfig, provider: Arc<dyn GeoProvider + Send + Sync>, ) -> Self
Create a new IP diversity enforcer with a GeoIP/ASN provider
Sourcepub fn analyze_ip(&self, ipv6_addr: Ipv6Addr) -> Result<IPAnalysis>
pub fn analyze_ip(&self, ipv6_addr: Ipv6Addr) -> Result<IPAnalysis>
Analyze an IPv6 address for diversity enforcement
Sourcepub fn can_accept_node(&self, ip_analysis: &IPAnalysis) -> bool
pub fn can_accept_node(&self, ip_analysis: &IPAnalysis) -> bool
Check if a new node can be accepted based on IP diversity constraints
Sourcepub fn add_node(&mut self, ip_analysis: &IPAnalysis) -> Result<()>
pub fn add_node(&mut self, ip_analysis: &IPAnalysis) -> Result<()>
Add a node to the diversity tracking
Sourcepub fn remove_node(&mut self, ip_analysis: &IPAnalysis)
pub fn remove_node(&mut self, ip_analysis: &IPAnalysis)
Remove a node from diversity tracking
Sourcepub fn extract_subnet_prefix(addr: Ipv6Addr, prefix_len: u8) -> Ipv6Addr
pub fn extract_subnet_prefix(addr: Ipv6Addr, prefix_len: u8) -> Ipv6Addr
Extract network prefix of specified length from IPv6 address
Sourcepub fn get_diversity_stats(&self) -> DiversityStats
pub fn get_diversity_stats(&self) -> DiversityStats
Get diversity statistics
Sourcepub fn set_network_size(&mut self, size: usize)
pub fn set_network_size(&mut self, size: usize)
Set the current network size for dynamic limit calculation
Sourcepub fn get_network_size(&self) -> usize
pub fn get_network_size(&self) -> usize
Get the current network size
Sourcepub fn get_per_ip_limit(&self) -> usize
pub fn get_per_ip_limit(&self) -> usize
Calculate the dynamic per-IP limit: min(cap, floor(network_size * fraction)) Formula: min(50, floor(network_size * 0.005))
Sourcepub fn analyze_ipv4(&self, ipv4_addr: Ipv4Addr) -> Result<IPv4Analysis>
pub fn analyze_ipv4(&self, ipv4_addr: Ipv4Addr) -> Result<IPv4Analysis>
Analyze an IPv4 address for diversity enforcement
Sourcepub fn analyze_unified(&self, addr: IpAddr) -> Result<UnifiedIPAnalysis>
pub fn analyze_unified(&self, addr: IpAddr) -> Result<UnifiedIPAnalysis>
Analyze any IP address (IPv4 or IPv6) for diversity enforcement
Sourcepub fn can_accept_unified(&self, analysis: &UnifiedIPAnalysis) -> bool
pub fn can_accept_unified(&self, analysis: &UnifiedIPAnalysis) -> bool
Check if a node can be accepted based on unified IP diversity constraints
Sourcepub fn add_unified(&mut self, analysis: &UnifiedIPAnalysis) -> Result<()>
pub fn add_unified(&mut self, analysis: &UnifiedIPAnalysis) -> Result<()>
Add a unified node to the diversity tracking
Sourcepub fn remove_unified(&mut self, analysis: &UnifiedIPAnalysis)
pub fn remove_unified(&mut self, analysis: &UnifiedIPAnalysis)
Remove a unified node from diversity tracking