summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-09-17 11:49:31 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-09-21 12:56:03 +0200
commit5493acc7689ed1c98b1ffc3df715a28062ca8295 (patch)
tree80bc6d5fb9583732ece4a2c39b1956ee07a5f9ed
parente7140a98f1b5112d78b51b6c14ac50c63f51642a (diff)
downloadmullvadvpn-5493acc7689ed1c98b1ffc3df715a28062ca8295.tar.xz
mullvadvpn-5493acc7689ed1c98b1ffc3df715a28062ca8295.zip
Remove magic constants from wg tunnel
-rw-r--r--talpid-core/src/tunnel/wireguard/wireguard_go.rs29
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.