diff options
| author | David Göransson <david.goransson@mullvad.net> | 2025-04-08 15:01:30 +0200 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2025-04-10 17:29:33 +0200 |
| commit | 70ac76921d33ebcba57a3792ed3b37ce6e77dc9d (patch) | |
| tree | aa0090283569528befb16c2f5f8f8c568ad4b95d | |
| parent | 042820a80d994a09a58dfcdc7dce1ee1d891ac39 (diff) | |
| download | mullvadvpn-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.proto | 1 | ||||
| -rw-r--r-- | mullvad-management-interface/src/types/conversions/features.rs | 2 | ||||
| -rw-r--r-- | mullvad-types/src/features.rs | 62 |
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 => {} } } } |
