stackforge_core/flow/
config.rs1use std::path::PathBuf;
2use std::time::Duration;
3
4#[derive(Debug, Clone)]
9pub struct FlowConfig {
10 pub tcp_established_timeout: Duration,
12 pub tcp_half_open_timeout: Duration,
14 pub tcp_time_wait_timeout: Duration,
16 pub udp_timeout: Duration,
18 pub max_reassembly_buffer: usize,
20 pub max_ooo_fragments: usize,
22 pub eviction_interval: Duration,
24 pub track_max_packet_len: bool,
26 pub track_max_flow_len: bool,
28 pub memory_budget: Option<usize>,
31 pub spill_dir: Option<PathBuf>,
33 pub verbose: bool,
35 pub store_packet_indices: bool,
38 pub progress_interval: usize,
40}
41
42impl Default for FlowConfig {
43 fn default() -> Self {
44 Self {
45 tcp_established_timeout: Duration::from_secs(86_400),
46 tcp_half_open_timeout: Duration::from_secs(5),
47 tcp_time_wait_timeout: Duration::from_secs(120),
48 udp_timeout: Duration::from_secs(120),
49 max_reassembly_buffer: 16 * 1024 * 1024, max_ooo_fragments: 100,
51 eviction_interval: Duration::from_secs(30),
52 track_max_packet_len: false,
53 track_max_flow_len: false,
54 memory_budget: None,
55 spill_dir: None,
56 verbose: false,
57 store_packet_indices: true,
58 progress_interval: 100_000,
59 }
60 }
61}
62
63#[cfg(test)]
64mod tests {
65 use super::*;
66
67 #[test]
68 fn test_default_config() {
69 let config = FlowConfig::default();
70 assert_eq!(config.tcp_established_timeout, Duration::from_secs(86_400));
71 assert_eq!(config.tcp_half_open_timeout, Duration::from_secs(5));
72 assert_eq!(config.tcp_time_wait_timeout, Duration::from_secs(120));
73 assert_eq!(config.udp_timeout, Duration::from_secs(120));
74 assert_eq!(config.max_reassembly_buffer, 16 * 1024 * 1024);
75 assert_eq!(config.max_ooo_fragments, 100);
76 assert_eq!(config.eviction_interval, Duration::from_secs(30));
77 assert!(!config.track_max_packet_len);
78 assert!(!config.track_max_flow_len);
79 assert!(config.store_packet_indices);
80 assert_eq!(config.progress_interval, 100_000);
81 }
82}