summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2020-09-28 16:46:59 +0200
committerDavid Lönnhager <david.l@mullvad.net>2020-11-24 18:50:03 +0100
commitf71f4c0f650a7d83008ac6e9d4b31019d50d6577 (patch)
tree24240191555414179f61577170be3656f308e476
parentca150b116febca516df53e6bf0ddd4162636eb47 (diff)
downloadmullvadvpn-f71f4c0f650a7d83008ac6e9d4b31019d50d6577.tar.xz
mullvadvpn-f71f4c0f650a7d83008ac6e9d4b31019d50d6577.zip
Add driver option to OpenVpnCommand
-rw-r--r--talpid-core/src/process/openvpn.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/talpid-core/src/process/openvpn.rs b/talpid-core/src/process/openvpn.rs
index 5193784eb8..c196e1ca86 100644
--- a/talpid-core/src/process/openvpn.rs
+++ b/talpid-core/src/process/openvpn.rs
@@ -50,6 +50,25 @@ static BASE_ARGUMENTS: &[&[&str]] = &[
static ALLOWED_TLS1_3_CIPHERS: &[&str] =
&["TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256"];
+/// Tun driver to use, specified using `--windows-driver`.
+#[derive(Clone)]
+pub enum WindowsDriver {
+ /// TAP adapter driver
+ TapWindows6,
+ /// Wintun driver
+ Wintun,
+}
+
+impl WindowsDriver {
+ /// Return string to use with the `--windows-driver` option.
+ pub fn as_str(&self) -> &'static str {
+ match self {
+ WindowsDriver::TapWindows6 => "tap-windows6",
+ WindowsDriver::Wintun => "wintun",
+ }
+ }
+}
+
/// An OpenVPN process builder, providing control over the different arguments that the OpenVPN
/// binary accepts.
#[derive(Clone)]
@@ -66,6 +85,8 @@ pub struct OpenVpnCommand {
log: Option<PathBuf>,
tunnel_options: net::openvpn::TunnelOptions,
proxy_settings: Option<net::openvpn::ProxySettings>,
+ #[cfg(windows)]
+ windows_driver: Option<WindowsDriver>,
tunnel_alias: Option<OsString>,
enable_ipv6: bool,
proxy_port: Option<u16>,
@@ -88,6 +109,8 @@ impl OpenVpnCommand {
log: None,
tunnel_options: net::openvpn::TunnelOptions::default(),
proxy_settings: None,
+ #[cfg(windows)]
+ windows_driver: None,
tunnel_alias: None,
enable_ipv6: true,
proxy_port: None,
@@ -156,6 +179,13 @@ impl OpenVpnCommand {
self
}
+ /// Sets the driver to use for tunneling
+ #[cfg(windows)]
+ pub fn windows_driver(&mut self, driver: Option<WindowsDriver>) -> &mut Self {
+ self.windows_driver = driver;
+ self
+ }
+
/// Sets the tunnel alias which will be used to identify a tunnel device that will be used by
/// OpenVPN.
pub fn tunnel_alias(&mut self, tunnel_alias: Option<OsString>) -> &mut Self {
@@ -245,6 +275,12 @@ impl OpenVpnCommand {
args.push(tunnel_device.clone());
}
+ #[cfg(windows)]
+ if let Some(ref windows_driver) = self.windows_driver {
+ args.push(OsString::from("--windows-driver"));
+ args.push(OsString::from(windows_driver.as_str()));
+ }
+
args.extend(Self::tls_cipher_arguments().iter().map(OsString::from));
args.extend(self.proxy_arguments().iter().map(OsString::from));