diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-09-29 14:18:32 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-11-24 18:50:04 +0100 |
| commit | 687f4e87b33c195b2b78eccd26a02a1567660d06 (patch) | |
| tree | 29390840d584a68fb9075dc5a99cd1b3555a45bf /talpid-core/src | |
| parent | 5e56bfe1e7990bdd1cd2c294f97689738cdebb3e (diff) | |
| download | mullvadvpn-687f4e87b33c195b2b78eccd26a02a1567660d06.tar.xz mullvadvpn-687f4e87b33c195b2b78eccd26a02a1567660d06.zip | |
Find virtual adapter dynamically
Diffstat (limited to 'talpid-core/src')
| -rw-r--r-- | talpid-core/src/firewall/windows.rs | 8 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/mod.rs | 2 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/openvpn.rs | 20 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 14 | ||||
| -rw-r--r-- | talpid-core/src/winnet.rs | 18 |
5 files changed, 32 insertions, 30 deletions
diff --git a/talpid-core/src/firewall/windows.rs b/talpid-core/src/firewall/windows.rs index 90f1d73c78..ac1b0b41d9 100644 --- a/talpid-core/src/firewall/windows.rs +++ b/talpid-core/src/firewall/windows.rs @@ -39,9 +39,9 @@ pub enum Error { #[error(display = "Failed to reset firewall policies")] ResettingPolicy(#[error(source)] FirewallPolicyError), - /// Failure to set TAP adapter metric - #[error(display = "Unable to set TAP adapter metric")] - SetTapMetric(#[error(source)] crate::winnet::Error), + /// Failure to set virtual adapter metric + #[error(display = "Unable to set virtual adapter metric")] + SetTunMetric(#[error(source)] crate::winnet::Error), } const WINFW_TIMEOUT_SECONDS: u32 = 2; @@ -214,7 +214,7 @@ impl Firewall { }; let metrics_set = winnet::ensure_best_metric_for_interface(&tunnel_metadata.interface) - .map_err(Error::SetTapMetric)?; + .map_err(Error::SetTunMetric)?; if metrics_set { debug!("Network interface metrics were changed"); diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs index 81ca04519a..3e27b792c8 100644 --- a/talpid-core/src/tunnel/mod.rs +++ b/talpid-core/src/tunnel/mod.rs @@ -387,7 +387,7 @@ fn try_enabling_ipv6(tunnel_parameters: &TunnelParameters) -> Result<()> { let guid = match tunnel_parameters { TunnelParameters::OpenVpn(..) => { - let alias = crate::winnet::get_tap_interface_alias().map_err(Error::WinnetError)?; + let alias = crate::winnet::get_interface_alias().map_err(Error::WinnetError)?; guid_string = crate::winnet::interface_alias_to_guid(&alias).map_err(Error::WinnetError)?; &guid_string diff --git a/talpid-core/src/tunnel/openvpn.rs b/talpid-core/src/tunnel/openvpn.rs index 00e5fa2bb1..eab4add157 100644 --- a/talpid-core/src/tunnel/openvpn.rs +++ b/talpid-core/src/tunnel/openvpn.rs @@ -70,15 +70,15 @@ pub enum Error { #[error(display = "The OpenVPN event dispatcher exited unexpectedly")] EventDispatcherExited, - /// No TAP adapter was detected + /// No virtual adapter was detected #[cfg(windows)] - #[error(display = "No TAP adapter was detected")] - MissingTapAdapter, + #[error(display = "No virtual adapter was detected")] + MissingVirtualAdapter, - /// TAP adapter seems to be disabled + /// virtual adapter seems to be disabled #[cfg(windows)] - #[error(display = "The TAP adapter appears to be disabled")] - DisabledTapAdapter, + #[error(display = "The virtual adapter appears to be disabled")] + DisabledVirtualAdapter, /// OpenVPN process died unexpectedly #[error(display = "OpenVPN process died unexpectedly")] @@ -510,10 +510,10 @@ impl<C: OpenVpnBuilder + 'static> OpenVpnMonitor<C> { 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::MissingTapAdapter; + return Error::MissingVirtualAdapter; } if log.contains("CreateFile failed on TAP device") { - return Error::DisabledTapAdapter; + return Error::DisabledVirtualAdapter; } } } @@ -601,7 +601,9 @@ impl<C: OpenVpnBuilder + 'static> OpenVpnMonitor<C> { .ca(resource_dir.join("ca.crt")); #[cfg(windows)] { - cmd.tunnel_alias(Some(OsString::from("Mullvad-WT"))); + cmd.tunnel_alias(Some( + crate::winnet::get_interface_alias().map_err(Error::WinnetError)?, + )); cmd.windows_driver(Some(crate::process::openvpn::WindowsDriver::Wintun)); } if let Some(proxy_settings) = params.proxy.clone().take() { diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index 60f87787a2..bc59a1d812 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -154,18 +154,18 @@ impl ConnectingState { error @ tunnel::Error::OpenVpnTunnelMonitoringError( - tunnel::openvpn::Error::DisabledTapAdapter, + tunnel::openvpn::Error::DisabledVirtualAdapter, ) | error @ tunnel::Error::OpenVpnTunnelMonitoringError( - tunnel::openvpn::Error::MissingTapAdapter, + tunnel::openvpn::Error::MissingVirtualAdapter, ) => { warn!( "{}", - error.display_chain_with_msg("TAP adapter problem detected") + error.display_chain_with_msg("Virtual adapter problem detected") ); - Some(ErrorStateCause::TapAdapterProblem) + Some(ErrorStateCause::VirtualAdapterProblem) } error => { warn!( @@ -416,12 +416,12 @@ impl TunnelState for ConnectingState { #[cfg(windows)] tunnel::Error::OpenVpnTunnelMonitoringError( tunnel::openvpn::Error::WinnetError( - crate::winnet::Error::GetTapAlias, + crate::winnet::Error::GetVirtualAdapterAlias, ), ) | tunnel::Error::WinnetError( - crate::winnet::Error::GetTapAlias, - ) => ErrorStateCause::TapAdapterProblem, + 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 9fed90ac21..e78fd5f03b 100644 --- a/talpid-core/src/winnet.rs +++ b/talpid-core/src/winnet.rs @@ -41,9 +41,9 @@ pub enum Error { #[error(display = "Failed to read IPv6 status on the TAP network interface")] GetIpv6Status, - /// Failed to determine alias of TAP adapter. - #[error(display = "Failed to determine alias of TAP adapter")] - GetTapAlias, + /// 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")] @@ -102,15 +102,15 @@ pub fn enable_ipv6_for_adapter(interface_guid: &str) -> Result<(), Error> { } } -/// Dynamically determines the alias of the TAP adapter. -pub fn get_tap_interface_alias() -> Result<OsString, 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_GetTapInterfaceAlias(&mut alias_ptr as *mut _, Some(log_sink), logging_context()) + WinNet_GetInterfaceAlias(&mut alias_ptr as *mut _, Some(log_sink), logging_context()) }; if !status { - return Err(Error::GetTapAlias); + return Err(Error::GetVirtualAdapterAlias); } let alias = unsafe { WideCString::from_ptr_str(alias_ptr) }; @@ -521,8 +521,8 @@ mod api { sink_context: *const u8, ) -> WinNetStatus; - #[link_name = "WinNet_GetTapInterfaceAlias"] - pub fn WinNet_GetTapInterfaceAlias( + #[link_name = "WinNet_GetInterfaceAlias"] + pub fn WinNet_GetInterfaceAlias( tunnel_interface_alias: *mut *mut wchar_t, sink: Option<LogSink>, sink_context: *const u8, |
