diff options
| author | David Lönnhager <david.l@mullvad.net> | 2020-09-28 20:04:14 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2020-11-24 18:50:03 +0100 |
| commit | e18346243fa3e84aad6167356a659a7efc770fec (patch) | |
| tree | 872501d928c4d30122f660d2fd3435861a855d2f | |
| parent | 82e12793f17d88744870c41d9df52c8be667479e (diff) | |
| download | mullvadvpn-e18346243fa3e84aad6167356a659a7efc770fec.tar.xz mullvadvpn-e18346243fa3e84aad6167356a659a7efc770fec.zip | |
Use wintun device with OpenVPN
| -rw-r--r-- | dist-assets/windows/installer.nsh | 19 | ||||
| -rw-r--r-- | talpid-core/src/tunnel/openvpn.rs | 7 | ||||
| -rw-r--r-- | windows/driverlogic/src/driverlogic.cpp | 24 |
3 files changed, 47 insertions, 3 deletions
diff --git a/dist-assets/windows/installer.nsh b/dist-assets/windows/installer.nsh index 80c4ba998b..f231f36912 100644 --- a/dist-assets/windows/installer.nsh +++ b/dist-assets/windows/installer.nsh @@ -15,6 +15,9 @@ # TAP device hardware ID !define TAP_HARDWARE_ID "tapmullvad0901" +# Wintun hardware ID +!define TUN_HARDWARE_ID "wintun" + # "sc" exit code !define SERVICE_STARTED 0 !define SERVICE_START_PENDING 2 @@ -233,6 +236,10 @@ log::Log "RemoveWintun()" + nsExec::ExecToStack '"$TEMP\tap-driver\driverlogic.exe" remove-device ${TUN_HARDWARE_ID} Mullvad-WT' + Pop $0 + Pop $1 + msiutil::SilentUninstall "$TEMP\mullvad-wintun-amd64.msi" Pop $0 Pop $1 @@ -281,6 +288,18 @@ Goto InstallWintun_return ${EndIf} + log::Log "Creating new virtual adapter" + nsExec::ExecToStack '"$TEMP\tap-driver\driverlogic.exe" new-device ${TUN_HARDWARE_ID} Mullvad-WT' + Pop $0 + Pop $1 + + ${If} $0 != ${DL_GENERAL_SUCCESS} + IntFmt $0 "0x%X" $0 + StrCpy $R0 "Failed to create virtual adapter: error $0" + log::LogWithDetails $R0 $1 + Goto InstallWintun_return + ${EndIf} + log::Log "InstallWintun() completed successfully" Push 0 diff --git a/talpid-core/src/tunnel/openvpn.rs b/talpid-core/src/tunnel/openvpn.rs index 54591565fb..00e5fa2bb1 100644 --- a/talpid-core/src/tunnel/openvpn.rs +++ b/talpid-core/src/tunnel/openvpn.rs @@ -600,9 +600,10 @@ impl<C: OpenVpnBuilder + 'static> OpenVpnMonitor<C> { .enable_ipv6(params.generic_options.enable_ipv6) .ca(resource_dir.join("ca.crt")); #[cfg(windows)] - cmd.tunnel_alias(Some( - crate::winnet::get_tap_interface_alias().map_err(Error::WinnetError)?, - )); + { + cmd.tunnel_alias(Some(OsString::from("Mullvad-WT"))); + cmd.windows_driver(Some(crate::process::openvpn::WindowsDriver::Wintun)); + } if let Some(proxy_settings) = params.proxy.clone().take() { cmd.proxy_settings(proxy_settings); } diff --git a/windows/driverlogic/src/driverlogic.cpp b/windows/driverlogic/src/driverlogic.cpp index 4b9c24b1e7..25487d8481 100644 --- a/windows/driverlogic/src/driverlogic.cpp +++ b/windows/driverlogic/src/driverlogic.cpp @@ -893,6 +893,30 @@ int wmain(int argc, const wchar_t * argv[], const wchar_t * []) UpdateTapDriver(argv[2]); } + else if (0 == _wcsicmp(argv[1], L"new-device")) + { + if (4 != argc) + { + goto INVALID_ARGUMENTS; + } + + const wchar_t *hardwareId = argv[2]; + const wchar_t *baseName = argv[3]; + + CreateNetDevice(hardwareId, baseName, true); + } + else if (0 == _wcsicmp(argv[1], L"remove-device")) + { + if (4 != argc) + { + goto INVALID_ARGUMENTS; + } + + const wchar_t *hardwareId = argv[2]; + const wchar_t *baseName = argv[3]; + + RemoveNetAdapterByAlias(hardwareId, baseName); + } else if (0 == _wcsicmp(argv[1], L"remove")) { if (3 != argc) |
