diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-09-17 11:49:31 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-09-21 12:56:03 +0200 |
| commit | 5493acc7689ed1c98b1ffc3df715a28062ca8295 (patch) | |
| tree | 80bc6d5fb9583732ece4a2c39b1956ee07a5f9ed | |
| parent | e7140a98f1b5112d78b51b6c14ac50c63f51642a (diff) | |
| download | mullvadvpn-5493acc7689ed1c98b1ffc3df715a28062ca8295.tar.xz mullvadvpn-5493acc7689ed1c98b1ffc3df715a28062ca8295.zip | |
Remove magic constants from wg tunnel
| -rw-r--r-- | talpid-core/src/tunnel/wireguard/wireguard_go.rs | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/talpid-core/src/tunnel/wireguard/wireguard_go.rs b/talpid-core/src/tunnel/wireguard/wireguard_go.rs index f8fbd21e2e..2e6e282b63 100644 --- a/talpid-core/src/tunnel/wireguard/wireguard_go.rs +++ b/talpid-core/src/tunnel/wireguard/wireguard_go.rs @@ -95,14 +95,7 @@ impl WgGoTunnel { ) }; - if handle < 0 { - // Error values returned from the wireguard-go library - return match handle { - -1 => Err(TunnelError::FatalStartWireguardError), - -2 => Err(TunnelError::RecoverableStartWireguardError), - _ => unreachable!("Unknown status code returned from wireguard-go"), - }; - } + check_wg_status(handle)?; #[cfg(target_os = "android")] Self::bypass_tunnel_sockets(&mut tunnel_device, handle) @@ -153,10 +146,7 @@ impl WgGoTunnel { logging_context.0 as *mut libc::c_void, ) }; - - if handle < 0 { - return Err(TunnelError::FatalStartWireguardError); - } + check_wg_status(handle)?; let actual_iface_name = { let actual_iface_name_c = unsafe { CStr::from_ptr(alias_ptr) }; @@ -343,6 +333,18 @@ impl Tunnel for WgGoTunnel { } } +fn check_wg_status(wg_code: i32) -> Result<()> { + match wg_code { + ERROR_GENERAL_FAILURE => Err(TunnelError::FatalStartWireguardError), + ERROR_INTERMITTENT_FAILURE => Err(TunnelError::RecoverableStartWireguardError), + 0.. => Ok(()), + _ => { + log::error!("Unknown status code returned from wireguard-go"); + Err(TunnelError::FatalStartWireguardError) + } + } +} + #[cfg(unix)] pub type Fd = std::os::unix::io::RawFd; @@ -352,6 +354,9 @@ pub type LoggingCallback = unsafe extern "system" fn( context: *mut libc::c_void, ); +const ERROR_GENERAL_FAILURE: i32 = -1; +const ERROR_INTERMITTENT_FAILURE: i32 = -2; + extern "C" { /// Creates a new wireguard tunnel, uses the specific interface name, MTU and file descriptors /// for the tunnel device and logging. |
