summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-03-02 18:23:23 +0100
committerDavid Lönnhager <david.l@mullvad.net>2020-06-02 10:05:02 +0200
commit5be8c76e9a67aec7dd8084425313ed03ed996d44 (patch)
tree71752d545ca698c9d03eda2cdae17646753d1983 /talpid-core/src
parentc410f341152f752c686674d2ea51aac733f8fa97 (diff)
downloadmullvadvpn-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.rs1
-rw-r--r--talpid-core/src/tunnel_state_machine/connected_state.rs18
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs14
-rw-r--r--talpid-core/src/tunnel_state_machine/disconnected_state.rs1
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs8
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,