summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-12-01 13:57:06 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-12-03 11:31:35 +0100
commita51c84e78beeb3eb7e6e2c6f89f6889b70f5a9da (patch)
tree6c2ac92f469f59bd48ca93bcbe7656d8115c4e3c /talpid-core/src
parent9bdef8c490d3897b6e6cd29de48169a08075aa22 (diff)
downloadmullvadvpn-a51c84e78beeb3eb7e6e2c6f89f6889b70f5a9da.tar.xz
mullvadvpn-a51c84e78beeb3eb7e6e2c6f89f6889b70f5a9da.zip
Remove obsolete virtual adapter code and errors
Diffstat (limited to 'talpid-core/src')
-rw-r--r--talpid-core/src/tunnel/mod.rs20
-rw-r--r--talpid-core/src/tunnel/openvpn/mod.rs38
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs26
-rw-r--r--talpid-core/src/winnet.rs70
4 files changed, 13 insertions, 141 deletions
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs
index 1dca634f00..b2a8292bf2 100644
--- a/talpid-core/src/tunnel/mod.rs
+++ b/talpid-core/src/tunnel/mod.rs
@@ -242,23 +242,21 @@ impl TunnelMonitor {
#[cfg(target_os = "windows")]
if options.enable_ipv6 {
- try_enabling_ipv6(tunnel_parameters)
+ try_enabling_ipv6()
} else {
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 {
+ if options.enable_ipv6 {
+ let enabled = is_ipv6_enabled_in_os()?;
+ if enabled {
Ok(())
+ } else {
+ Err(Error::EnableIpv6Error)
}
+ } else {
+ Ok(())
}
}
@@ -364,7 +362,7 @@ impl InternalTunnelMonitor {
#[cfg(target_os = "windows")]
-fn try_enabling_ipv6(tunnel_parameters: &TunnelParameters) -> Result<()> {
+fn try_enabling_ipv6() -> Result<()> {
use winreg::{enums::*, RegKey};
const IPV6_DISABLED_ON_TUNNELS_MASK: u32 = 0x01;
diff --git a/talpid-core/src/tunnel/openvpn/mod.rs b/talpid-core/src/tunnel/openvpn/mod.rs
index 3ab8e8dc30..c413c8235a 100644
--- a/talpid-core/src/tunnel/openvpn/mod.rs
+++ b/talpid-core/src/tunnel/openvpn/mod.rs
@@ -12,8 +12,8 @@ use crate::{
};
#[cfg(target_os = "linux")]
use ipnetwork::IpNetwork;
+#[cfg(windows)]
use lazy_static::lazy_static;
-use regex::Regex;
use std::{
collections::HashMap,
fs,
@@ -44,12 +44,9 @@ use winapi::shared::{guiddef::GUID, winerror::ERROR_FILE_NOT_FOUND};
mod windows;
+#[cfg(windows)]
lazy_static! {
- static ref ENV_ROUTE_ENTRY: Regex = Regex::new(r"route_(ipv6_)?(\w+)_(\d+)").unwrap();
-
- #[cfg(windows)]
static ref ADAPTER_ALIAS: U16CString = U16CString::from_str("Mullvad").unwrap();
- #[cfg(windows)]
static ref ADAPTER_POOL: U16CString = U16CString::from_str("Mullvad").unwrap();
}
@@ -90,16 +87,6 @@ pub enum Error {
#[error(display = "The OpenVPN event dispatcher exited unexpectedly")]
EventDispatcherExited,
- /// No virtual adapter was detected
- #[cfg(windows)]
- #[error(display = "No virtual adapter was detected")]
- MissingVirtualAdapter,
-
- /// virtual adapter seems to be disabled
- #[cfg(windows)]
- #[error(display = "The virtual adapter appears to be disabled")]
- DisabledVirtualAdapter,
-
/// cannot load wintun.dll
#[cfg(windows)]
#[error(display = "Failed to load wintun.dll")]
@@ -535,7 +522,7 @@ impl<C: OpenVpnBuilder + 'static> OpenVpnMonitor<C> {
Ok(())
} else {
log::error!("OpenVPN died unexpectedly with status: {}", exit_status);
- Err(self.postmortem())
+ Err(Error::ChildProcessDied)
}
}
WaitResult::Child(Err(e), _) => {
@@ -583,25 +570,6 @@ impl<C: OpenVpnBuilder + 'static> OpenVpnMonitor<C> {
result
}
- /// Performs a postmortem analysis to attempt to provide a more detailed error result.
- fn postmortem(&mut self) -> Error {
- #[cfg(windows)]
- {
- if let Some(log_path) = self.log_path.take() {
- if let Ok(log) = fs::read_to_string(log_path) {
- if log.contains("There are no TAP-Windows adapters on this system") {
- return Error::MissingVirtualAdapter;
- }
- if log.contains("CreateFile failed on TAP device") {
- return Error::DisabledVirtualAdapter;
- }
- }
- }
- }
-
- Error::ChildProcessDied
- }
-
fn create_proxy_auth_file(
proxy_settings: &Option<openvpn::ProxySettings>,
) -> std::result::Result<Option<mktemp::TempFile>, io::Error> {
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs
index 60e836a4da..146d7c293a 100644
--- a/talpid-core/src/tunnel_state_machine/connecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs
@@ -151,23 +151,6 @@ impl ConnectingState {
match tunnel_monitor.wait() {
Ok(_) => None,
Err(error) => match error {
- #[cfg(windows)]
- error
- @
- tunnel::Error::OpenVpnTunnelMonitoringError(
- tunnel::openvpn::Error::DisabledVirtualAdapter,
- )
- | error
- @
- tunnel::Error::OpenVpnTunnelMonitoringError(
- tunnel::openvpn::Error::MissingVirtualAdapter,
- ) => {
- warn!(
- "{}",
- error.display_chain_with_msg("Virtual adapter problem detected")
- );
- Some(ErrorStateCause::VirtualAdapterProblem)
- }
tunnel::Error::WireguardTunnelMonitoringError(
tunnel::wireguard::Error::TimeoutError,
) => {
@@ -428,15 +411,6 @@ impl TunnelState for ConnectingState {
tunnel::Error::EnableIpv6Error => {
ErrorStateCause::Ipv6Unavailable
}
- #[cfg(windows)]
- tunnel::Error::OpenVpnTunnelMonitoringError(
- tunnel::openvpn::Error::WinnetError(
- crate::winnet::Error::GetVirtualAdapterAlias,
- ),
- )
- | tunnel::Error::WinnetError(
- crate::winnet::Error::GetVirtualAdapterAlias,
- ) => ErrorStateCause::VirtualAdapterProblem,
#[cfg(target_os = "android")]
tunnel::Error::WireguardTunnelMonitoringError(
tunnel::wireguard::Error::TunnelError(
diff --git a/talpid-core/src/winnet.rs b/talpid-core/src/winnet.rs
index e78fd5f03b..3c036e95e7 100644
--- a/talpid-core/src/winnet.rs
+++ b/talpid-core/src/winnet.rs
@@ -2,9 +2,8 @@ use self::api::*;
pub use self::api::{WinNet_ActivateConnectivityMonitor, WinNet_DeactivateConnectivityMonitor};
use crate::{logging::windows::log_sink, routing::Node};
use ipnetwork::IpNetwork;
-use libc::{c_void, wchar_t};
+use libc::c_void;
use std::{
- ffi::{OsStr, OsString},
net::{IpAddr, Ipv4Addr, Ipv6Addr},
ptr,
};
@@ -25,10 +24,6 @@ pub enum Error {
#[error(display = "Failed to enable IPv6 on the network interface")]
EnableIpv6,
- /// Failed to enable IPv6 on the network interface.
- #[error(display = "Failed to obtain GUID for the network interface")]
- GetInterfaceGuid,
-
/// Failed to get the current default route.
#[error(display = "Failed to obtain default route")]
GetDefaultRoute,
@@ -41,10 +36,6 @@ pub enum Error {
#[error(display = "Failed to read IPv6 status on the TAP network interface")]
GetIpv6Status,
- /// Failed to determine alias of virtual adapter.
- #[error(display = "Failed to determine alias of virtual adapter")]
- GetVirtualAdapterAlias,
-
/// Can't establish whether host is connected to a non-virtual network
#[error(display = "Network connectivity undecideable")]
ConnectivityUnkown,
@@ -102,47 +93,6 @@ pub fn enable_ipv6_for_adapter(interface_guid: &str) -> Result<(), Error> {
}
}
-/// Dynamically determines the alias of the virtual adapter.
-pub fn get_interface_alias() -> Result<OsString, Error> {
- let mut alias_ptr: *mut wchar_t = ptr::null_mut();
- let status = unsafe {
- WinNet_GetInterfaceAlias(&mut alias_ptr as *mut _, Some(log_sink), logging_context())
- };
-
- if !status {
- return Err(Error::GetVirtualAdapterAlias);
- }
-
- let alias = unsafe { WideCString::from_ptr_str(alias_ptr) };
- unsafe { WinNet_ReleaseString(alias_ptr) };
-
- Ok(alias.to_os_string())
-}
-
-/// Determines the interface guid for a given adapter alias.
-pub fn interface_alias_to_guid(interface_alias: &OsStr) -> Result<String, Error> {
- let interface_alias =
- WideCString::from_os_str(interface_alias).map_err(Error::InvalidInterfaceAlias)?;
- let mut guid_ptr: *mut wchar_t = ptr::null_mut();
- let status = unsafe {
- WinNet_InterfaceAliasToGuid(
- interface_alias.as_ptr(),
- &mut guid_ptr as *mut _,
- Some(log_sink),
- logging_context(),
- )
- };
-
- if !status {
- return Err(Error::GetInterfaceGuid);
- }
-
- let guid = unsafe { WideCString::from_ptr_str(guid_ptr) };
- unsafe { WinNet_ReleaseString(guid_ptr) };
-
- Ok(guid.to_string_lossy())
-}
-
#[allow(dead_code)]
#[repr(u32)]
pub enum WinNetAddrFamily {
@@ -521,24 +471,6 @@ mod api {
sink_context: *const u8,
) -> WinNetStatus;
- #[link_name = "WinNet_GetInterfaceAlias"]
- pub fn WinNet_GetInterfaceAlias(
- tunnel_interface_alias: *mut *mut wchar_t,
- sink: Option<LogSink>,
- sink_context: *const u8,
- ) -> bool;
-
- #[link_name = "WinNet_InterfaceAliasToGuid"]
- pub fn WinNet_InterfaceAliasToGuid(
- interface_alias: *const wchar_t,
- interface_guid: *mut *mut wchar_t,
- sink: Option<LogSink>,
- sink_context: *const u8,
- ) -> bool;
-
- #[link_name = "WinNet_ReleaseString"]
- pub fn WinNet_ReleaseString(string: *mut wchar_t);
-
#[link_name = "WinNet_ActivateConnectivityMonitor"]
pub fn WinNet_ActivateConnectivityMonitor(
callback: Option<ConnectivityCallback>,