summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-04-23 19:27:27 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-04-24 16:51:47 +0200
commit5cda8f981ac29916587c26fdb6d6d5ad642ef077 (patch)
tree4fe7804408b89de4d121b9ecb2a1fef058210b6e
parent9dc0d2c19dd16d5a701682bf83a0580c729ba7a0 (diff)
downloadmullvadvpn-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.rs34
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(())
}
}