diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-09-05 10:17:09 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-04-16 14:43:15 +0200 |
| commit | af96a710398870587df9e07ee6f5afd16b8d9888 (patch) | |
| tree | 7a5dfc3ee3a388c74c5a144983b5dfba8a057902 /mullvad-cli/src | |
| parent | 99ae0b436f173b576343111cac38d6bec4ce2487 (diff) | |
| download | mullvadvpn-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.rs | 2 | ||||
| -rw-r--r-- | mullvad-cli/src/cmds/tunnel.rs | 29 | ||||
| -rw-r--r-- | mullvad-cli/src/format.rs | 13 |
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(), |
