summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-03-02 12:13:09 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-04-13 13:06:29 +0200
commitdb2accf33367d37d71c907333af6885032329e68 (patch)
treebc13fd570af52d3eb9608d4a8ea1ba55d28e661c
parent415989085ecab89968761027327a0cc9648a56c1 (diff)
downloadmullvadvpn-db2accf33367d37d71c907333af6885032329e68.tar.xz
mullvadvpn-db2accf33367d37d71c907333af6885032329e68.zip
Pass tokio runtime to WireguardMonitor
-rw-r--r--talpid-core/src/tunnel/mod.rs4
-rw-r--r--talpid-core/src/tunnel/wireguard/mod.rs3
-rw-r--r--talpid-core/src/tunnel_state_machine/connecting_state.rs3
-rw-r--r--talpid-core/src/tunnel_state_machine/mod.rs16
4 files changed, 18 insertions, 8 deletions
diff --git a/talpid-core/src/tunnel/mod.rs b/talpid-core/src/tunnel/mod.rs
index a5b763cad1..769297b7c8 100644
--- a/talpid-core/src/tunnel/mod.rs
+++ b/talpid-core/src/tunnel/mod.rs
@@ -148,6 +148,7 @@ impl TunnelMonitor {
/// on tunnel state changes.
#[cfg_attr(any(target_os = "android", windows), allow(unused_variables))]
pub fn start<L>(
+ runtime: tokio::runtime::Handle,
tunnel_parameters: &TunnelParameters,
log_dir: &Option<PathBuf>,
resource_dir: &Path,
@@ -170,6 +171,7 @@ impl TunnelMonitor {
TunnelParameters::OpenVpn(_) => Err(Error::UnsupportedPlatform),
TunnelParameters::Wireguard(config) => Self::start_wireguard_tunnel(
+ runtime,
&config,
log_file,
on_event,
@@ -200,6 +202,7 @@ impl TunnelMonitor {
}
fn start_wireguard_tunnel<L>(
+ runtime: tokio::runtime::Handle,
params: &wireguard_types::TunnelParameters,
log: Option<PathBuf>,
on_event: L,
@@ -211,6 +214,7 @@ impl TunnelMonitor {
{
let config = wireguard::config::Config::from_parameters(&params)?;
let monitor = wireguard::WireguardMonitor::start(
+ runtime,
&config,
log.as_ref().map(|p| p.as_path()),
on_event,
diff --git a/talpid-core/src/tunnel/wireguard/mod.rs b/talpid-core/src/tunnel/wireguard/mod.rs
index 9fe6bec4e7..a1ed3c692d 100644
--- a/talpid-core/src/tunnel/wireguard/mod.rs
+++ b/talpid-core/src/tunnel/wireguard/mod.rs
@@ -74,12 +74,15 @@ lazy_static! {
impl WireguardMonitor {
/// Starts a WireGuard tunnel with the given config
pub fn start<F: Fn(TunnelEvent) + Send + Sync + Clone + 'static>(
+ runtime: tokio::runtime::Handle,
config: &Config,
log_path: Option<&Path>,
on_event: F,
tun_provider: &mut TunProvider,
route_manager: &mut routing::RouteManager,
) -> Result<WireguardMonitor> {
+ // FIXME: Set up udp2tcp and use it for peer config here
+
let tunnel = Self::open_tunnel(&config, log_path, tun_provider, route_manager)?;
let iface_name = tunnel.get_interface_name().to_string();
diff --git a/talpid-core/src/tunnel_state_machine/connecting_state.rs b/talpid-core/src/tunnel_state_machine/connecting_state.rs
index f9f4a00764..5257475d63 100644
--- a/talpid-core/src/tunnel_state_machine/connecting_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connecting_state.rs
@@ -89,6 +89,7 @@ impl ConnectingState {
}
fn start_tunnel(
+ runtime: tokio::runtime::Handle,
parameters: TunnelParameters,
log_dir: &Option<PathBuf>,
resource_dir: &Path,
@@ -102,6 +103,7 @@ impl ConnectingState {
};
let monitor = TunnelMonitor::start(
+ runtime,
&parameters,
log_dir,
resource_dir,
@@ -420,6 +422,7 @@ impl TunnelState for ConnectingState {
}
match Self::start_tunnel(
+ shared_values.runtime.clone(),
tunnel_parameters,
&shared_values.log_dir,
&shared_values.resource_dir,
diff --git a/talpid-core/src/tunnel_state_machine/mod.rs b/talpid-core/src/tunnel_state_machine/mod.rs
index 90012a8296..509a1a0e43 100644
--- a/talpid-core/src/tunnel_state_machine/mod.rs
+++ b/talpid-core/src/tunnel_state_machine/mod.rs
@@ -139,7 +139,7 @@ pub async fn spawn(
}
};
- state_machine.run(runtime, state_change_listener);
+ state_machine.run(state_change_listener);
if shutdown_tx.send(()).is_err() {
log::error!("Can't send shutdown completion to daemon");
@@ -222,9 +222,10 @@ impl TunnelStateMachine {
let firewall = Firewall::new(args).map_err(Error::InitFirewallError)?;
let dns_monitor = DnsMonitor::new(cache_dir).map_err(Error::InitDnsMonitorError)?;
- let route_manager =
- RouteManager::new(runtime, HashSet::new()).map_err(Error::InitRouteManagerError)?;
+ let route_manager = RouteManager::new(runtime.clone(), HashSet::new())
+ .map_err(Error::InitRouteManagerError)?;
let mut shared_values = SharedTunnelStateValues {
+ runtime,
firewall,
dns_monitor,
route_manager,
@@ -250,13 +251,11 @@ impl TunnelStateMachine {
})
}
- fn run(
- mut self,
- runtime: tokio::runtime::Handle,
- change_listener: impl Sender<TunnelStateTransition> + Send + 'static,
- ) {
+ fn run(mut self, change_listener: impl Sender<TunnelStateTransition> + Send + 'static) {
use EventConsequence::*;
+ let runtime = self.shared_values.runtime.clone();
+
while let Some(state_wrapper) = self.current_state.take() {
match state_wrapper.handle_event(&runtime, &mut self.commands, &mut self.shared_values)
{
@@ -295,6 +294,7 @@ pub trait TunnelParametersGenerator: Send + 'static {
/// Values that are common to all tunnel states.
struct SharedTunnelStateValues {
+ runtime: tokio::runtime::Handle,
firewall: Firewall,
dns_monitor: DnsMonitor,
route_manager: RouteManager,