volli_manager/
config.rs

1use ipnet::IpNet;
2use std::sync::Arc;
3use volli_core::{DEFAULT_QUIC_PORT, DEFAULT_TCP_PORT, ManagerPeerEntry};
4
5/// Options for configuring the manager server.
6#[derive(Clone, Debug)]
7pub struct ServerConfigOpts {
8    pub advertise_host: String,
9    pub bind: String,
10    pub tcp_port: u16,
11    pub quic_port: u16,
12    pub cert: Option<String>,
13    pub key: Option<String>,
14    pub token: Option<String>,
15    pub secret_dir: Option<String>,
16    pub profile: String,
17    pub manager_name: Option<String>,
18    pub max_connections: usize,
19    pub max_conn_rate: usize,
20    pub conn_rate_interval: std::time::Duration,
21    pub max_worker_conn_rate: usize,
22    pub worker_conn_rate_interval: std::time::Duration,
23    pub handshake_timeout_ms: u64,
24    pub worker_whitelist: Option<Vec<String>>,
25    pub manager_whitelist: Option<Vec<String>>,
26    pub max_workers: Option<u32>,
27    pub peers: Vec<ManagerPeerEntry>,
28    /// Test-only: disable network listeners to speed up non-network tests
29    pub test_disable_listeners: bool,
30}
31
32impl Default for ServerConfigOpts {
33    fn default() -> Self {
34        Self {
35            advertise_host: "127.0.0.1".into(),
36            bind: "127.0.0.1".into(),
37            tcp_port: DEFAULT_TCP_PORT,
38            quic_port: DEFAULT_QUIC_PORT,
39            cert: None,
40            key: None,
41            token: None,
42            secret_dir: None,
43            profile: "default".into(),
44            manager_name: None,
45            max_connections: 1000,
46            max_conn_rate: 0,
47            conn_rate_interval: std::time::Duration::from_secs(1),
48            max_worker_conn_rate: 0,
49            worker_conn_rate_interval: std::time::Duration::from_secs(1),
50            handshake_timeout_ms: 5000,
51            worker_whitelist: None,
52            manager_whitelist: None,
53            max_workers: None,
54            peers: vec![],
55            test_disable_listeners: false,
56        }
57    }
58}
59
60pub(crate) fn parse_nets(list: &Option<Vec<String>>) -> Arc<Vec<IpNet>> {
61    Arc::new(
62        list.clone()
63            .unwrap_or_default()
64            .into_iter()
65            .filter_map(|s| s.parse().ok())
66            .collect(),
67    )
68}