aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WireGuard/WireGuardNetworkExtension/DNSResolver.swift6
-rw-r--r--WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift11
-rw-r--r--wireguard-go-bridge/src/api-ios.go5
-rw-r--r--wireguard-go-bridge/wireguard.h2
4 files changed, 22 insertions, 2 deletions
diff --git a/WireGuard/WireGuardNetworkExtension/DNSResolver.swift b/WireGuard/WireGuardNetworkExtension/DNSResolver.swift
index f7a8f5b..16b7909 100644
--- a/WireGuard/WireGuardNetworkExtension/DNSResolver.swift
+++ b/WireGuard/WireGuardNetworkExtension/DNSResolver.swift
@@ -107,6 +107,7 @@ class DNSResolver {
extension Endpoint {
func withReresolvedIP() -> Endpoint {
+ #if os(iOS)
var ret = self
let hostname: String
switch host {
@@ -148,5 +149,10 @@ extension Endpoint {
wg_log(.debug, message: "DNS64: mapped \(host) to itself.")
}
return ret
+ #elseif os(macOS)
+ return self
+ #else
+ #error("Unimplemented")
+ #endif
}
}
diff --git a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
index cfc3aed..7c84491 100644
--- a/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
+++ b/WireGuard/WireGuardNetworkExtension/PacketTunnelProvider.swift
@@ -30,6 +30,9 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
}
configureLogger()
+ #if os(macOS)
+ wgEnableRoaming(true)
+ #endif
wg_log(.info, message: "Starting tunnel from the " + (activationAttemptId == nil ? "OS directly, rather than the app" : "app"))
@@ -114,9 +117,13 @@ class PacketTunnelProvider: NEPacketTunnelProvider {
}
private func pathUpdate(path: Network.NWPath) {
- guard let handle = handle, let packetTunnelSettingsGenerator = packetTunnelSettingsGenerator else { return }
+ guard let handle = handle else { return }
wg_log(.debug, message: "Network change detected with \(path.status) route and interface order \(path.availableInterfaces)")
- _ = packetTunnelSettingsGenerator.endpointUapiConfiguration().withGoString { return wgSetConfig(handle, $0) }
+ #if os(iOS)
+ if let packetTunnelSettingsGenerator = packetTunnelSettingsGenerator {
+ _ = packetTunnelSettingsGenerator.endpointUapiConfiguration().withGoString { return wgSetConfig(handle, $0) }
+ }
+ #endif
var interfaces = path.availableInterfaces
if let ifname = ifname {
interfaces = interfaces.filter { $0.name != ifname }
diff --git a/wireguard-go-bridge/src/api-ios.go b/wireguard-go-bridge/src/api-ios.go
index 94a2cd0..ace83d9 100644
--- a/wireguard-go-bridge/src/api-ios.go
+++ b/wireguard-go-bridge/src/api-ios.go
@@ -68,6 +68,11 @@ func init() {
}()
}
+//export wgEnableRoaming
+func wgEnableRoaming(enabled bool) {
+ roamingDisabled = !enabled
+}
+
//export wgSetLogger
func wgSetLogger(loggerFn uintptr) {
loggerFunc = unsafe.Pointer(loggerFn)
diff --git a/wireguard-go-bridge/wireguard.h b/wireguard-go-bridge/wireguard.h
index 500f138..b264a2e 100644
--- a/wireguard-go-bridge/wireguard.h
+++ b/wireguard-go-bridge/wireguard.h
@@ -8,9 +8,11 @@
#include <sys/types.h>
#include <stdint.h>
+#include <stdbool.h>
typedef struct { const char *p; size_t n; } gostring_t;
typedef void(*logger_fn_t)(int level, const char *msg);
+extern void wgEnableRoaming(bool enabled);
extern void wgSetLogger(logger_fn_t logger_fn);
extern int wgTurnOn(gostring_t settings, int32_t tun_fd);
extern void wgTurnOff(int handle);