summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Göransson <david.goransson@mullvad.net>2025-04-08 15:01:30 +0200
committerJonatan Rhodin <jonatan.rhodin@mullvad.net>2025-04-10 17:29:33 +0200
commit70ac76921d33ebcba57a3792ed3b37ce6e77dc9d (patch)
treeaa0090283569528befb16c2f5f8f8c568ad4b95d
parent042820a80d994a09a58dfcdc7dce1ee1d891ac39 (diff)
downloadmullvadvpn-70ac76921d33ebcba57a3792ed3b37ce6e77dc9d.tar.xz
mullvadvpn-70ac76921d33ebcba57a3792ed3b37ce6e77dc9d.zip
Revert smart routing logic for DAITA: Multihop feature indicator
This reverts commit 5d69b1db and renames smart routing to DAITA: Multihop
-rw-r--r--mullvad-management-interface/proto/management_interface.proto1
-rw-r--r--mullvad-management-interface/src/types/conversions/features.rs2
-rw-r--r--mullvad-types/src/features.rs62
3 files changed, 45 insertions, 20 deletions
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index c804751a4c..add5ad1c87 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -289,6 +289,7 @@ enum FeatureIndicator {
CUSTOM_MTU = 11;
CUSTOM_MSS_FIX = 12;
DAITA = 13;
+ DAITA_MULTIHOP = 14;
}
message ObfuscationEndpoint {
diff --git a/mullvad-management-interface/src/types/conversions/features.rs b/mullvad-management-interface/src/types/conversions/features.rs
index ac235d8163..bc1d6aa05a 100644
--- a/mullvad-management-interface/src/types/conversions/features.rs
+++ b/mullvad-management-interface/src/types/conversions/features.rs
@@ -18,6 +18,7 @@ impl From<mullvad_types::features::FeatureIndicator> for proto::FeatureIndicator
mullvad_types::features::FeatureIndicator::CustomMtu => CustomMtu,
mullvad_types::features::FeatureIndicator::CustomMssFix => CustomMssFix,
mullvad_types::features::FeatureIndicator::Daita => Daita,
+ mullvad_types::features::FeatureIndicator::DaitaMultihop => DaitaMultihop,
}
}
}
@@ -39,6 +40,7 @@ impl From<proto::FeatureIndicator> for mullvad_types::features::FeatureIndicator
proto::FeatureIndicator::CustomMtu => Self::CustomMtu,
proto::FeatureIndicator::CustomMssFix => Self::CustomMssFix,
proto::FeatureIndicator::Daita => Self::Daita,
+ proto::FeatureIndicator::DaitaMultihop => Self::DaitaMultihop,
}
}
}
diff --git a/mullvad-types/src/features.rs b/mullvad-types/src/features.rs
index 15f64e9992..a3a6c39580 100644
--- a/mullvad-types/src/features.rs
+++ b/mullvad-types/src/features.rs
@@ -79,7 +79,14 @@ pub enum FeatureIndicator {
ServerIpOverride,
CustomMtu,
CustomMssFix,
+
+ /// Whether DAITA (without multihop) is in use.
+ /// Mutually exclusive with [FeatureIndicator::DaitaMultihop].
Daita,
+
+ /// Whether DAITA (with multihop) is in use.
+ /// Mutually exclusive with [FeatureIndicator::Daita] and [FeatureIndicator::Multihop].
+ DaitaMultihop,
}
impl FeatureIndicator {
@@ -99,6 +106,7 @@ impl FeatureIndicator {
FeatureIndicator::CustomMtu => "Custom MTU",
FeatureIndicator::CustomMssFix => "Custom MSS",
FeatureIndicator::Daita => "DAITA",
+ FeatureIndicator::DaitaMultihop => "DAITA: Multihop",
}
}
}
@@ -173,13 +181,27 @@ pub fn compute_feature_indicators(
let mtu = settings.tunnel_options.wireguard.mtu.is_some();
- let mut daita = false;
- let multihop = endpoint.entry_endpoint.is_some();
+ let mut daita_multihop = false;
+ let mut multihop = false;
+ if let crate::relay_constraints::RelaySettings::Normal(constraints) =
+ &settings.relay_settings
+ {
+ multihop = endpoint.entry_endpoint.is_some()
+ && constraints.wireguard_constraints.use_multihop;
+
+ #[cfg(daita)]
+ {
+ // Detect whether we're using multihop, but it is not explicitly enabled.
+ daita_multihop = endpoint.daita
+ && endpoint.entry_endpoint.is_some()
+ && !constraints.wireguard_constraints.use_multihop
+ }
+ };
+
+ // Daita is mutually exclusive with DaitaMultihop
#[cfg(daita)]
- if endpoint.daita {
- daita = true;
- }
+ let daita = endpoint.daita && !daita_multihop;
vec![
(quantum_resistant, FeatureIndicator::QuantumResistance),
@@ -187,7 +209,9 @@ pub fn compute_feature_indicators(
(udp_tcp, FeatureIndicator::Udp2Tcp),
(shadowsocks, FeatureIndicator::Shadowsocks),
(mtu, FeatureIndicator::CustomMtu),
+ #[cfg(daita)]
(daita, FeatureIndicator::Daita),
+ (daita_multihop, FeatureIndicator::DaitaMultihop),
]
}
};
@@ -319,18 +343,13 @@ mod tests {
expected_indicators
);
- if let RelaySettings::Normal(constraints) = &mut settings.relay_settings {
- constraints.wireguard_constraints.use_multihop = true;
- };
- assert_eq!(
- compute_feature_indicators(&settings, &endpoint, false),
- expected_indicators,
- "The multihop feature indicator should be enabled by the endpoint, not the settings"
- );
endpoint.entry_endpoint = Some(Endpoint {
address: SocketAddr::from(([1, 2, 3, 4], 443)),
protocol: TransportProtocol::Tcp,
});
+ if let RelaySettings::Normal(constraints) = &mut settings.relay_settings {
+ constraints.wireguard_constraints.use_multihop = true;
+ };
expected_indicators.0.insert(FeatureIndicator::Multihop);
assert_eq!(
compute_feature_indicators(&settings, &endpoint, false),
@@ -366,14 +385,7 @@ mod tests {
#[cfg(daita)]
{
- // Multihop and DAITA on
endpoint.daita = true;
- settings
- .tunnel_options
- .wireguard
- .daita
- .use_multihop_if_necessary = true;
-
expected_indicators.0.insert(FeatureIndicator::Daita);
assert_eq!(
compute_feature_indicators(&settings, &endpoint, false),
@@ -404,6 +416,11 @@ mod tests {
if let RelaySettings::Normal(constraints) = &mut settings.relay_settings {
constraints.wireguard_constraints.use_multihop = false;
};
+ expected_indicators
+ .0
+ .insert(FeatureIndicator::DaitaMultihop);
+ expected_indicators.0.remove(&FeatureIndicator::Daita);
+ expected_indicators.0.remove(&FeatureIndicator::Multihop);
assert_eq!(
compute_feature_indicators(&settings, &endpoint, false),
expected_indicators,
@@ -411,8 +428,12 @@ mod tests {
);
// If we also remove the entry relay, we should not get a multihop indicator
+ expected_indicators.0.insert(FeatureIndicator::Daita);
endpoint.entry_endpoint = None;
expected_indicators.0.remove(&FeatureIndicator::Multihop);
+ expected_indicators
+ .0
+ .remove(&FeatureIndicator::DaitaMultihop);
assert_eq!(
compute_feature_indicators(&settings, &endpoint, false),
expected_indicators,
@@ -437,6 +458,7 @@ mod tests {
FeatureIndicator::CustomMtu => {}
FeatureIndicator::CustomMssFix => {}
FeatureIndicator::Daita => {}
+ FeatureIndicator::DaitaMultihop => {}
}
}
}