quantrs2_device/quantum_network/
config.rs1use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5use std::time::Duration;
6
7#[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}