mod cli; mod config; mod daemon; mod docker; mod error; mod firewall; mod iface; mod lock; mod netns; mod status; mod swap; mod sysctl_tuning; mod traffic; mod wg; use std::path::PathBuf; use clap::Parser; use tracing_subscriber::EnvFilter; use crate::cli::{Cli, Command}; use crate::config::Config; fn main() -> anyhow::Result<()> { tracing_subscriber::fmt() .with_env_filter( EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), ) .init(); let cli = Cli::parse(); let config_path = cli .config .unwrap_or_else(|| PathBuf::from("/etc/awg2-harness/config.toml")); match cli.command { Command::ValidateConfig => { let cfg = Config::load(&config_path)?; cfg.validate_config()?; println!("config valid: {}", config_path.display()); } Command::ValidateRuntime => { let cfg = Config::load(&config_path)?; cfg.validate_runtime()?; println!("runtime valid"); } Command::ApplyLimits => { let cfg = Config::load(&config_path)?; cfg.validate_all()?; traffic::reconcile_traffic(&cfg)?; println!("traffic limits reconciled"); } Command::ApplyNetworkTuning => { let cfg = Config::load(&config_path)?; cfg.validate_sysctl_tuning_runtime()?; sysctl_tuning::ensure_sysctl_tuning(&cfg)?; println!("network tuning reconciled"); } Command::InspectNetworkTuning => { let cfg = Config::load(&config_path)?; cfg.validate_config()?; let s = sysctl_tuning::inspect_sysctl_tuning(&cfg)?; sysctl_tuning::print_sysctl_tuning_status(&s); } Command::ApplyFirewall => { let cfg = Config::load(&config_path)?; cfg.validate_all()?; firewall::apply_firewall(&cfg)?; println!("firewall reconciled"); } Command::Status => { let cfg = Config::load(&config_path)?; cfg.validate_config()?; status::print_status(&cfg)?; } Command::EnsureSwap => { let cfg = Config::load(&config_path)?; cfg.validate_all()?; swap::ensure_swap(&cfg)?; println!("swap ensured"); } Command::Daemon => { let cfg = Config::load(&config_path)?; cfg.validate_all()?; daemon::run(cfg)?; } } Ok(()) }