diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-04-23 19:27:27 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-04-24 16:51:47 +0200 |
| commit | 5cda8f981ac29916587c26fdb6d6d5ad642ef077 (patch) | |
| tree | 4fe7804408b89de4d121b9ecb2a1fef058210b6e | |
| parent | 9dc0d2c19dd16d5a701682bf83a0580c729ba7a0 (diff) | |
| download | mullvadvpn-5cda8f981ac29916587c26fdb6d6d5ad642ef077.tar.xz mullvadvpn-5cda8f981ac29916587c26fdb6d6d5ad642ef077.zip | |
Always try to enable IPv6 on adapter when using WireGuard (Windows)
| -rw-r--r-- | talpid-core/src/tunnel/mod.rs | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs index 25d2c65515..c475aa11a2 100644 --- a/talpid-core/src/tunnel/mod.rs +++ b/talpid-core/src/tunnel/mod.rs @@ -10,6 +10,8 @@ use std::{ #[cfg(not(target_os = "android"))] use talpid_types::net::openvpn as openvpn_types; use talpid_types::net::{wireguard as wireguard_types, TunnelParameters}; +#[cfg(target_os = "windows")] +use talpid_types::ErrorExt; /// A module for all OpenVPN related tunnel management. #[cfg(not(target_os = "android"))] @@ -207,22 +209,38 @@ impl TunnelMonitor { fn ensure_ipv6_can_be_used_if_enabled(tunnel_parameters: &TunnelParameters) -> Result<()> { let options = tunnel_parameters.get_generic_options(); - if options.enable_ipv6 { - #[cfg(target_os = "windows")] - { - try_enabling_ipv6(tunnel_parameters) + + #[cfg(target_os = "windows")] + match tunnel_parameters { + TunnelParameters::OpenVpn(..) => { + if options.enable_ipv6 { + try_enabling_ipv6(tunnel_parameters) + } else { + Ok(()) + } } - #[cfg(not(target_os = "windows"))] - { + TunnelParameters::Wireguard(..) => { + // WireGuard always waits on an IPv6 interface, + // even if it's not in use + if let Err(e) = try_enabling_ipv6(tunnel_parameters) { + log::error!("{}", e.display_chain_with_msg("Failed to enable IPv6")); + } + Ok(()) + } + } + + #[cfg(not(target_os = "windows"))] + { + if options.enable_ipv6 { let enabled = is_ipv6_enabled_in_os()?; if enabled { Ok(()) } else { Err(Error::EnableIpv6Error) } + } else { + Ok(()) } - } else { - Ok(()) } } |
