summaryrefslogtreecommitdiffhomepage
path: root/talpid-core/src
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-27 19:59:00 +0000
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2019-05-28 16:37:59 +0000
commit95a6729d2404536a3ea8ce2e5358c7710d4b43a1 (patch)
tree6cb925de4420fd02a63e402b5cfb4b23c4fa49ca /talpid-core/src
parent6ba142eed36eacbff3ac00af2f46a29910254081 (diff)
downloadmullvadvpn-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.rs7
-rw-r--r--talpid-core/src/tunnel/wireguard/wireguard_go.rs26
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();