summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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 {