diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-03-02 18:23:23 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-06-02 10:05:02 +0200 |
| commit | 5be8c76e9a67aec7dd8084425313ed03ed996d44 (patch) | |
| tree | 71752d545ca698c9d03eda2cdae17646753d1983 /talpid-core/src | |
| parent | c410f341152f752c686674d2ea51aac733f8fa97 (diff) | |
| download | mullvadvpn-5be8c76e9a67aec7dd8084425313ed03ed996d44.tar.xz mullvadvpn-5be8c76e9a67aec7dd8084425313ed03ed996d44.zip | |
Conditionally compile split tunneling code for Linux
Diffstat (limited to 'talpid-core/src')
| -rw-r--r-- | talpid-core/src/split.rs | 1 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connected_state.rs | 18 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 14 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/disconnected_state.rs | 1 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 8 |
5 files changed, 26 insertions, 16 deletions
diff --git a/talpid-core/src/split.rs b/talpid-core/src/split.rs index 8c9d4fa54a..d72d41cc8f 100644 --- a/talpid-core/src/split.rs +++ b/talpid-core/src/split.rs @@ -1,3 +1,4 @@ +#![cfg(target_os = "linux")] use regex::Regex; use std::{ fs, diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs index 55c4a28697..3c99d5b098 100644 --- a/talpid-core/src/tunnel_state_machine/connected_state.rs +++ b/talpid-core/src/tunnel_state_machine/connected_state.rs @@ -75,28 +75,30 @@ impl ConnectedState { dns_ips.push(ipv6_gateway.into()); }; + #[cfg(target_os = "linux")] shared_values - .dns_monitor - .set(&self.metadata.interface, &dns_ips) + .split_tunnel + .route_dns(&self.metadata.interface, &dns_ips) .map_err(BoxedError::new)?; shared_values - .split_tunnel - .route_dns(&self.metadata.interface, &dns_ips) + .dns_monitor + .set(&self.metadata.interface, &dns_ips) .map_err(BoxedError::new) } fn reset_dns(shared_values: &mut SharedTunnelStateValues) { + if let Err(error) = shared_values.dns_monitor.reset() { + log::error!("{}", error.display_chain_with_msg("Unable to reset DNS")); + } + + #[cfg(target_os = "linux")] if let Err(error) = shared_values.split_tunnel.flush_dns() { log::error!( "{}", error.display_chain_with_msg("Unable to update split-tunnel route") ); } - - if let Err(error) = shared_values.dns_monitor.reset() { - log::error!("{}", error.display_chain_with_msg("Unable to reset DNS")); - } } fn reset_routes(shared_values: &mut SharedTunnelStateValues) { diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index da61626de1..2c895fb707 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -358,13 +358,15 @@ impl TunnelState for ConnectingState { ) ); ErrorState::enter(shared_values, ErrorStateCause::StartTunnelError) - } else if let Err(error) = shared_values.split_tunnel.enable_routing() { - error!( - "{}", - error.display_chain_with_msg("Failed to set up split tunneling") - ); - ErrorState::enter(shared_values, ErrorStateCause::StartTunnelError) } else { + #[cfg(target_os = "linux")] + if let Err(error) = shared_values.split_tunnel.enable_routing() { + error!( + "{}", + error.display_chain_with_msg("Failed to set up split tunneling") + ); + } + #[cfg(target_os = "android")] { if retry_attempt > 0 && retry_attempt % MAX_ATTEMPTS_WITH_SAME_TUN == 0 { diff --git a/talpid-core/src/tunnel_state_machine/disconnected_state.rs b/talpid-core/src/tunnel_state_machine/disconnected_state.rs index 7742f276ad..4cb0a97e20 100644 --- a/talpid-core/src/tunnel_state_machine/disconnected_state.rs +++ b/talpid-core/src/tunnel_state_machine/disconnected_state.rs @@ -39,6 +39,7 @@ impl TunnelState for DisconnectedState { shared_values: &mut SharedTunnelStateValues, _: Self::Bootstrap, ) -> (TunnelStateWrapper, TunnelStateTransition) { + #[cfg(target_os = "linux")] if let Err(error) = shared_values.split_tunnel.disable_routing() { log::error!( "{}", diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index 3515a72529..bf4a17bad4 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -14,6 +14,8 @@ use self::{ disconnecting_state::{AfterDisconnect, DisconnectingState}, error_state::ErrorState, }; +#[cfg(target_os = "linux")] +use crate::split; use crate::{ dns::DnsMonitor, firewall::{Firewall, FirewallArguments}, @@ -52,6 +54,7 @@ pub enum Error { OfflineMonitorError(#[error(source)] crate::offline::Error), /// Unable to set up split tunneling + #[cfg(target_os = "linux")] #[error(display = "Failed to initialize split tunneling")] InitSplitTunneling(#[error(source)] crate::split::Error), @@ -241,7 +244,7 @@ impl TunnelStateMachine { } }; - #[cfg(unix)] + #[cfg(target_os = "linux")] let split_tunnel = split::SplitTunnel::new().map_err(Error::InitSplitTunneling)?; let firewall = Firewall::new(args).map_err(Error::InitFirewallError)?; @@ -250,7 +253,7 @@ impl TunnelStateMachine { RouteManager::new(HashSet::new()).map_err(Error::InitRouteManagerError)?; let mut shared_values = SharedTunnelStateValues { firewall, - #[cfg(unix)] + #[cfg(target_os = "linux")] split_tunnel, dns_monitor, route_manager, @@ -336,6 +339,7 @@ pub trait TunnelParametersGenerator: Send + 'static { /// Values that are common to all tunnel states. struct SharedTunnelStateValues { firewall: Firewall, + #[cfg(target_os = "linux")] split_tunnel: split::SplitTunnel, dns_monitor: DnsMonitor, route_manager: RouteManager, |
