diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-12-01 13:57:06 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-12-03 11:31:35 +0100 |
| commit | a51c84e78beeb3eb7e6e2c6f89f6889b70f5a9da (patch) | |
| tree | 6c2ac92f469f59bd48ca93bcbe7656d8115c4e3c /talpid-core/src | |
| parent | 9bdef8c490d3897b6e6cd29de48169a08075aa22 (diff) | |
| download | mullvadvpn-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.rs | 20 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/openvpn/mod.rs | 38 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 26 | ||||
| -rw-r--r-- | talpid-core/src/winnet.rs | 70 |
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>, |
