From 198c239399123ea8239ea043e5db03505fbec961 Mon Sep 17 00:00:00 2001 From: "sijie.sun" Date: Thu, 15 Aug 2024 21:55:02 +0800 Subject: [PATCH] set ipv6 mtu on windows windows use different MTU for ipv4 / ipv6, we should set both. --- easytier/src/common/ifcfg.rs | 4 ++++ easytier/src/instance/virtual_nic.rs | 12 ++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/easytier/src/common/ifcfg.rs b/easytier/src/common/ifcfg.rs index c5c540c6..df3c0707 100644 --- a/easytier/src/common/ifcfg.rs +++ b/easytier/src/common/ifcfg.rs @@ -384,6 +384,10 @@ impl IfConfiguerTrait for WindowsIfConfiger { } async fn set_mtu(&self, name: &str, mtu: u32) -> Result<(), Error> { + let _ = run_shell_cmd( + format!("netsh interface ipv6 set subinterface {} mtu={}", name, mtu).as_str(), + ) + .await; run_shell_cmd( format!("netsh interface ipv4 set subinterface {} mtu={}", name, mtu).as_str(), ) diff --git a/easytier/src/instance/virtual_nic.rs b/easytier/src/instance/virtual_nic.rs index 7515aa9b..510c0aab 100644 --- a/easytier/src/instance/virtual_nic.rs +++ b/easytier/src/instance/virtual_nic.rs @@ -243,7 +243,7 @@ pub struct VirtualNic { ifcfg: Box, } #[cfg(target_os = "windows")] -pub fn checkreg(dev_name:&str) -> io::Result<()> { +pub fn checkreg(dev_name: &str) -> io::Result<()> { use winreg::{enums::HKEY_LOCAL_MACHINE, enums::KEY_ALL_ACCESS, RegKey}; let hklm = RegKey::predef(HKEY_LOCAL_MACHINE); let profiles_key = hklm.open_subkey_with_flags( @@ -262,7 +262,9 @@ pub fn checkreg(dev_name:&str) -> io::Result<()> { // check if ProfileName contains "et" match subkey.get_value::("ProfileName") { Ok(profile_name) => { - if profile_name.contains("et_") || (!dev_name.is_empty() && dev_name == profile_name) { + if profile_name.contains("et_") + || (!dev_name.is_empty() && dev_name == profile_name) + { keys_to_delete.push(subkey_name); } } @@ -280,7 +282,9 @@ pub fn checkreg(dev_name:&str) -> io::Result<()> { // check if ProfileName contains "et" match subkey.get_value::("Description") { Ok(profile_name) => { - if profile_name.contains("et_") || (!dev_name.is_empty() && dev_name == profile_name) { + if profile_name.contains("et_") + || (!dev_name.is_empty() && dev_name == profile_name) + { keys_to_delete_unmanaged.push(subkey_name); } } @@ -357,7 +361,7 @@ impl VirtualNic { .map(char::from) .collect::() .to_lowercase(); - + if !dev_name.is_empty() { config.tun_name(format!("{}", dev_name)); } else {