summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2023-05-23 10:29:01 +0200
committerMarkus Pettersson <markus.pettersson@mullvad.net>2023-05-24 10:16:47 +0200
commitf405135121f4924afd92ce428193c8f72be68ef2 (patch)
treed2880df540166691b20e893cf55935a7514de3de
parentc486ba42cda039ca7e8f620fb2ea9a7b6c20b41b (diff)
downloadmullvadvpn-f405135121f4924afd92ce428193c8f72be68ef2.tar.xz
mullvadvpn-f405135121f4924afd92ce428193c8f72be68ef2.zip
Add tunnel interface to output of `mullvad status`
Print the name of the tunnel interface when the app is in a connected state and the user requests verbose output by running `mullvad status -v`. To accomplish this, the state machine needs attach more metadata about the tunnel state when transitioning to the `Connected` state than prior to this change.
-rw-r--r--mullvad-cli/src/format.rs5
-rw-r--r--mullvad-management-interface/proto/management_interface.proto3
-rw-r--r--mullvad-management-interface/src/types/conversions/net.rs6
-rw-r--r--talpid-core/src/tunnel_state_machine/connected_state.rs6
-rw-r--r--talpid-types/src/net/mod.rs6
5 files changed, 24 insertions, 2 deletions
diff --git a/mullvad-cli/src/format.rs b/mullvad-cli/src/format.rs
index 8f8201814f..0d55c53173 100644
--- a/mullvad-cli/src/format.rs
+++ b/mullvad-cli/src/format.rs
@@ -14,6 +14,11 @@ pub fn print_state(state: &TunnelState, verbose: bool) {
"Connected to {}",
format_relay_connection(endpoint, location.as_ref(), verbose)
);
+ if verbose {
+ if let Some(tunnel_interface) = &endpoint.tunnel_interface {
+ println!("Tunnel interface: {tunnel_interface}")
+ }
+ }
}
Connecting { endpoint, location } => {
let ellipsis = if !verbose { "..." } else { "" };
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index 50d7dd7aeb..9f967c7531 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -194,6 +194,7 @@ message TunnelEndpoint {
ProxyEndpoint proxy = 5;
ObfuscationEndpoint obfuscation = 6;
Endpoint entry_endpoint = 7;
+ TunnelMetadata tunnel_metadata = 8;
}
enum ObfuscationType {
@@ -237,6 +238,8 @@ message GeoIpLocation {
string obfuscator_hostname = 11;
}
+message TunnelMetadata { string tunnel_interface = 1; }
+
enum Ownership {
ANY = 0;
MULLVAD_OWNED = 1;
diff --git a/mullvad-management-interface/src/types/conversions/net.rs b/mullvad-management-interface/src/types/conversions/net.rs
index 96210c02e3..0e4b60bac9 100644
--- a/mullvad-management-interface/src/types/conversions/net.rs
+++ b/mullvad-management-interface/src/types/conversions/net.rs
@@ -38,6 +38,9 @@ impl From<talpid_types::net::TunnelEndpoint> for proto::TunnelEndpoint {
address: entry.address.to_string(),
protocol: i32::from(proto::TransportProtocol::from(entry.protocol)),
}),
+ tunnel_metadata: endpoint
+ .tunnel_interface
+ .map(|tunnel_interface| proto::TunnelMetadata { tunnel_interface }),
}
}
}
@@ -118,6 +121,9 @@ impl TryFrom<proto::TunnelEndpoint> for talpid_types::net::TunnelEndpoint {
})
})
.transpose()?,
+ tunnel_interface: endpoint
+ .tunnel_metadata
+ .map(|tunnel_metadata| tunnel_metadata.tunnel_interface),
})
}
}
diff --git a/talpid-core/src/tunnel_state_machine/connected_state.rs b/talpid-core/src/tunnel_state_machine/connected_state.rs
index de9f43335e..2080416cad 100644
--- a/talpid-core/src/tunnel_state_machine/connected_state.rs
+++ b/talpid-core/src/tunnel_state_machine/connected_state.rs
@@ -323,7 +323,11 @@ impl TunnelState for ConnectedState {
bootstrap: Self::Bootstrap,
) -> (TunnelStateWrapper, TunnelStateTransition) {
let connected_state = ConnectedState::from(bootstrap);
- let tunnel_endpoint = connected_state.tunnel_parameters.get_tunnel_endpoint();
+ let tunnel_interface = Some(connected_state.metadata.interface.clone());
+ let tunnel_endpoint = talpid_types::net::TunnelEndpoint {
+ tunnel_interface,
+ ..connected_state.tunnel_parameters.get_tunnel_endpoint()
+ };
if let Err(error) = connected_state.set_firewall_policy(shared_values) {
DisconnectingState::enter(
diff --git a/talpid-types/src/net/mod.rs b/talpid-types/src/net/mod.rs
index 3daff6bae2..6ff56175cc 100644
--- a/talpid-types/src/net/mod.rs
+++ b/talpid-types/src/net/mod.rs
@@ -34,6 +34,7 @@ impl TunnelParameters {
proxy: params.proxy.as_ref().map(|proxy| proxy.get_endpoint()),
obfuscation: None,
entry_endpoint: None,
+ tunnel_interface: None,
},
TunnelParameters::Wireguard(params) => TunnelEndpoint {
tunnel_type: TunnelType::Wireguard,
@@ -48,6 +49,7 @@ impl TunnelParameters {
.connection
.get_exit_endpoint()
.map(|_| params.connection.get_endpoint()),
+ tunnel_interface: None,
},
}
}
@@ -145,7 +147,7 @@ pub struct TunnelTypeParseError;
/// A tunnel endpoint is broadcast during the connecting and connected states of the tunnel state
/// machine.
-#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
+#[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[cfg_attr(target_os = "android", derive(IntoJava))]
#[cfg_attr(target_os = "android", jnix(package = "net.mullvad.talpid.net"))]
pub struct TunnelEndpoint {
@@ -159,6 +161,8 @@ pub struct TunnelEndpoint {
pub obfuscation: Option<ObfuscationEndpoint>,
#[cfg_attr(target_os = "android", jnix(skip))]
pub entry_endpoint: Option<Endpoint>,
+ #[cfg_attr(target_os = "android", jnix(skip))]
+ pub tunnel_interface: Option<String>,
}
impl fmt::Display for TunnelEndpoint {