summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKalle Lindström <karl.lindstrom@mullvad.net>2024-11-28 15:00:37 +0100
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2024-12-02 11:08:08 +0100
commit298f810359d9d1d5ecef5e5a751b958adc3e8022 (patch)
treeb4aa1823a0f1baf4d401fee8154108083e1dec90
parent2e022babf06b47e100d0cf98a79751d0088d689e (diff)
downloadmullvadvpn-298f810359d9d1d5ecef5e5a751b958adc3e8022.tar.xz
mullvadvpn-298f810359d9d1d5ecef5e5a751b958adc3e8022.zip
Make tunnel connection errors recoverable
-rw-r--r--talpid-wireguard/src/lib.rs9
-rw-r--r--talpid-wireguard/src/wireguard_go/mod.rs9
2 files changed, 6 insertions, 12 deletions
diff --git a/talpid-wireguard/src/lib.rs b/talpid-wireguard/src/lib.rs
index 7c93b39f18..06726f9c69 100644
--- a/talpid-wireguard/src/lib.rs
+++ b/talpid-wireguard/src/lib.rs
@@ -1087,15 +1087,6 @@ pub enum TunnelError {
#[cfg(daita)]
#[error("Failed to start DAITA - tunnel implemenation does not support DAITA")]
DaitaNotSupported,
-
- /// [connectivity] error.
- #[error(transparent)]
- Connectivity(#[from] Box<connectivity::Error>),
-
- /// Tunnel seemingly does not serve any traffic
- #[cfg(target_os = "android")]
- #[error("Tunnel seemingly does not serve any traffic")]
- TunnelUp,
}
#[cfg(target_os = "linux")]
diff --git a/talpid-wireguard/src/wireguard_go/mod.rs b/talpid-wireguard/src/wireguard_go/mod.rs
index d283758f3b..e2072c291e 100644
--- a/talpid-wireguard/src/wireguard_go/mod.rs
+++ b/talpid-wireguard/src/wireguard_go/mod.rs
@@ -1,5 +1,7 @@
#[cfg(target_os = "android")]
use super::config;
+#[cfg(target_os = "android")]
+use super::Error;
use super::{
stats::{Stats, StatsMap},
Config, Tunnel, TunnelError,
@@ -434,14 +436,15 @@ impl WgGoTunnel {
&self,
checker: &mut connectivity::Check<connectivity::Cancellable>,
) -> Result<()> {
- let connectivity_err = |e| TunnelError::Connectivity(Box::new(e));
let connection_established = checker
.establish_connectivity(self)
- .map_err(connectivity_err)?;
+ .map_err(|e| TunnelError::RecoverableStartWireguardError(Box::new(e)))?;
// Timed out
if !connection_established {
- return Err(TunnelError::TunnelUp);
+ return Err(TunnelError::RecoverableStartWireguardError(Box::new(
+ Error::TimeoutError,
+ )));
}
Ok(())
}