diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-09-28 16:46:59 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-11-24 18:50:03 +0100 |
| commit | f71f4c0f650a7d83008ac6e9d4b31019d50d6577 (patch) | |
| tree | 24240191555414179f61577170be3656f308e476 | |
| parent | ca150b116febca516df53e6bf0ddd4162636eb47 (diff) | |
| download | mullvadvpn-f71f4c0f650a7d83008ac6e9d4b31019d50d6577.tar.xz mullvadvpn-f71f4c0f650a7d83008ac6e9d4b31019d50d6577.zip | |
Add driver option to OpenVpnCommand
| -rw-r--r-- | talpid-core/src/process/openvpn.rs | 36 |
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)); |
