diff options
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 2 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/mod.rs | 6 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/mod.rs | 3 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connecting_state.rs | 15 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/mod.rs | 9 |
5 files changed, 31 insertions, 4 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 1d5851d94f..8c4d66df98 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -45,6 +45,7 @@ use mullvad_types::{ version::{AppVersion, AppVersionInfo}, }; use std::{io, mem, path::PathBuf, sync::mpsc, thread, time::Duration}; +use talpid_core::tunnel::tun_provider::StubTunProvider; use talpid_core::{ mpsc::IntoSender, tunnel_state_machine::{self, TunnelCommand, TunnelParametersGenerator}, @@ -345,6 +346,7 @@ where settings.get_allow_lan(), settings.get_block_when_disconnected(), tunnel_parameters_generator, + StubTunProvider, log_dir, resource_dir, cache_dir.clone(), diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs index a2b4bf276a..68f6c8ed63 100644 --- a/talpid-core/src/tunnel/mod.rs +++ b/talpid-core/src/tunnel/mod.rs @@ -1,3 +1,4 @@ +use self::tun_provider::TunProvider; use crate::logging; #[cfg(not(target_os = "android"))] use std::collections::HashMap; @@ -144,6 +145,7 @@ impl TunnelMonitor { log_dir: &Option<PathBuf>, resource_dir: &Path, on_event: L, + tun_provider: &dyn TunProvider, ) -> Result<Self> where L: Fn(TunnelEvent) + Send + Clone + Sync + 'static, @@ -158,7 +160,7 @@ impl TunnelMonitor { } #[cfg(any(target_os = "linux", target_os = "macos"))] TunnelParameters::Wireguard(config) => { - Self::start_wireguard_tunnel(&config, log_file, on_event) + Self::start_wireguard_tunnel(&config, log_file, on_event, tun_provider) } #[cfg(target_os = "android")] TunnelParameters::OpenVpn(_) => Err(Error::UnsupportedPlatform), @@ -172,6 +174,7 @@ impl TunnelMonitor { params: &wireguard_types::TunnelParameters, log: Option<PathBuf>, on_event: L, + tun_provider: &dyn TunProvider, ) -> Result<Self> where L: Fn(TunnelEvent) + Send + Sync + Clone + 'static, @@ -181,6 +184,7 @@ impl TunnelMonitor { &config, log.as_ref().map(|p| p.as_path()), on_event, + tun_provider, )?; Ok(TunnelMonitor { monitor: InternalTunnelMonitor::Wireguard(monitor), diff --git a/talpid-core/src/tunnel/wireguard/mod.rs b/talpid-core/src/tunnel/wireguard/mod.rs index 24805f7dbe..fd28e2cab3 100644 --- a/talpid-core/src/tunnel/wireguard/mod.rs +++ b/talpid-core/src/tunnel/wireguard/mod.rs @@ -1,7 +1,7 @@ #![allow(missing_docs)] use self::config::Config; -use super::{TunnelEvent, TunnelMetadata}; +use super::{tun_provider::TunProvider, TunnelEvent, TunnelMetadata}; use crate::routing; use std::{collections::HashMap, io, path::Path, sync::mpsc}; @@ -65,6 +65,7 @@ impl WireguardMonitor { config: &Config, log_path: Option<&Path>, on_event: F, + _tun_provider: &dyn TunProvider, ) -> Result<WireguardMonitor> { let tunnel = Box::new(WgGoTunnel::start_tunnel(&config, log_path)?); let iface_name = tunnel.get_interface_name(); diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs index 1f6afc16ad..c82ad27f73 100644 --- a/talpid-core/src/tunnel_state_machine/connecting_state.rs +++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs @@ -5,7 +5,9 @@ use super::{ }; use crate::{ firewall::FirewallPolicy, - tunnel::{self, CloseHandle, TunnelEvent, TunnelMetadata, TunnelMonitor}, + tunnel::{ + self, tun_provider::TunProvider, CloseHandle, TunnelEvent, TunnelMetadata, TunnelMonitor, + }, }; use futures::{ sync::{mpsc, oneshot}, @@ -13,6 +15,7 @@ use futures::{ }; use log::{debug, error, info, trace, warn}; use std::{ + borrow::Borrow, net::IpAddr, path::{Path, PathBuf}, thread, @@ -62,13 +65,20 @@ impl ConnectingState { parameters: TunnelParameters, log_dir: &Option<PathBuf>, resource_dir: &Path, + tun_provider: &dyn TunProvider, retry_attempt: u32, ) -> crate::tunnel::Result<Self> { let (event_tx, event_rx) = mpsc::unbounded(); let on_tunnel_event = move |event| { let _ = event_tx.unbounded_send(event); }; - let monitor = TunnelMonitor::start(¶meters, log_dir, resource_dir, on_tunnel_event)?; + let monitor = TunnelMonitor::start( + ¶meters, + log_dir, + resource_dir, + on_tunnel_event, + tun_provider, + )?; let close_handle = monitor.close_handle(); let tunnel_close_event = Self::spawn_tunnel_monitor_wait_thread(monitor); @@ -320,6 +330,7 @@ impl TunnelState for ConnectingState { tunnel_parameters, &shared_values.log_dir, &shared_values.resource_dir, + shared_values.tun_provider.borrow(), retry_attempt, ) { Ok(connecting_state) => { diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs index 715c2d773c..d947792da6 100644 --- a/talpid-core/src/tunnel_state_machine/mod.rs +++ b/talpid-core/src/tunnel_state_machine/mod.rs @@ -19,6 +19,7 @@ use crate::{ firewall::{Firewall, FirewallArguments}, mpsc::IntoSender, offline, + tunnel::tun_provider::TunProvider, }; use futures::{sync::mpsc, Async, Future, Poll, Stream}; use std::{ @@ -63,6 +64,7 @@ pub fn spawn<P, T>( allow_lan: bool, block_when_disconnected: bool, tunnel_parameters_generator: impl TunnelParametersGenerator, + tun_provider: impl TunProvider, log_dir: Option<PathBuf>, resource_dir: PathBuf, cache_dir: P, @@ -84,6 +86,7 @@ where block_when_disconnected, is_offline, tunnel_parameters_generator, + tun_provider, log_dir, resource_dir, cache_dir, @@ -122,6 +125,7 @@ fn create_event_loop<T>( block_when_disconnected: bool, is_offline: bool, tunnel_parameters_generator: impl TunnelParametersGenerator, + tun_provider: impl TunProvider, log_dir: Option<PathBuf>, resource_dir: PathBuf, cache_dir: impl AsRef<Path>, @@ -137,6 +141,7 @@ where block_when_disconnected, is_offline, tunnel_parameters_generator, + tun_provider, log_dir, resource_dir, cache_dir, @@ -186,6 +191,7 @@ impl TunnelStateMachine { block_when_disconnected: bool, is_offline: bool, tunnel_parameters_generator: impl TunnelParametersGenerator, + tun_provider: impl TunProvider, log_dir: Option<PathBuf>, resource_dir: PathBuf, cache_dir: impl AsRef<Path>, @@ -211,6 +217,7 @@ impl TunnelStateMachine { block_when_disconnected, is_offline, tunnel_parameters_generator: Box::new(tunnel_parameters_generator), + tun_provider: Box::new(tun_provider), log_dir, resource_dir, }; @@ -293,6 +300,8 @@ struct SharedTunnelStateValues { is_offline: bool, /// The generator of new `TunnelParameter`s tunnel_parameters_generator: Box<dyn TunnelParametersGenerator>, + /// The provider of tunnel devices. + tun_provider: Box<dyn TunProvider>, /// Directory to store tunnel log file. log_dir: Option<PathBuf>, /// Resource directory path. |
