summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--talpid-core/src/tunnel/mod.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs
index 2969f8660d..ffb624d6c1 100644
--- a/talpid-core/src/tunnel/mod.rs
+++ b/talpid-core/src/tunnel/mod.rs
@@ -322,13 +322,16 @@ fn is_ipv6_enabled_in_os() -> bool {
use winreg::enums::*;
use winreg::RegKey;
- const IPV6_DISABLED: u8 = 0xFF;
+ const IPV6_DISABLED_ON_TUNNELS_MASK: u32 = 0x01;
+ // Check registry if IPv6 is disabled on tunnel interfaces, as documented in
+ // https://support.microsoft.com/en-us/help/929852/guidance-for-configuring-ipv6-in-windows-for-advanced-users
let globally_enabled = RegKey::predef(HKEY_LOCAL_MACHINE)
.open_subkey(r#"SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters"#)
.and_then(|ipv6_config| ipv6_config.get_value("DisabledComponents"))
- .map(|ipv6_disabled_bits: u32| (ipv6_disabled_bits & 0xFF) == IPV6_DISABLED as u32)
- .unwrap_or(false);
+ .map(|ipv6_disabled_bits: u32| {
+ (ipv6_disabled_bits & IPV6_DISABLED_ON_TUNNELS_MASK) == 0
+ }).unwrap_or(true);
globally_enabled && ::winnet::get_tap_interface_ipv6_status().unwrap_or(false)
}