summaryrefslogtreecommitdiffhomepage
path: root/mullvad-cli/src
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-09-05 10:17:09 +0200
committerDavid Lönnhager <david.l@mullvad.net>2024-04-16 14:43:15 +0200
commitaf96a710398870587df9e07ee6f5afd16b8d9888 (patch)
tree7a5dfc3ee3a388c74c5a144983b5dfba8a057902 /mullvad-cli/src
parent99ae0b436f173b576343111cac38d6bec4ce2487 (diff)
downloadmullvadvpn-af96a710398870587df9e07ee6f5afd16b8d9888.tar.xz
mullvadvpn-af96a710398870587df9e07ee6f5afd16b8d9888.zip
Add DAITA Windows client and updated tuncfg
Diffstat (limited to 'mullvad-cli/src')
-rw-r--r--mullvad-cli/src/cmds/relay.rs2
-rw-r--r--mullvad-cli/src/cmds/tunnel.rs29
-rw-r--r--mullvad-cli/src/format.rs13
3 files changed, 42 insertions, 2 deletions
diff --git a/mullvad-cli/src/cmds/relay.rs b/mullvad-cli/src/cmds/relay.rs
index 7ef60d758c..f022402a83 100644
--- a/mullvad-cli/src/cmds/relay.rs
+++ b/mullvad-cli/src/cmds/relay.rs
@@ -542,6 +542,8 @@ impl Relay {
allowed_ips: all_of_the_internet(),
endpoint: SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), port),
psk: None,
+ #[cfg(target_os = "windows")]
+ constant_packet_size: false,
},
exit_peer: None,
ipv4_gateway,
diff --git a/mullvad-cli/src/cmds/tunnel.rs b/mullvad-cli/src/cmds/tunnel.rs
index 19d5c1a3c9..77338ee336 100644
--- a/mullvad-cli/src/cmds/tunnel.rs
+++ b/mullvad-cli/src/cmds/tunnel.rs
@@ -1,6 +1,8 @@
use anyhow::Result;
use clap::Subcommand;
use mullvad_management_interface::MullvadProxyClient;
+#[cfg(target_os = "windows")]
+use mullvad_types::wireguard::DaitaSettings;
use mullvad_types::{
constraints::Constraint,
wireguard::{QuantumResistantState, RotationInterval, DEFAULT_ROTATION_INTERVAL},
@@ -38,6 +40,10 @@ pub enum TunnelOptions {
/// Configure quantum-resistant key exchange
#[arg(long)]
quantum_resistant: Option<QuantumResistantState>,
+ /// Configure whether to enable DAITA
+ #[cfg(target_os = "windows")]
+ #[arg(long)]
+ daita: Option<BooleanOption>,
/// The key rotation interval. Number of hours, or 'any'
#[arg(long)]
rotation_interval: Option<Constraint<RotationInterval>>,
@@ -95,6 +101,9 @@ impl Tunnel {
tunnel_options.wireguard.quantum_resistant,
);
+ #[cfg(target_os = "windows")]
+ print_option!("DAITA", tunnel_options.wireguard.daita.enabled);
+
let key = rpc.get_wireguard_key().await?;
print_option!("Public key", key.key,);
print_option!(format_args!(
@@ -129,10 +138,20 @@ impl Tunnel {
TunnelOptions::Wireguard {
mtu,
quantum_resistant,
+ #[cfg(target_os = "windows")]
+ daita,
rotation_interval,
rotate_key,
} => {
- Self::handle_wireguard(mtu, quantum_resistant, rotation_interval, rotate_key).await
+ Self::handle_wireguard(
+ mtu,
+ quantum_resistant,
+ #[cfg(target_os = "windows")]
+ daita,
+ rotation_interval,
+ rotate_key,
+ )
+ .await
}
TunnelOptions::Ipv6 { state } => Self::handle_ipv6(state).await,
}
@@ -159,6 +178,7 @@ impl Tunnel {
async fn handle_wireguard(
mtu: Option<Constraint<u16>>,
quantum_resistant: Option<QuantumResistantState>,
+ #[cfg(target_os = "windows")] daita: Option<BooleanOption>,
rotation_interval: Option<Constraint<RotationInterval>>,
rotate_key: Option<RotateKey>,
) -> Result<()> {
@@ -174,6 +194,13 @@ impl Tunnel {
println!("Quantum resistant setting has been updated");
}
+ #[cfg(target_os = "windows")]
+ if let Some(daita) = daita {
+ rpc.set_daita_settings(DaitaSettings { enabled: *daita })
+ .await?;
+ println!("DAITA setting has been updated");
+ }
+
if let Some(interval) = rotation_interval {
match interval {
Constraint::Only(interval) => {
diff --git a/mullvad-cli/src/format.rs b/mullvad-cli/src/format.rs
index e605efbe3b..0d6ea0b0c0 100644
--- a/mullvad-cli/src/format.rs
+++ b/mullvad-cli/src/format.rs
@@ -174,6 +174,17 @@ fn format_relay_connection(
"\nQuantum resistant tunnel: no"
};
+ #[cfg(target_os = "windows")]
+ let daita = if !verbose {
+ ""
+ } else if endpoint.daita {
+ "\nDAITA: yes"
+ } else {
+ "\nDAITA: no"
+ };
+ #[cfg(not(target_os = "windows"))]
+ let daita = "";
+
let mut bridge_type = String::new();
let mut obfuscator_type = String::new();
if verbose {
@@ -186,7 +197,7 @@ fn format_relay_connection(
}
format!(
- "{exit_endpoint}{first_hop}{bridge}{obfuscator}{tunnel_type}{quantum_resistant}{bridge_type}{obfuscator_type}",
+ "{exit_endpoint}{first_hop}{bridge}{obfuscator}{tunnel_type}{quantum_resistant}{daita}{bridge_type}{obfuscator_type}",
first_hop = first_hop.unwrap_or_default(),
bridge = bridge.unwrap_or_default(),
obfuscator = obfuscator.unwrap_or_default(),