From 8559de18572d606d9c0272df88ac6dd9860d116f Mon Sep 17 00:00:00 2001 From: Luna Yao <40349250+ZnqbuZ@users.noreply.github.com> Date: Tue, 31 Mar 2026 00:26:12 +0200 Subject: [PATCH] system: add get; rename --- .../src/dns/system/{darwin.rs => macos.rs} | 6 ++-- easytier/src/dns/system/mod.rs | 30 ++++++++++++++++--- easytier/src/dns/system/windows.rs | 4 +-- .../instance/dns_server/server_instance.rs | 4 +-- 4 files changed, 33 insertions(+), 11 deletions(-) rename easytier/src/dns/system/{darwin.rs => macos.rs} (95%) diff --git a/easytier/src/dns/system/darwin.rs b/easytier/src/dns/system/macos.rs similarity index 95% rename from easytier/src/dns/system/darwin.rs rename to easytier/src/dns/system/macos.rs index 0c7a1d96..a1f89cbf 100644 --- a/easytier/src/dns/system/darwin.rs +++ b/easytier/src/dns/system/macos.rs @@ -6,7 +6,7 @@ use std::{ path::Path, }; -use super::{OSConfig, SystemConfigurator}; +use super::{SystemConfig, SystemConfigurator}; const MAC_RESOLVER_FILE_HEADER: &str = "# Added by easytier\n"; const ETC_RESOLVER: &str = "/etc/resolver"; @@ -27,7 +27,7 @@ impl DarwinConfigurator { true } - pub fn do_set_dns(&self, cfg: &OSConfig) -> io::Result<()> { + pub fn do_set_dns(&self, cfg: &SystemConfig) -> io::Result<()> { fs::create_dir_all(ETC_RESOLVER)?; let mut keep = HashSet::new(); @@ -105,7 +105,7 @@ impl DarwinConfigurator { } impl SystemConfigurator for DarwinConfigurator { - fn set_dns(&self, cfg: &OSConfig) -> io::Result<()> { + fn set_dns(&self, cfg: &SystemConfig) -> io::Result<()> { self.do_set_dns(cfg) } diff --git a/easytier/src/dns/system/mod.rs b/easytier/src/dns/system/mod.rs index 6ef8b622..6970536c 100644 --- a/easytier/src/dns/system/mod.rs +++ b/easytier/src/dns/system/mod.rs @@ -1,3 +1,5 @@ +use crate::utils::BoxExt; + #[cfg(target_os = "linux")] pub mod linux; @@ -5,16 +7,36 @@ pub mod linux; pub mod windows; #[cfg(all(target_os = "macos", not(feature = "macos-ne")))] -pub mod darwin; +pub mod macos; #[derive(Default, Debug)] -pub struct OSConfig { +pub struct SystemConfig { pub nameservers: Vec, pub search_domains: Vec, pub match_domains: Vec, } -pub trait SystemConfigurator: Send + Sync + Clone { - fn set_dns(&self, cfg: &OSConfig) -> std::io::Result<()>; +pub trait SystemConfigurator: Send + Sync { + fn set_dns(&self, cfg: &SystemConfig) -> std::io::Result<()>; fn clean(&self) -> std::io::Result<()>; } + +// TODO: move this to nic mod +fn get( + #[allow(unused_variables)] interface: &str, +) -> Result>, anyhow::Error> { + #[cfg(target_os = "windows")] + { + use crate::dns::system::windows::WindowsDNSManager; + return Ok(Some(WindowsDNSManager::new(interface)?.boxed())); + } + + #[cfg(all(target_os = "macos", not(feature = "macos-ne")))] + { + use crate::dns::system_config::darwin::DarwinConfigurator; + return Ok(Some(DarwinConfigurator::new().boxed())); + } + + #[allow(unreachable_code)] + Ok(None) +} diff --git a/easytier/src/dns/system/windows.rs b/easytier/src/dns/system/windows.rs index 66d91e4a..9652da9d 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, SystemConfigurator}; +use super::{SystemConfig, SystemConfigurator}; pub fn is_windows_10_or_better() -> io::Result { let hklm = winreg::enums::HKEY_LOCAL_MACHINE; @@ -149,7 +149,7 @@ impl WindowsDNSManager { } impl SystemConfigurator for WindowsDNSManager { - fn set_dns(&self, cfg: &OSConfig) -> io::Result<()> { + fn set_dns(&self, cfg: &SystemConfig) -> io::Result<()> { self.set_primary_dns( &cfg.nameservers .iter() diff --git a/easytier/src/instance/dns_server/server_instance.rs b/easytier/src/instance/dns_server/server_instance.rs index 18b77732..2b00636d 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, SystemConfigurator}; +use crate::dns::system::{SystemConfig, SystemConfigurator}; use crate::{ common::{ ifcfg::{IfConfiger, IfConfiguerTrait}, @@ -155,7 +155,7 @@ impl MagicDnsServerInstanceData { fn do_system_config(&self, zone: &str) -> Result<(), anyhow::Error> { if let Some(c) = &self.system_config { - c.set_dns(&OSConfig { + c.set_dns(&SystemConfig { nameservers: vec![self.fake_ip.to_string()], search_domains: vec![zone.to_string()], match_domains: vec![zone.to_string()],