diff options
| author | David Lönnhager <david.l@mullvad.net> | 2025-09-18 13:57:00 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2025-09-18 13:57:00 +0200 |
| commit | 5b7d13731b4e7d38ae060dc3948b979237974ff7 (patch) | |
| tree | 6a1311a33e50a0b2ec312d6f28d78817edecb45f | |
| parent | e529ab2eb44515f726cda080941793933eb59b2f (diff) | |
| parent | 193c19fb2f01661c9ed687f0e5579d9dd563af20 (diff) | |
| download | mullvadvpn-5b7d13731b4e7d38ae060dc3948b979237974ff7.tar.xz mullvadvpn-5b7d13731b4e7d38ae060dc3948b979237974ff7.zip | |
Merge branch 'openvpn-ipv6-fix'
| -rw-r--r-- | mullvad-relay-selector/src/relay_selector/mod.rs | 3 | ||||
| -rw-r--r-- | mullvad-relay-selector/tests/relay_selector.rs | 31 |
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() { |
