summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-27 17:14:08 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-28 16:37:59 +0000
commitd5cf64689d6179dfa267d46b657ebe2a9939f8d0 (patch)
tree47604aacda22b77678181e9f942a6da5bc443d0e /talpid-core/src
parent64695ab053306434a375ae8b4aca43db8d578d88 (diff)
downloadmullvadvpn-d5cf64689d6179dfa267d46b657ebe2a9939f8d0.tar.xz
mullvadvpn-d5cf64689d6179dfa267d46b657ebe2a9939f8d0.zip
Provide `TunProvider` from daemon to wireguard
Diffstat (limited to 'talpid-core/src')
-rw-r--r--talpid-core/src/tunnel/mod.rs6
-rw-r--r--talpid-core/src/tunnel/wireguard/mod.rs3
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs15
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs9
4 files changed, 29 insertions, 4 deletions
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(&parameters, log_dir, resource_dir, on_tunnel_event)?;
+ let monitor = TunnelMonitor::start(
+ &parameters,
+ 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.