summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastian Holmin <sebastian.holmin@mullvad.net>2024-12-20 16:40:00 +0100
committerSebastian Holmin <sebastian.holmin@mullvad.net>2024-12-20 17:36:10 +0100
commit6fcbf3e9667ca6f3ee778978430bb98c422b22ef (patch)
tree9d1258e225f71ba70fbf9ffb6fe3cadd9cfd3e9d
parente73a82708d956c844881d13b6bdfcebaca3184e7 (diff)
downloadmullvadvpn-6fcbf3e9667ca6f3ee778978430bb98c422b22ef.tar.xz
mullvadvpn-6fcbf3e9667ca6f3ee778978430bb98c422b22ef.zip
Add logging for ephemeral peer negotiation timeouts on Windows
-rw-r--r--talpid-wireguard/src/lib.rs31
1 files changed, 29 insertions, 2 deletions
diff --git a/talpid-wireguard/src/lib.rs b/talpid-wireguard/src/lib.rs
index 2d282c6315..7452cd4643 100644
--- a/talpid-wireguard/src/lib.rs
+++ b/talpid-wireguard/src/lib.rs
@@ -268,14 +268,22 @@ impl WireguardMonitor {
let ephemeral_obfs_sender = close_obfs_sender.clone();
if config.quantum_resistant || config.daita {
- ephemeral::config_ephemeral_peers(
+ if let Err(e) = ephemeral::config_ephemeral_peers(
&tunnel,
&mut config,
args.retry_attempt,
obfuscator.clone(),
ephemeral_obfs_sender,
)
- .await?;
+ .await
+ {
+ // We have received a small amount of reports about ephemeral peer nogationation
+ // timing out on Windows for 2024.9-beta1. These verbose data usage logs are
+ // a temporary measure to help us understand the issue. They can be removed
+ // if the issue is resolved.
+ log_tunnel_data_usage(&config, &tunnel).await;
+ return Err(e);
+ }
let metadata = Self::tunnel_metadata(&iface_name, &config);
event_hook
@@ -965,6 +973,25 @@ impl WireguardMonitor {
}
}
+async fn log_tunnel_data_usage(config: &Config, tunnel: &Arc<AsyncMutex<Option<Box<dyn Tunnel>>>>) {
+ let tunnel = tunnel.lock().await;
+ let Ok(tunnel_stats) = tunnel.as_ref().unwrap().get_tunnel_stats() else {
+ return;
+ };
+ if let Some(stats) = config
+ .exit_peer
+ .as_ref()
+ .map(|peer| peer.public_key.as_bytes())
+ .and_then(|pubkey| tunnel_stats.get(pubkey))
+ {
+ log::warn!("Exit peer stats: {:?}", stats);
+ };
+ let pubkey = config.entry_peer.public_key.as_bytes();
+ if let Some(stats) = tunnel_stats.get(pubkey) {
+ log::warn!("Entry peer stats: {:?}", stats);
+ }
+}
+
#[derive(Debug)]
enum CloseMsg {
Stop,