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;