ipfrs_network/lib.rs
1//! IPFRS Network - libp2p-based networking layer
2//!
3//! This crate provides the networking infrastructure for IPFRS including:
4//! - libp2p node management with full protocol support
5//! - QUIC transport with TCP fallback for reliable connectivity
6//! - Kademlia DHT for content and peer discovery
7//! - Bitswap protocol for block exchange
8//! - mDNS for local peer discovery
9//! - Bootstrap peer management with retry logic and circuit breaker
10//! - Provider record caching with TTL and LRU eviction
11//! - Connection limits and intelligent pruning
12//! - Network metrics and Prometheus export
13//! - NAT traversal (AutoNAT, DCUtR, Circuit Relay v2)
14//! - Query optimization with early termination and pipelining
15//! - Comprehensive health monitoring and logging
16//!
17//! ## Features
18//!
19//! ### Core Networking
20//! - **Multi-transport**: QUIC (primary) with TCP fallback for maximum compatibility
21//! - **NAT Traversal**: AutoNAT for detection, DCUtR for hole punching, Circuit Relay for fallback
22//! - **Peer Discovery**: Kademlia DHT, mDNS for local peers, configurable bootstrap nodes
23//! - **Connection Management**: Intelligent limits, priority-based pruning, bandwidth tracking
24//!
25//! ### DHT Operations
26//! - **Content Routing**: Provider record publishing and discovery with automatic refresh
27//! - **Peer Routing**: Find closest peers, routing table management
28//! - **Query Optimization**: Early termination, pipelining, quality scoring
29//! - **Caching**: Query results and provider records with TTL-based expiration
30//! - **Semantic Routing**: Vector-based content discovery using embeddings and LSH
31//!
32//! ### Pub/Sub Messaging
33//! - **GossipSub**: Topic-based publish/subscribe messaging
34//! - **Mesh Formation**: Automatic peer mesh optimization for topic propagation
35//! - **Message Deduplication**: Efficient duplicate detection
36//! - **Peer Scoring**: Quality-based peer selection for reliable delivery
37//!
38//! ### Reliability
39//! - **Retry Logic**: Exponential backoff with configurable limits
40//! - **Circuit Breaker**: Prevent cascading failures with failing peers
41//! - **Fallback Strategies**: Alternative peers, relay fallback, degraded mode
42//! - **Health Monitoring**: DHT health, connection health, bandwidth metrics
43//!
44//! ### Monitoring & Observability
45//! - **Metrics**: Connection stats, DHT stats, bandwidth tracking, query performance
46//! - **Prometheus Export**: Ready-to-use metrics export for monitoring systems
47//! - **Structured Logging**: Tracing spans with context propagation
48//! - **Health Checks**: Component-level and overall health assessment
49//!
50//! ## Quick Start
51//!
52//! ```rust,no_run
53//! use ipfrs_network::{NetworkConfig, NetworkNode};
54//!
55//! #[tokio::main]
56//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
57//! // Create configuration
58//! let config = NetworkConfig {
59//! listen_addrs: vec!["/ip4/0.0.0.0/udp/0/quic-v1".to_string()],
60//! enable_quic: true,
61//! enable_mdns: true,
62//! enable_nat_traversal: true,
63//! ..Default::default()
64//! };
65//!
66//! // Create and start network node
67//! let mut node = NetworkNode::new(config)?;
68//! node.start().await?;
69//!
70//! // Check network health
71//! let health = node.get_network_health();
72//! println!("Network status: {:?}", health.status);
73//!
74//! // Announce content to DHT
75//! let cid = cid::Cid::default();
76//! node.provide(&cid).await?;
77//!
78//! // Get network statistics
79//! let stats = node.stats();
80//! println!("Connected peers: {}", stats.connected_peers);
81//!
82//! Ok(())
83//! }
84//! ```
85//!
86//! ## High-Level Facade
87//!
88//! For easy integration of all features, use the `NetworkFacade`:
89//!
90//! ```rust,no_run
91//! use ipfrs_network::NetworkFacadeBuilder;
92//!
93//! #[tokio::main]
94//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
95//! // Create a mobile-optimized node with advanced features
96//! let mut facade = NetworkFacadeBuilder::new()
97//! .with_preset_mobile()
98//! .with_semantic_dht()
99//! .with_gossipsub()
100//! .build()?;
101//!
102//! facade.start().await?;
103//! println!("Peer ID: {}", facade.peer_id());
104//! Ok(())
105//! }
106//! ```
107//!
108//! ## Architecture
109//!
110//! The crate is organized into several modules:
111//!
112//! - **facade**: High-level facade for easy integration of all modules
113//! - **auto_tuner**: Automatic network configuration tuning based on system resources
114//! - **benchmarking**: Performance benchmarking utilities for network components
115//! - **node**: Core `NetworkNode` implementation with libp2p swarm management
116//! - **dht**: Kademlia DHT operations and caching
117//! - **peer**: Peer store for tracking known peers and their metadata
118//! - **connection_manager**: Connection limits and intelligent pruning
119//! - **bootstrap**: Bootstrap peer management with retry logic
120//! - **providers**: Provider record caching with TTL
121//! - **query_optimizer**: Query optimization and performance tracking
122//! - **metrics**: Network metrics and Prometheus export
123//! - **health**: Health monitoring for network components
124//! - **logging**: Structured logging and tracing
125//! - **protocol**: Custom protocol support and version negotiation
126//! - **fallback**: Fallback strategies for resilience
127//! - **semantic_dht**: Vector-based semantic DHT for content routing by similarity
128//! - **gossipsub**: Topic-based pub/sub messaging with mesh optimization
129//! - **geo_routing**: Geographic routing optimization for proximity-based peer selection
130//! - **dht_provider**: Pluggable DHT provider interface for custom DHT implementations
131//! - **peer_selector**: Intelligent peer selection combining geographic proximity and quality metrics
132//! - **multipath_quic**: QUIC multipath support for using multiple network paths simultaneously
133//! - **tor**: Tor integration for privacy-preserving networking with onion routing and hidden services
134//! - **diagnostics**: Network diagnostics and troubleshooting utilities
135//! - **session**: Connection session management with lifecycle tracking and statistics
136//! - **rate_limiter**: Connection rate limiting for preventing connection storms and resource exhaustion
137//! - **reputation**: Peer reputation system for tracking and scoring peer behavior over time
138//! - **metrics_aggregator**: Time-series metrics aggregation with statistical analysis and trend tracking
139//! - **load_tester**: Load testing and stress testing utilities for performance validation
140//! - **traffic_analyzer**: Traffic pattern analysis and anomaly detection for network insights
141//! - **network_simulator**: Network condition simulation for testing under adverse conditions
142//! - **policy**: Network policy engine for fine-grained control over operations
143//! - **utils**: Common utility functions for formatting, parsing, and network operations
144//!
145//! ## Examples
146//!
147//! See the `examples/` directory for more comprehensive examples:
148//! - `network_facade_demo.rs`: Using the NetworkFacade for easy integration
149//! - `basic_node.rs`: Creating and starting a basic network node
150//! - `dht_operations.rs`: Content announcement and provider discovery
151//! - `connection_management.rs`: Connection tracking and bandwidth monitoring
152
153pub mod adaptive_polling;
154pub mod arm_profiler;
155pub mod auto_tuner;
156pub mod background_mode;
157pub mod benchmarking;
158pub mod bitswap;
159pub mod bootstrap;
160pub mod connection_manager;
161pub mod connection_migration;
162pub mod dht;
163pub mod dht_provider;
164pub mod diagnostics;
165pub mod facade;
166pub mod fallback;
167pub mod geo_routing;
168pub mod gossipsub;
169pub mod health;
170pub mod ipfs_compat;
171pub mod load_tester;
172pub mod logging;
173pub mod memory_monitor;
174pub mod metrics;
175pub mod metrics_aggregator;
176pub mod multipath_quic;
177pub mod network_monitor;
178pub mod network_simulator;
179pub mod node;
180pub mod offline_queue;
181pub mod peer;
182pub mod peer_selector;
183pub mod policy;
184pub mod presets;
185pub mod protocol;
186pub mod providers;
187pub mod quality_predictor;
188pub mod query_batcher;
189pub mod query_optimizer;
190pub mod quic;
191pub mod rate_limiter;
192pub mod reputation;
193pub mod semantic_dht;
194pub mod session;
195pub mod throttle;
196pub mod tor;
197pub mod traffic_analyzer;
198pub mod utils;
199
200pub use adaptive_polling::{
201 ActivityLevel, AdaptivePolling, AdaptivePollingConfig, AdaptivePollingError,
202 AdaptivePollingStats,
203};
204pub use arm_profiler::{
205 ArmDevice, ArmProfiler, PerformanceSample, PerformanceStats, ProfilerConfig, ProfilerError,
206};
207pub use auto_tuner::{
208 AutoTuner, AutoTunerConfig, AutoTunerError, AutoTunerStats, SystemResources, WorkloadProfile,
209};
210pub use background_mode::{
211 BackgroundModeConfig, BackgroundModeError, BackgroundModeManager, BackgroundModeStats,
212 BackgroundState,
213};
214pub use benchmarking::{
215 BenchmarkConfig, BenchmarkError, BenchmarkResult, BenchmarkType, PerformanceBenchmark,
216};
217pub use bitswap::{Bitswap, BitswapEvent, BitswapMessage, BitswapStats};
218pub use bootstrap::{BootstrapConfig, BootstrapManager, BootstrapStats};
219pub use connection_manager::{
220 ConnectionDirection, ConnectionLimitsConfig, ConnectionManager, ConnectionManagerStats,
221};
222pub use connection_migration::{
223 ConnectionMigrationManager, MigrationAttempt, MigrationConfig, MigrationError, MigrationState,
224 MigrationStats,
225};
226pub use dht::{DhtConfig, DhtHealth, DhtHealthStatus, DhtManager, DhtStats};
227pub use dht_provider::{
228 DhtCapabilities, DhtPeerInfo, DhtProvider, DhtProviderError, DhtProviderRegistry,
229 DhtProviderStats, DhtQueryResult,
230};
231pub use diagnostics::{
232 ConfigDiagnostics, ConfigIssue, DiagnosticResult, DiagnosticTest, NetworkDiagnostics,
233 PerformanceMetrics, TroubleshootingGuide,
234};
235pub use facade::{NetworkFacade, NetworkFacadeBuilder};
236pub use fallback::{FallbackConfig, FallbackManager, FallbackResult, FallbackStrategy, RetryStats};
237pub use geo_routing::{
238 GeoLocation, GeoPeer, GeoRegion, GeoRouter, GeoRouterConfig, GeoRouterStats,
239};
240pub use gossipsub::{
241 GossipSubConfig, GossipSubError, GossipSubManager, GossipSubMessage, GossipSubStats, MessageId,
242 PeerScore, TopicId, TopicSubscription,
243};
244pub use health::{
245 ComponentHealth, HealthChecker, HealthHistory, NetworkHealth, NetworkHealthStatus,
246};
247pub use ipfs_compat::{
248 ipfs_test_config, test_ipfs_connectivity, IpfsCompatTestResults, IPFS_BOOTSTRAP_NODES,
249 TEST_CIDS,
250};
251pub use load_tester::{
252 LoadTestConfig, LoadTestError, LoadTestMetrics, LoadTestResults, LoadTestType, LoadTester,
253};
254pub use logging::{
255 connection_span, dht_span, network_span, LogLevel, LoggingConfig, NetworkEventType,
256 OperationContext,
257};
258pub use memory_monitor::{
259 ComponentMemory, MemoryMonitor, MemoryMonitorConfig, MemoryMonitorError, MemoryStats,
260};
261pub use metrics::{
262 BandwidthMetricsSnapshot, ConnectionMetricsSnapshot, DhtMetricsSnapshot, MetricsSnapshot,
263 NetworkMetrics, SharedMetrics,
264};
265pub use metrics_aggregator::{
266 AggregatedStatistics, AggregatorConfig, MetricStatistics, MetricsAggregator, TimeWindow,
267};
268pub use multipath_quic::{
269 MultipathConfig, MultipathError, MultipathQuicManager, MultipathStats, NetworkPath, PathId,
270 PathQuality, PathSelectionStrategy, PathState,
271};
272pub use network_monitor::{
273 InterfaceType, NetworkChange, NetworkInterface, NetworkMonitor, NetworkMonitorConfig,
274 NetworkMonitorError, NetworkMonitorStats,
275};
276pub use network_simulator::{
277 NetworkCondition, NetworkSimulator, SimulatorConfig, SimulatorError, SimulatorStats,
278};
279pub use node::{
280 BucketInfo, ConnectionEndpoint, KademliaConfig, NetworkConfig, NetworkEvent,
281 NetworkHealthLevel, NetworkHealthSummary, NetworkNode, NetworkStats, RoutingTableInfo,
282};
283pub use offline_queue::{
284 OfflineQueue, OfflineQueueConfig, OfflineQueueError, OfflineQueueStats, QueuedRequest,
285 QueuedRequestType, RequestPriority,
286};
287pub use peer::{PeerInfo, PeerStore, PeerStoreConfig, PeerStoreStats};
288pub use peer_selector::{
289 PeerSelector, PeerSelectorConfig, PeerSelectorStats, SelectedPeer, SelectionCriteria,
290};
291pub use policy::{
292 BandwidthPolicy, ConnectionPolicy, ContentPolicy, PolicyAction, PolicyConfig, PolicyEngine,
293 PolicyError, PolicyResult, PolicyStats,
294};
295pub use presets::NetworkPreset;
296pub use protocol::{
297 ProtocolCapabilities, ProtocolHandler, ProtocolId, ProtocolRegistry, ProtocolVersion,
298};
299pub use providers::{ProviderCache, ProviderCacheConfig, ProviderCacheStats};
300pub use quality_predictor::{
301 QualityPrediction, QualityPredictor, QualityPredictorConfig, QualityPredictorError,
302 QualityPredictorStats,
303};
304pub use query_batcher::{
305 PendingQuery, QueryBatchResult, QueryBatcher, QueryBatcherConfig, QueryBatcherError,
306 QueryBatcherStats, QueryType,
307};
308pub use query_optimizer::{QueryMetrics, QueryOptimizer, QueryOptimizerConfig, QueryResult};
309pub use quic::{
310 CongestionControl, QuicConfig, QuicConnectionInfo, QuicConnectionState, QuicMonitor, QuicStats,
311};
312pub use rate_limiter::{
313 ConnectionPriority, ConnectionRateLimiter, RateLimiterConfig, RateLimiterError,
314 RateLimiterStats,
315};
316pub use reputation::{
317 ReputationConfig, ReputationEvent, ReputationManager, ReputationScore, ReputationStats,
318};
319pub use semantic_dht::{
320 DistanceMetric, LshConfig, LshHash, NamespaceId, SemanticDht, SemanticDhtConfig,
321 SemanticDhtError, SemanticDhtStats, SemanticNamespace, SemanticQuery, SemanticResult,
322};
323pub use session::{
324 Session, SessionConfig, SessionManager, SessionMetadata, SessionState, SessionStats,
325};
326pub use throttle::{
327 BandwidthThrottle, ThrottleConfig, ThrottleError, ThrottleStats, TrafficDirection,
328};
329pub use tor::{
330 CircuitId, CircuitInfo, CircuitState, HiddenServiceConfig, OnionAddress, StreamId, TorConfig,
331 TorError, TorManager, TorStats,
332};
333pub use traffic_analyzer::{
334 AnomalyType, PatternType, PeerProfile, TrafficAnalysis, TrafficAnalyzer, TrafficAnalyzerConfig,
335 TrafficAnalyzerError, TrafficAnalyzerStats, TrafficAnomaly, TrafficEvent, TrafficPattern,
336 TrendDirection,
337};
338
339// Re-export commonly used utility functions
340pub use utils::{
341 exponential_backoff, format_bandwidth, format_bytes, format_duration, is_local_addr,
342 is_public_addr, jittered_backoff, moving_average, parse_multiaddr, parse_multiaddrs,
343 peers_match, percentage, truncate_peer_id, validate_alpha,
344};
345
346/// Re-export libp2p types
347pub use libp2p;