1pub mod interface_utils;
3
4pub mod route_utils {
6 pub mod check_tun_device;
7 pub mod get_tun_gateway;
8 pub mod monitor_tun_device;
9 pub mod remove_specific_route;
10 pub mod revert_old_route;
11 pub mod set_default_route;
12 pub mod set_specific_route;
13 pub mod store_old_route;
14 pub mod def;
15
16 use std::io::Result;
17 use std::net::IpAddr;
18
19
20 pub async fn run_daemon(tun_device_name: &str, tun_device_ip: IpAddr) -> Result<()> {
21 println!("Daemon Initialized");
23
24 if check_tun_device::exists(tun_device_name).await? {
26 let old_route = store_old_route::get().await?;
28
29 let tun_old_gateway_ip = get_tun_gateway::get(tun_device_name).await?;
31
32 set_specific_route::set(tun_device_ip, old_route).await?;
34
35 if let Some(tun_old_gateway_ip_str) = &tun_old_gateway_ip {
37 set_default_route::set(tun_old_gateway_ip_str).await?;
38 } else {
39 println!("No old gateway IP found for TUN device. Skipping setting default route.");
40 }
41
42 let should_revert = monitor_tun_device::monitor(tun_device_name).await?;
44
45 if should_revert {
46 revert_old_route::revert(old_route).await?;
48
49 remove_specific_route::remove(tun_device_ip).await?;
51 }
52 } else {
53 println!("Tun device does not exist. Exiting...");
54 }
55
56 println!("Daemon Stopped");
58
59 Ok(())
60 }
61}
62
63pub mod nft_utils;