diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-27 19:59:00 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2019-05-28 16:37:59 +0000 |
| commit | 95a6729d2404536a3ea8ce2e5358c7710d4b43a1 (patch) | |
| tree | 6cb925de4420fd02a63e402b5cfb4b23c4fa49ca /talpid-core/src | |
| parent | 6ba142eed36eacbff3ac00af2f46a29910254081 (diff) | |
| download | mullvadvpn-95a6729d2404536a3ea8ce2e5358c7710d4b43a1.tar.xz mullvadvpn-95a6729d2404536a3ea8ce2e5358c7710d4b43a1.zip | |
Use `TunProvider` in Wireguard tunnel set-up
Diffstat (limited to 'talpid-core/src')
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/mod.rs | 7 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/wireguard_go.rs | 26 |
2 files changed, 15 insertions, 18 deletions
diff --git a/talpid-core/src/tunnel/wireguard/mod.rs b/talpid-core/src/tunnel/wireguard/mod.rs index fd28e2cab3..05fecdb29f 100644 --- a/talpid-core/src/tunnel/wireguard/mod.rs +++ b/talpid-core/src/tunnel/wireguard/mod.rs @@ -4,6 +4,7 @@ use self::config::Config; use super::{tun_provider::TunProvider, TunnelEvent, TunnelMetadata}; use crate::routing; use std::{collections::HashMap, io, path::Path, sync::mpsc}; +use talpid_types::BoxedError; pub mod config; mod ping_monitor; @@ -21,7 +22,7 @@ pub type Result<T> = std::result::Result<T, Error>; pub enum Error { /// Failed to setup a tunnel device. #[error(display = "Failed to create tunnel device")] - SetupTunnelDeviceError(#[error(cause)] crate::network_interface::Error), + SetupTunnelDeviceError(#[error(cause)] BoxedError), /// Failed to setup wireguard tunnel. #[error(display = "Failed to start wireguard tunnel - {}", status)] @@ -65,9 +66,9 @@ impl WireguardMonitor { config: &Config, log_path: Option<&Path>, on_event: F, - _tun_provider: &dyn TunProvider, + tun_provider: &dyn TunProvider, ) -> Result<WireguardMonitor> { - let tunnel = Box::new(WgGoTunnel::start_tunnel(&config, log_path)?); + let tunnel = Box::new(WgGoTunnel::start_tunnel(&config, log_path, tun_provider)?); let iface_name = tunnel.get_interface_name(); let route_handle = routing::RouteManager::new( Self::get_routes(iface_name, &config), diff --git a/talpid-core/src/tunnel/wireguard/wireguard_go.rs b/talpid-core/src/tunnel/wireguard/wireguard_go.rs index 059147286d..9071766dbb 100644 --- a/talpid-core/src/tunnel/wireguard/wireguard_go.rs +++ b/talpid-core/src/tunnel/wireguard/wireguard_go.rs @@ -1,32 +1,28 @@ use super::{Config, Error, Result, Tunnel}; -use crate::network_interface::{NetworkInterface, TunnelDevice}; +use crate::tunnel::tun_provider::{Tun, TunConfig, TunProvider}; use std::{ffi::CString, fs, os::unix::io::AsRawFd, path::Path}; - pub struct WgGoTunnel { interface_name: String, handle: Option<i32>, // holding on to the tunnel device and the log file ensures that the associated file handles // live long enough and get closed when the tunnel is stopped - _tunnel_device: TunnelDevice, + _tunnel_device: Box<dyn Tun>, _log_file: fs::File, } impl WgGoTunnel { - pub fn start_tunnel(config: &Config, log_path: Option<&Path>) -> Result<Self> { - let mut tunnel_device = TunnelDevice::new().map_err(Error::SetupTunnelDeviceError)?; - - for ip in config.tunnel.addresses.iter() { - tunnel_device - .set_ip(*ip) - .map_err(Error::SetupTunnelDeviceError)?; - } - - tunnel_device - .set_up(true) + pub fn start_tunnel( + config: &Config, + log_path: Option<&Path>, + tun_provider: &dyn TunProvider, + ) -> Result<Self> { + let tunnel_config = TunConfig::new(config.tunnel.addresses.clone()); + let tunnel_device = tun_provider + .create_tun(tunnel_config) .map_err(Error::SetupTunnelDeviceError)?; - let interface_name: String = tunnel_device.get_name().to_string(); + let interface_name: String = tunnel_device.interface_name().to_string(); let log_file = prepare_log_file(log_path)?; let wg_config_str = config.to_userspace_format(); |
