summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2026-04-21 15:02:25 +0000
committerLinus Färnstrand <linus@mullvad.net>2026-04-22 12:34:04 +0200
commitf67cf15be13f3dc5c67466c7bc3d7ccf6b16a2d8 (patch)
tree965a25c2e66499948459a3f61676da61c6d951b7
parentfee9f6a5c74bedf74d6a9f8291648ee2e1ffaa42 (diff)
downloadmullvadvpn-f67cf15be13f3dc5c67466c7bc3d7ccf6b16a2d8.tar.xz
mullvadvpn-f67cf15be13f3dc5c67466c7bc3d7ccf6b16a2d8.zip
Convert LeakInfo from single-variant enum to struct
-rw-r--r--mullvad-daemon/src/management_interface.rs12
-rw-r--r--mullvad-leak-checker/src/lib.rs14
-rw-r--r--mullvad-leak-checker/src/traceroute/unix/linux_like.rs10
-rw-r--r--mullvad-leak-checker/src/traceroute/unix/macos.rs2
-rw-r--r--mullvad-leak-checker/src/traceroute/windows.rs10
5 files changed, 18 insertions, 30 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index 5de38f50b4..a1df9a27db 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -1485,17 +1485,11 @@ impl ManagementInterfaceEventBroadcaster {
/// Notify clients about a potential leak.
pub(crate) fn notify_leak(&self, leak: mullvad_leak_checker::LeakInfo) {
- use mullvad_leak_checker::LeakInfo;
- let LeakInfo::NodeReachableOnInterface {
+ log::trace!("Broadcasting leak info: {leak:#?}");
+ let mullvad_leak_checker::LeakInfo {
reachable_nodes,
interface,
- } = &leak
- else {
- log::trace!("Matched on unexpected leak checker event: {leak:#?}");
- return;
- };
-
- log::trace!("Broadcasting leak info: {leak:#?}");
+ } = &leak;
let interface = match interface {
mullvad_leak_checker::Interface::Name(name) => name.to_owned(),
#[cfg(target_os = "macos")]
diff --git a/mullvad-leak-checker/src/lib.rs b/mullvad-leak-checker/src/lib.rs
index 5bd18bc094..e5f1163568 100644
--- a/mullvad-leak-checker/src/lib.rs
+++ b/mullvad-leak-checker/src/lib.rs
@@ -9,15 +9,13 @@ pub enum LeakStatus {
LeakDetected(LeakInfo),
}
-/// Details about how a leak happened
+/// Details about how a leak happened.
+///
+/// Managed to reach another network node on the physical interface, bypassing firewall rules.
#[derive(Clone, Debug)]
-#[non_exhaustive]
-pub enum LeakInfo {
- /// Managed to reach another network node on the physical interface, bypassing firewall rules.
- NodeReachableOnInterface {
- reachable_nodes: Vec<IpAddr>,
- interface: Interface,
- },
+pub struct LeakInfo {
+ pub reachable_nodes: Vec<IpAddr>,
+ pub interface: Interface,
}
#[derive(Clone)]
diff --git a/mullvad-leak-checker/src/traceroute/unix/linux_like.rs b/mullvad-leak-checker/src/traceroute/unix/linux_like.rs
index dbca77fd2b..622949d6f7 100644
--- a/mullvad-leak-checker/src/traceroute/unix/linux_like.rs
+++ b/mullvad-leak-checker/src/traceroute/unix/linux_like.rs
@@ -252,12 +252,10 @@ async fn recv_ttl_responses(
debug_assert!(!reachable_nodes.is_empty());
- Ok(LeakStatus::LeakDetected(
- LeakInfo::NodeReachableOnInterface {
- reachable_nodes,
- interface: interface.clone(),
- },
- ))
+ Ok(LeakStatus::LeakDetected(LeakInfo {
+ reachable_nodes,
+ interface: interface.clone(),
+ }))
}
struct RecvPacket<'a, S> {
diff --git a/mullvad-leak-checker/src/traceroute/unix/macos.rs b/mullvad-leak-checker/src/traceroute/unix/macos.rs
index 0fe1054ba3..3cf95dcfeb 100644
--- a/mullvad-leak-checker/src/traceroute/unix/macos.rs
+++ b/mullvad-leak-checker/src/traceroute/unix/macos.rs
@@ -142,7 +142,7 @@ async fn recv_ttl_responses(
.context("Failed to read from raw socket")?,
_timeout = timer => {
- return Ok(LeakStatus::LeakDetected(LeakInfo::NodeReachableOnInterface {
+ return Ok(LeakStatus::LeakDetected(LeakInfo {
reachable_nodes,
interface: interface.clone(),
}));
diff --git a/mullvad-leak-checker/src/traceroute/windows.rs b/mullvad-leak-checker/src/traceroute/windows.rs
index 6f6c787150..79a39cae4d 100644
--- a/mullvad-leak-checker/src/traceroute/windows.rs
+++ b/mullvad-leak-checker/src/traceroute/windows.rs
@@ -86,12 +86,10 @@ pub async fn traceroute_using_ping(opt: &TracerouteOpt) -> anyhow::Result<LeakSt
while let Some(result) = ping_tasks.next().await {
let Some(ip) = result? else { continue };
- return Ok(LeakStatus::LeakDetected(
- LeakInfo::NodeReachableOnInterface {
- reachable_nodes: vec![ip],
- interface: opt.interface.clone(),
- },
- ));
+ return Ok(LeakStatus::LeakDetected(LeakInfo {
+ reachable_nodes: vec![ip],
+ interface: opt.interface.clone(),
+ }));
}
anyhow::Ok(LeakStatus::NoLeak)