summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock21
m---------dist-assets/binaries0
-rw-r--r--ios/MullvadRustRuntime/GotaTun.swift5
-rw-r--r--ios/MullvadRustRuntime/include/mullvad_rust_runtime.h12
-rw-r--r--ios/PacketTunnel/WireGuardAdapter/GotaAdapter.swift22
-rw-r--r--mullvad-ios/src/gotatun/config.rs37
-rw-r--r--mullvad-ios/src/gotatun/mod.rs18
7 files changed, 51 insertions, 64 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a41ceaff5b..07d3d1d5ca 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2418,9 +2418,9 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.9.0"
+version = "2.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
dependencies = [
"serde",
]
@@ -5043,17 +5043,18 @@ dependencies = [
[[package]]
name = "shadowsocks-service"
-version = "1.20.4"
+version = "1.23.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0c0ce5a3a15e2688b7014c37ed3db33dc296d8b8fda36643c053882bf1d5f44"
+checksum = "b94cc39b669a8e67f405bd1d386170b2aaac654c156837e76940958c1608c61b"
dependencies = [
"arc-swap",
- "async-trait",
"byte_string",
"byteorder",
"bytes",
"cfg-if",
"futures",
+ "hickory-resolver",
+ "http",
"http-body-util",
"httparse",
"hyper",
@@ -5064,18 +5065,18 @@ dependencies = [
"libc",
"log",
"lru_time_cache",
- "nix 0.29.0",
- "once_cell",
+ "nix 0.30.1",
"pin-project",
- "rand 0.8.5",
+ "rand 0.9.2",
"regex",
"serde",
"shadowsocks",
"socket2 0.5.8",
"spin",
- "thiserror 1.0.59",
+ "thiserror 2.0.9",
"tokio",
- "windows-sys 0.59.0",
+ "trait-variant",
+ "windows-sys 0.60.2",
]
[[package]]
diff --git a/dist-assets/binaries b/dist-assets/binaries
-Subproject ff0e3746c89a04314377cffeb52faaa976413a6
+Subproject 5e7ec28eebef237bb6b88daba2c68e6f857d4c0
diff --git a/ios/MullvadRustRuntime/GotaTun.swift b/ios/MullvadRustRuntime/GotaTun.swift
index 683b4c19d0..a55cde660e 100644
--- a/ios/MullvadRustRuntime/GotaTun.swift
+++ b/ios/MullvadRustRuntime/GotaTun.swift
@@ -8,6 +8,7 @@
import Foundation
import MullvadRustRuntimeProxy
+import Network
public class GotaTun {
public enum Error: Swift.Error {
@@ -49,11 +50,11 @@ public class GotaTunConfig {
}
public func addV4Addr(address: IPv4Address) {
-
+ mullvad_ios_gotatun_config_set_private_ipv4(handle, "\(address)")
}
public func addV6Addr(address: IPv6Address) {
-
+ mullvad_ios_gotatun_config_set_private_ipv6(handle, "\(address)")
}
private func preSharedKeyOr(_ key: Data?) -> Data? {
diff --git a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
index e463ce7f91..ad491d8eb7 100644
--- a/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
+++ b/ios/MullvadRustRuntime/include/mullvad_rust_runtime.h
@@ -907,6 +907,18 @@ int32_t mullvad_ios_gotatun_config_set_exit(struct SwiftGotaTunConfiguration con
/**
*
*/
+int32_t mullvad_ios_gotatun_config_set_private_ipv4(struct SwiftGotaTunConfiguration config,
+ const char *ipv4);
+
+/**
+ *
+ */
+int32_t mullvad_ios_gotatun_config_set_private_ipv6(struct SwiftGotaTunConfiguration config,
+ const char *ipv6);
+
+/**
+ *
+ */
int32_t mullvad_ios_gotatun_config_set_entry(struct SwiftGotaTunConfiguration config,
const uint8_t *local_private_key,
const uint8_t *local_ephemeral_key,
diff --git a/ios/PacketTunnel/WireGuardAdapter/GotaAdapter.swift b/ios/PacketTunnel/WireGuardAdapter/GotaAdapter.swift
index d91a9f44fc..98b6245fe1 100644
--- a/ios/PacketTunnel/WireGuardAdapter/GotaAdapter.swift
+++ b/ios/PacketTunnel/WireGuardAdapter/GotaAdapter.swift
@@ -20,6 +20,10 @@ import WireGuardKitC
// - DAITA
public final class GotaAdapter: TunnelAdapterProtocol, TunnelDeviceInfoProtocol, Sendable {
+ public func apply(settings: PacketTunnelCore.TunnelInterfaceSettings) async throws {
+ try await self.provider.setTunnelNetworkSettings(settings.asTunnelSettings())
+ }
+
public enum Error: Swift.Error {
case noPeer
@@ -81,8 +85,6 @@ public final class GotaAdapter: TunnelAdapterProtocol, TunnelDeviceInfoProtocol,
public func start(
configuration: PacketTunnelCore.TunnelAdapterConfiguration, daita: WireGuardKitTypes.DaitaConfiguration?
) async throws {
- try await self.provider.setTunnelNetworkSettings(generateNetworkSettings(for: configuration))
-
guard let tunnelFileDescriptor = self.tunnelFileDescriptor else {
throw Error.noFileDescriptor
}
@@ -108,11 +110,17 @@ public final class GotaAdapter: TunnelAdapterProtocol, TunnelDeviceInfoProtocol,
publicKey: entryPeer.publicKey.rawValue,
endpoint: entryPeer.endpoint.description)
- if let v4Addr = exit.interfaceAddresses.first(
- where: { $0.address is IPv4Address }) {
- config.set
+ if let v4Addr = exit.interfaceAddresses.compactMap({ range in
+ range.address as? IPv4Address
+ }).first {
+ config.addV4Addr(address: v4Addr)
}
+ if let v6Addr = exit.interfaceAddresses.compactMap({ range in
+ range.address as? IPv6Address
+ }).first {
+ config.addV6Addr(address: v6Addr)
+ }
}
@@ -130,10 +138,6 @@ public final class GotaAdapter: TunnelAdapterProtocol, TunnelDeviceInfoProtocol,
exitConfiguration: PacketTunnelCore.TunnelAdapterConfiguration,
daita: WireGuardKitTypes.DaitaConfiguration?
) async throws {
- // TODO: Should `entryConfiguration` ever be nil here ?
- try await self.provider.setTunnelNetworkSettings(
- generateNetworkSettings(for: entryConfiguration ?? exitConfiguration))
-
guard let tunnelFileDescriptor = self.tunnelFileDescriptor else {
throw Error.noFileDescriptor
}
diff --git a/mullvad-ios/src/gotatun/config.rs b/mullvad-ios/src/gotatun/config.rs
index abe5737bb4..ddf99a4220 100644
--- a/mullvad-ios/src/gotatun/config.rs
+++ b/mullvad-ios/src/gotatun/config.rs
@@ -208,47 +208,30 @@ pub unsafe extern "C" fn mullvad_ios_gotatun_config_set_exit(
#[unsafe(no_mangle)]
pub unsafe extern "C" fn mullvad_ios_gotatun_config_set_private_ipv4(
mut config: SwiftGotaTunConfiguration,
- ipv4: *const u8,
- peer_endpoint: *const c_char,
-) -> i32 {
- let cfg = unsafe { config.mut_config() };
-///
-#[unsafe(no_mangle)]
-pub unsafe extern "C" fn mullvad_ios_gotatun_config_set_private_ipv4(
- mut config: SwiftGotaTunConfiguration,
- ipv4: *const u8,
- peer_endpoint: *const c_char,
+ ipv4: *const c_char,
) -> i32 {
let cfg = unsafe { config.mut_config() };
- let cstr = unsafe { CStr::from_ptr(ptr) };
- let Ok(s) = cstr.to_str() {
- return ConfigStatus::InvalidArg;
- }
-
- config.set_ipv4_addr(&s);
-}
- let cstr = unsafe { CStr::from_ptr(ptr) };
+ let cstr = unsafe { CStr::from_ptr(ipv4) };
let Ok(s) = cstr.to_str() else {
- return ConfigStatus::InvalidArg;
- }
+ return ConfigStatus::InvalidArg as i32;
+ };
- config.set_ipv4_addr(&s);
+ cfg.set_ipv4_addr(&s) as i32
}
///
#[unsafe(no_mangle)]
pub unsafe extern "C" fn mullvad_ios_gotatun_config_set_private_ipv6(
mut config: SwiftGotaTunConfiguration,
- ipv4: *const u8,
- peer_endpoint: *const c_char,
+ ipv6: *const c_char,
) -> i32 {
let cfg = unsafe { config.mut_config() };
- let cstr = unsafe { CStr::from_ptr(ptr) };
+ let cstr = unsafe { CStr::from_ptr(ipv6) };
let Ok(s) = cstr.to_str() else {
- return ConfigStatus::InvalidArg;
- }
+ return ConfigStatus::InvalidArg as i32;
+ };
- config.set_ipv6_addr(&s);
+ cfg.set_ipv6_addr(&s) as i32
}
///
diff --git a/mullvad-ios/src/gotatun/mod.rs b/mullvad-ios/src/gotatun/mod.rs
index b2dbd7df73..0e2e57ede8 100644
--- a/mullvad-ios/src/gotatun/mod.rs
+++ b/mullvad-ios/src/gotatun/mod.rs
@@ -103,23 +103,9 @@ impl GotaTun {
let entry_peer = config.entry.as_ref().unwrap().get_peer();
let exit_peer = config.exit.as_ref().unwrap().get_peer();
- let source_v4 = entry_peer
- .allowed_ip
- .iter()
- .find_map(|ip| match &ip.addr {
- &IpAddr::V4(ipv4_addr) => Some(ipv4_addr),
- IpAddr::V6(..) => None,
- })
- .unwrap_or(Ipv4Addr::UNSPECIFIED);
+ let source_v4 = config.private_ip_v4.unwrap_or(Ipv4Addr::UNSPECIFIED);
+ let source_v6 = config.private_ip_v6.unwrap_or(Ipv6Addr::UNSPECIFIED);
- let source_v6 = entry_peer
- .allowed_ip
- .iter()
- .find_map(|ip| match &ip.addr {
- &IpAddr::V6(ipv6_addr) => Some(ipv6_addr),
- IpAddr::V4(..) => None,
- })
- .unwrap_or(Ipv6Addr::UNSPECIFIED);
let multihop_overhead = match exit_peer.endpoint.unwrap().ip() {
IpAddr::V4(..) => Ipv4Header::LEN + UdpHeader::LEN + WgData::OVERHEAD,