summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-04-22 15:45:09 +0200
committerDavid Lönnhager <david.l@mullvad.net>2021-05-17 11:08:50 +0200
commit727015d63363922ec79ec4a3dcb79a34656d9468 (patch)
tree0eadd80432de54ed0035cfd5a0082138ad492766
parentaf9f0236984d5e41b2517a3fd52c417290094c82 (diff)
downloadmullvadvpn-727015d63363922ec79ec4a3dcb79a34656d9468.tar.xz
mullvadvpn-727015d63363922ec79ec4a3dcb79a34656d9468.zip
Add exit location field
-rw-r--r--mullvad-cli/src/cmds/relay.rs1
-rw-r--r--mullvad-daemon/src/relays.rs16
-rw-r--r--mullvad-management-interface/proto/management_interface.proto1
-rw-r--r--mullvad-management-interface/src/types.rs2
-rw-r--r--mullvad-types/src/relay_constraints.rs3
5 files changed, 14 insertions, 9 deletions
diff --git a/mullvad-cli/src/cmds/relay.rs b/mullvad-cli/src/cmds/relay.rs
index d9067c7dbb..763e1d7a11 100644
--- a/mullvad-cli/src/cmds/relay.rs
+++ b/mullvad-cli/src/cmds/relay.rs
@@ -526,6 +526,7 @@ impl Relay {
ip_version: ip_version.option().map(|protocol| IpVersionConstraint {
protocol: protocol as i32,
}),
+ exit_location: None,
}),
..Default::default()
},
diff --git a/mullvad-daemon/src/relays.rs b/mullvad-daemon/src/relays.rs
index 54d664b640..5b60369ad6 100644
--- a/mullvad-daemon/src/relays.rs
+++ b/mullvad-daemon/src/relays.rs
@@ -310,7 +310,7 @@ impl RelaySelector {
}
Constraint::Only(TunnelType::Wireguard) => {
relay_constraints.wireguard_constraints =
- original_constraints.wireguard_constraints;
+ original_constraints.wireguard_constraints.clone();
// This ensures that if after the first 2 failed attempts the daemon does not
// connect, then afterwards 2 of each 4 successive attempts will try to connect on
// port 53.
@@ -493,7 +493,7 @@ impl RelaySelector {
relay.tunnels = RelayTunnels {
wireguard: Self::matching_wireguard_tunnels(
&relay.tunnels,
- constraints.wireguard_constraints,
+ &constraints.wireguard_constraints,
),
openvpn: Self::matching_openvpn_tunnels(
&relay.tunnels,
@@ -507,7 +507,7 @@ impl RelaySelector {
relay.tunnels = RelayTunnels {
wireguard: Self::matching_wireguard_tunnels(
&relay.tunnels,
- constraints.wireguard_constraints,
+ &constraints.wireguard_constraints,
),
openvpn: vec![],
};
@@ -580,7 +580,7 @@ impl RelaySelector {
fn matching_wireguard_tunnels(
tunnels: &RelayTunnels,
- constraints: WireguardConstraints,
+ constraints: &WireguardConstraints,
) -> Vec<WireguardEndpointData> {
tunnels
.wireguard
@@ -660,7 +660,7 @@ impl RelaySelector {
.choose(&mut self.rng)
.cloned()
.and_then(|wg_tunnel| {
- self.wg_data_to_endpoint(relay, wg_tunnel, constraints.wireguard_constraints)
+ self.wg_data_to_endpoint(relay, wg_tunnel, &constraints.wireguard_constraints)
})
};
@@ -689,7 +689,7 @@ impl RelaySelector {
&mut self,
relay: &Relay,
data: WireguardEndpointData,
- constraints: WireguardConstraints,
+ constraints: &WireguardConstraints,
) -> Option<MullvadEndpoint> {
let host = self.get_address_for_wireguard_relay(relay, constraints)?;
let port = self.get_port_for_wireguard_relay(&data, constraints)?;
@@ -709,7 +709,7 @@ impl RelaySelector {
fn get_address_for_wireguard_relay(
&mut self,
relay: &Relay,
- constraints: WireguardConstraints,
+ constraints: &WireguardConstraints,
) -> Option<IpAddr> {
match constraints.ip_version {
Constraint::Any | Constraint::Only(IpVersion::V4) => Some(relay.ipv4_addr_in.into()),
@@ -720,7 +720,7 @@ impl RelaySelector {
fn get_port_for_wireguard_relay(
&mut self,
data: &WireguardEndpointData,
- constraints: WireguardConstraints,
+ constraints: &WireguardConstraints,
) -> Option<u16> {
match constraints.port {
Constraint::Any => {
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto
index 41ba8c96a9..9a0c594421 100644
--- a/mullvad-management-interface/proto/management_interface.proto
+++ b/mullvad-management-interface/proto/management_interface.proto
@@ -317,6 +317,7 @@ message WireguardConstraints {
// NOTE: optional
uint32 port = 1;
IpVersionConstraint ip_version = 2;
+ RelayLocation exit_location = 3;
}
message CustomRelaySettings {
diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs
index aff3a30789..b844c96fe7 100644
--- a/mullvad-management-interface/src/types.rs
+++ b/mullvad-management-interface/src/types.rs
@@ -450,6 +450,7 @@ impl From<mullvad_types::relay_constraints::RelaySettings> for RelaySettings {
.option()
.map(IpVersion::from)
.map(IpVersionConstraint::from),
+ exit_location: None,
}),
openvpn_constraints: Some(OpenvpnConstraints {
@@ -881,6 +882,7 @@ impl TryFrom<RelaySettingsUpdate> for mullvad_types::relay_constraints::RelaySet
Constraint::Any
},
ip_version: Constraint::from(ip_version),
+ exit_location: None,
}
}),
openvpn_constraints: settings.openvpn_constraints.map(|constraints| {
diff --git a/mullvad-types/src/relay_constraints.rs b/mullvad-types/src/relay_constraints.rs
index d32608124d..ab57c62529 100644
--- a/mullvad-types/src/relay_constraints.rs
+++ b/mullvad-types/src/relay_constraints.rs
@@ -434,11 +434,12 @@ impl Match<OpenVpnEndpointData> for OpenVpnConstraints {
}
/// [`Constraint`]s applicable to WireGuard relay servers.
-#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Deserialize, Serialize)]
+#[derive(Debug, Default, Clone, Eq, PartialEq, Deserialize, Serialize)]
#[serde(default)]
pub struct WireguardConstraints {
pub port: Constraint<u16>,
pub ip_version: Constraint<IpVersion>,
+ pub exit_location: Option<LocationConstraint>,
}
impl fmt::Display for WireguardConstraints {