fix set dev name not work on windows

This commit is contained in:
sijie.sun
2024-08-04 23:45:05 +08:00
committed by Sijie.Sun
parent b4fbcd8d80
commit fdc2755291
+12 -20
View File
@@ -237,7 +237,6 @@ impl AsyncWrite for TunAsyncWrite {
} }
pub struct VirtualNic { pub struct VirtualNic {
dev_name: String,
queue_num: usize, queue_num: usize,
global_ctx: ArcGlobalCtx, global_ctx: ArcGlobalCtx,
@@ -247,10 +246,8 @@ pub struct VirtualNic {
} }
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
pub fn checkreg() -> io::Result<()> { pub fn checkreg() -> io::Result<()> {
use winreg::{enums::HKEY_LOCAL_MACHINE, RegKey,enums::KEY_ALL_ACCESS}; use winreg::{enums::HKEY_LOCAL_MACHINE, enums::KEY_ALL_ACCESS, RegKey};
// 打开根键
let hklm = RegKey::predef(HKEY_LOCAL_MACHINE); let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
// 打开指定的子键
let profiles_key = hklm.open_subkey_with_flags( let profiles_key = hklm.open_subkey_with_flags(
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Profiles", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Profiles",
KEY_ALL_ACCESS, KEY_ALL_ACCESS,
@@ -259,21 +256,19 @@ pub fn checkreg() -> io::Result<()> {
"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Signatures\\Unmanaged", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkList\\Signatures\\Unmanaged",
KEY_ALL_ACCESS, KEY_ALL_ACCESS,
)?; )?;
// 收集要删除的子键名称 // collect subkeys to delete
let mut keys_to_delete = Vec::new(); let mut keys_to_delete = Vec::new();
let mut keys_to_delete_unmanaged = Vec::new(); let mut keys_to_delete_unmanaged = Vec::new();
for subkey_name in profiles_key.enum_keys().filter_map(Result::ok) { for subkey_name in profiles_key.enum_keys().filter_map(Result::ok) {
let subkey = profiles_key.open_subkey(&subkey_name)?; let subkey = profiles_key.open_subkey(&subkey_name)?;
// 尝试读取 ProfileName // check if ProfileName contains "et"
match subkey.get_value::<String, _>("ProfileName") { match subkey.get_value::<String, _>("ProfileName") {
Ok(profile_name) => { Ok(profile_name) => {
// 检查 ProfileName 是否包含 "et"
if profile_name.contains("et_") { if profile_name.contains("et_") {
keys_to_delete.push(subkey_name); keys_to_delete.push(subkey_name);
} }
} }
Err(e) => { Err(e) => {
// 打印错误信息
tracing::error!( tracing::error!(
"Failed to read ProfileName for subkey {}: {}", "Failed to read ProfileName for subkey {}: {}",
subkey_name, subkey_name,
@@ -284,16 +279,14 @@ pub fn checkreg() -> io::Result<()> {
} }
for subkey_name in unmanaged_key.enum_keys().filter_map(Result::ok) { for subkey_name in unmanaged_key.enum_keys().filter_map(Result::ok) {
let subkey = unmanaged_key.open_subkey(&subkey_name)?; let subkey = unmanaged_key.open_subkey(&subkey_name)?;
// 尝试读取 ProfileName // check if ProfileName contains "et"
match subkey.get_value::<String, _>("Description") { match subkey.get_value::<String, _>("Description") {
Ok(profile_name) => { Ok(profile_name) => {
// 检查 ProfileName 是否包含 "et"
if profile_name.contains("et_") { if profile_name.contains("et_") {
keys_to_delete_unmanaged.push(subkey_name); keys_to_delete_unmanaged.push(subkey_name);
} }
} }
Err(e) => { Err(e) => {
// 打印错误信息
tracing::error!( tracing::error!(
"Failed to read ProfileName for subkey {}: {}", "Failed to read ProfileName for subkey {}: {}",
subkey_name, subkey_name,
@@ -302,7 +295,7 @@ pub fn checkreg() -> io::Result<()> {
} }
} }
} }
//删除收集到的子键 // delete collected subkeys
if !keys_to_delete.is_empty() { if !keys_to_delete.is_empty() {
for subkey_name in keys_to_delete { for subkey_name in keys_to_delete {
match profiles_key.delete_subkey_all(&subkey_name) { match profiles_key.delete_subkey_all(&subkey_name) {
@@ -325,7 +318,6 @@ pub fn checkreg() -> io::Result<()> {
impl VirtualNic { impl VirtualNic {
pub fn new(global_ctx: ArcGlobalCtx) -> Self { pub fn new(global_ctx: ArcGlobalCtx) -> Self {
Self { Self {
dev_name: "".to_owned(),
queue_num: 1, queue_num: 1,
global_ctx, global_ctx,
ifname: None, ifname: None,
@@ -333,11 +325,6 @@ impl VirtualNic {
} }
} }
pub fn set_dev_name(mut self, dev_name: &str) -> Result<Self, Error> {
self.dev_name = dev_name.to_owned();
Ok(self)
}
pub fn set_queue_num(mut self, queue_num: usize) -> Result<Self, Error> { pub fn set_queue_num(mut self, queue_num: usize) -> Result<Self, Error> {
self.queue_num = queue_num; self.queue_num = queue_num;
Ok(self) Ok(self)
@@ -361,7 +348,7 @@ impl VirtualNic {
#[cfg(target_os = "windows")] #[cfg(target_os = "windows")]
{ {
match checkreg(){ match checkreg() {
Ok(_) => tracing::trace!("delete successful!"), Ok(_) => tracing::trace!("delete successful!"),
Err(e) => tracing::error!("An error occurred: {}", e), Err(e) => tracing::error!("An error occurred: {}", e),
} }
@@ -376,7 +363,12 @@ impl VirtualNic {
.collect::<String>() .collect::<String>()
.to_lowercase(); .to_lowercase();
config.name(format!("et{}_{}_{}", self.dev_name, c, s)); let dev_name = self.global_ctx.get_flags().dev_name;
if !dev_name.is_empty() {
config.name(format!("{}", dev_name));
} else {
config.name(format!("et{}_{}", c, s));
}
// set a temporary address // set a temporary address
config.address(format!("172.0.{}.3", c).parse::<IpAddr>().unwrap()); config.address(format!("172.0.{}.3", c).parse::<IpAddr>().unwrap());