diff options
| author | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-05-23 10:29:01 +0200 |
|---|---|---|
| committer | Markus Pettersson <markus.pettersson@mullvad.net> | 2023-05-24 10:16:47 +0200 |
| commit | f405135121f4924afd92ce428193c8f72be68ef2 (patch) | |
| tree | d2880df540166691b20e893cf55935a7514de3de | |
| parent | c486ba42cda039ca7e8f620fb2ea9a7b6c20b41b (diff) | |
| download | mullvadvpn-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.rs | 5 | ||||
| -rw-r--r-- | mullvad-management-interface/proto/management_interface.proto | 3 | ||||
| -rw-r--r-- | mullvad-management-interface/src/types/conversions/net.rs | 6 | ||||
| -rw-r--r-- | talpid-core/src/tunnel_state_machine/connected_state.rs | 6 | ||||
| -rw-r--r-- | talpid-types/src/net/mod.rs | 6 |
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 { |
