summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-09-29 14:18:32 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-11-24 18:50:04 +0100
commit687f4e87b33c195b2b78eccd26a02a1567660d06 (patch)
tree29390840d584a68fb9075dc5a99cd1b3555a45bf /talpid-core/src
parent5e56bfe1e7990bdd1cd2c294f97689738cdebb3e (diff)
downloadmullvadvpn-687f4e87b33c195b2b78eccd26a02a1567660d06.tar.xz
mullvadvpn-687f4e87b33c195b2b78eccd26a02a1567660d06.zip
Find virtual adapter dynamically
Diffstat (limited to 'talpid-core/src')
-rw-r--r--talpid-core/src/firewall/windows.rs8
-rw-r--r--talpid-core/src/tunnel/mod.rs2
-rw-r--r--talpid-core/src/tunnel/openvpn.rs20
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs14
-rw-r--r--talpid-core/src/winnet.rs18
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,