summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-09-18 13:57:00 +0200
committerDavid Lönnhager <david.l@mullvad.net>2025-09-18 13:57:00 +0200
commit5b7d13731b4e7d38ae060dc3948b979237974ff7 (patch)
tree6a1311a33e50a0b2ec312d6f28d78817edecb45f
parente529ab2eb44515f726cda080941793933eb59b2f (diff)
parent193c19fb2f01661c9ed687f0e5579d9dd563af20 (diff)
downloadmullvadvpn-5b7d13731b4e7d38ae060dc3948b979237974ff7.tar.xz
mullvadvpn-5b7d13731b4e7d38ae060dc3948b979237974ff7.zip
Merge branch 'openvpn-ipv6-fix'
-rw-r--r--mullvad-relay-selector/src/relay_selector/mod.rs3
-rw-r--r--mullvad-relay-selector/tests/relay_selector.rs31
2 files changed, 34 insertions, 0 deletions
diff --git a/mullvad-relay-selector/src/relay_selector/mod.rs b/mullvad-relay-selector/src/relay_selector/mod.rs
index 1105394c1b..bb6f251c0b 100644
--- a/mullvad-relay-selector/src/relay_selector/mod.rs
+++ b/mullvad-relay-selector/src/relay_selector/mod.rs
@@ -1185,6 +1185,9 @@ fn apply_ip_availability(
runtime_ip_availability: IpAvailability,
user_query: &mut RelayQuery,
) -> Result<(), Error> {
+ if user_query.tunnel_protocol() == TunnelType::OpenVpn {
+ return Ok(());
+ }
let ip_version = match runtime_ip_availability {
IpAvailability::Ipv4 => Constraint::Only(IpVersion::V4),
IpAvailability::Ipv6 => Constraint::Only(IpVersion::V6),
diff --git a/mullvad-relay-selector/tests/relay_selector.rs b/mullvad-relay-selector/tests/relay_selector.rs
index 2237289574..e623b0f168 100644
--- a/mullvad-relay-selector/tests/relay_selector.rs
+++ b/mullvad-relay-selector/tests/relay_selector.rs
@@ -925,6 +925,37 @@ fn test_selecting_openvpn_and_quic() {
.expect("OpenVPN should not be affected by QUIC");
}
+/// Selecting WG IPv6 should not affect OpenVPN
+#[test]
+fn test_selecting_openvpn_and_wg_ipv6() {
+ // Simulate a scenario where a user configured their WireGuard settings and set the IPVersion
+ // explicitly to IPv6. Sometime later, they switched to OpenVPN as the tunnel protocol.
+ let relay_constraints = {
+ let (mut relay_constraints, ..) = RelayQueryBuilder::wireguard()
+ .ip_version(IpVersion::V6)
+ .build()
+ .into_settings();
+ relay_constraints.tunnel_protocol = TunnelType::OpenVpn;
+ relay_constraints
+ };
+ let config = SelectorConfig {
+ relay_settings: relay_constraints.into(),
+ ..SelectorConfig::default()
+ };
+ let relay_selector = RelaySelector::from_list(config, RELAYS.clone());
+ let runtime_parameters = talpid_types::net::IpAvailability::Ipv4;
+
+ let _relay = relay_selector
+ .get_relay_by_query(RelayQueryBuilder::openvpn().build())
+ .expect("OpenVPN should not be affected by WG IPv6");
+
+ let user_result = relay_selector.get_relay(0, runtime_parameters).unwrap();
+ assert!(
+ matches!(user_result, GetRelay::OpenVpn { .. }),
+ "should match openvpn"
+ );
+}
+
/// Ignore extra IPv4 addresses when overrides are set
#[test]
fn test_selecting_wireguard_ignore_extra_ips_override_v4() {