diff --git a/easytier/src/dns/system/darwin.rs b/easytier/src/dns/system/darwin.rs index 028c29a5..0c7a1d96 100644 --- a/easytier/src/dns/system/darwin.rs +++ b/easytier/src/dns/system/darwin.rs @@ -6,13 +6,13 @@ use std::{ path::Path, }; -use super::{OSConfig, SystemConfig}; +use super::{OSConfig, SystemConfigurator}; const MAC_RESOLVER_FILE_HEADER: &str = "# Added by easytier\n"; const ETC_RESOLVER: &str = "/etc/resolver"; const ETC_RESOLV_CONF: &str = "/etc/resolv.conf"; -#[derive(Default)] +#[derive(Clone, Default)] pub struct DarwinConfigurator {} impl DarwinConfigurator { pub fn new() -> Self { @@ -104,12 +104,12 @@ impl DarwinConfigurator { } } -impl SystemConfig for DarwinConfigurator { +impl SystemConfigurator for DarwinConfigurator { fn set_dns(&self, cfg: &OSConfig) -> io::Result<()> { self.do_set_dns(cfg) } - fn close(&self) -> io::Result<()> { + fn clean(&self) -> io::Result<()> { self.do_close() } } diff --git a/easytier/src/dns/system/mod.rs b/easytier/src/dns/system/mod.rs index 388ea3e8..6ef8b622 100644 --- a/easytier/src/dns/system/mod.rs +++ b/easytier/src/dns/system/mod.rs @@ -14,7 +14,7 @@ pub struct OSConfig { pub match_domains: Vec, } -pub trait SystemConfig: Send + Sync { +pub trait SystemConfigurator: Send + Sync + Clone { fn set_dns(&self, cfg: &OSConfig) -> std::io::Result<()>; - fn close(&self) -> std::io::Result<()>; + fn clean(&self) -> std::io::Result<()>; } diff --git a/easytier/src/dns/system/windows.rs b/easytier/src/dns/system/windows.rs index 94f014d4..66d91e4a 100644 --- a/easytier/src/dns/system/windows.rs +++ b/easytier/src/dns/system/windows.rs @@ -6,7 +6,7 @@ use winreg::RegKey; use crate::common::ifcfg::RegistryManager; -use super::{OSConfig, SystemConfig}; +use super::{OSConfig, SystemConfigurator}; pub fn is_windows_10_or_better() -> io::Result { let hklm = winreg::enums::HKEY_LOCAL_MACHINE; @@ -19,6 +19,7 @@ pub fn is_windows_10_or_better() -> io::Result { } // 假设 interface_guid 是你的网络接口 GUID +#[derive(Clone)] pub struct InterfaceControl { interface_guid: String, } @@ -125,6 +126,7 @@ impl InterfaceControl { } } +#[derive(Clone)] pub struct WindowsDNSManager { tun_dev_name: String, interface_control: InterfaceControl, @@ -146,7 +148,7 @@ impl WindowsDNSManager { } } -impl SystemConfig for WindowsDNSManager { +impl SystemConfigurator for WindowsDNSManager { fn set_dns(&self, cfg: &OSConfig) -> io::Result<()> { self.set_primary_dns( &cfg.nameservers @@ -158,7 +160,7 @@ impl SystemConfig for WindowsDNSManager { Ok(()) } - fn close(&self) -> io::Result<()> { + fn clean(&self) -> io::Result<()> { Ok(()) } } diff --git a/easytier/src/instance/dns_server/server_instance.rs b/easytier/src/instance/dns_server/server_instance.rs index 9699d0bc..18b77732 100644 --- a/easytier/src/instance/dns_server/server_instance.rs +++ b/easytier/src/instance/dns_server/server_instance.rs @@ -11,7 +11,7 @@ use super::{ server::Server, MAGIC_DNS_INSTANCE_ADDR, }; -use crate::dns::system::{OSConfig, SystemConfig}; +use crate::dns::system::{OSConfig, SystemConfigurator}; use crate::{ common::{ ifcfg::{IfConfiger, IfConfiguerTrait}, @@ -69,7 +69,7 @@ pub(super) struct MagicDnsServerInstanceData { // zone -> (tunnel remote addr -> route) route_infos: DashMap>, - system_config: Option>, + system_config: Option>, } impl MagicDnsServerInstanceData { @@ -492,7 +492,7 @@ pub struct MagicDnsServerInstance { fn get_system_config( _tun_name: Option<&str>, -) -> Result>, anyhow::Error> { +) -> Result>, anyhow::Error> { #[cfg(target_os = "windows")] { use crate::dns::system::windows::WindowsDNSManager; @@ -583,7 +583,7 @@ impl MagicDnsServerInstance { pub async fn clean_env(&self) { if let Some(configer) = &self.data.system_config { - let ret = configer.close(); + let ret = configer.clean(); if let Err(e) = ret { tracing::error!("Failed to close system config: {:?}", e); }