quantrs2_device/quantum_network/
config.rs

1//! Configuration structures for quantum network protocols
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Duration;
6
7// Core configuration structures
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct VersionNegotiationConfig {
10    pub supported_versions: Vec<String>,
11    pub preferred_version: String,
12    pub compatibility_matrix: HashMap<String, Vec<String>>,
13    pub negotiation_timeout: Duration,
14    pub fallback_version: String,
15}
16
17impl Default for VersionNegotiationConfig {
18    fn default() -> Self {
19        Self {
20            supported_versions: vec!["1.0".to_string(), "1.1".to_string()],
21            preferred_version: "1.1".to_string(),
22            compatibility_matrix: HashMap::new(),
23            negotiation_timeout: Duration::from_secs(30),
24            fallback_version: "1.0".to_string(),
25        }
26    }
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize)]
30pub struct ConnectionManagementConfig {
31    pub max_connections: u32,
32    pub connection_timeout: Duration,
33    pub keepalive_interval: Duration,
34    pub retry_attempts: u32,
35    pub backoff_strategy: String,
36    pub connection_pooling: bool,
37}
38
39impl Default for ConnectionManagementConfig {
40    fn default() -> Self {
41        Self {
42            max_connections: 100,
43            connection_timeout: Duration::from_secs(60),
44            keepalive_interval: Duration::from_secs(30),
45            retry_attempts: 3,
46            backoff_strategy: "exponential".to_string(),
47            connection_pooling: true,
48        }
49    }
50}
51
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct FlowControlConfig {
54    pub window_size: u32,
55    pub max_packet_size: u32,
56    pub buffer_size: u32,
57    pub flow_control_algorithm: String,
58    pub congestion_avoidance: bool,
59}
60
61impl Default for FlowControlConfig {
62    fn default() -> Self {
63        Self {
64            window_size: 64000,
65            max_packet_size: 1500,
66            buffer_size: 128_000,
67            flow_control_algorithm: "sliding_window".to_string(),
68            congestion_avoidance: true,
69        }
70    }
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize)]
74pub struct CongestionControlConfig {
75    pub algorithm: String,
76    pub initial_window: u32,
77    pub max_window: u32,
78    pub congestion_threshold: f64,
79    pub recovery_strategy: String,
80}
81
82impl Default for CongestionControlConfig {
83    fn default() -> Self {
84        Self {
85            algorithm: "TCP_Cubic".to_string(),
86            initial_window: 10,
87            max_window: 65536,
88            congestion_threshold: 0.8,
89            recovery_strategy: "fast_recovery".to_string(),
90        }
91    }
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95pub struct QuantumQoSConfig {
96    pub priority_levels: Vec<String>,
97    pub bandwidth_allocation: HashMap<String, f64>,
98    pub latency_requirements: HashMap<String, Duration>,
99    pub reliability_requirements: HashMap<String, f64>,
100}
101
102impl Default for QuantumQoSConfig {
103    fn default() -> Self {
104        let mut bandwidth_allocation = HashMap::new();
105        bandwidth_allocation.insert("high".to_string(), 0.5);
106        bandwidth_allocation.insert("medium".to_string(), 0.3);
107        bandwidth_allocation.insert("low".to_string(), 0.2);
108
109        let mut latency_requirements = HashMap::new();
110        latency_requirements.insert("high".to_string(), Duration::from_millis(10));
111        latency_requirements.insert("medium".to_string(), Duration::from_millis(50));
112        latency_requirements.insert("low".to_string(), Duration::from_millis(100));
113
114        let mut reliability_requirements = HashMap::new();
115        reliability_requirements.insert("high".to_string(), 0.999);
116        reliability_requirements.insert("medium".to_string(), 0.99);
117        reliability_requirements.insert("low".to_string(), 0.95);
118
119        Self {
120            priority_levels: vec!["high".to_string(), "medium".to_string(), "low".to_string()],
121            bandwidth_allocation,
122            latency_requirements,
123            reliability_requirements,
124        }
125    }
126}