diff options
| -rw-r--r-- | talpid-core/src/tunnel/mod.rs | 9 |
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) } |
