use anyhow::Result; use tun_rs::{AsyncDevice, DeviceBuilder}; use crate::client::ClientCfg; pub async fn inti_tun_interface(config: &ClientCfg) -> Result { println!( "Initializing TUN interface with name: {}, IP: {}/{}, MTU: {}", config.interface_name, config.interface_ip.addr(), config.interface_ip.netmask(), config.mtu ); let device = match DeviceBuilder::new() .name(&config.interface_name) .ipv4(config.interface_ip.addr(), config.interface_ip.netmask(), None) .mtu(config.mtu) .build_async() { Ok(dev) => dev, Err(e) => { let msg = format!("Failed to create TUN interface: {:#}", e); eprintln!("{}", msg); return Err(anyhow::anyhow!(msg)); } }; Ok(device) }