aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--device/mobilequirks.go16
-rw-r--r--device/peer.go4
2 files changed, 18 insertions, 2 deletions
diff --git a/device/mobilequirks.go b/device/mobilequirks.go
new file mode 100644
index 0000000..fc0b386
--- /dev/null
+++ b/device/mobilequirks.go
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2020 WireGuard LLC. All Rights Reserved.
+ */
+
+package device
+
+func (device *Device) DisableSomeRoamingForBrokenMobileSemantics() {
+ device.peers.RLock()
+ for _, peer := range device.peers.keyMap {
+ peer.Lock()
+ defer peer.Unlock()
+ peer.disableRoaming = peer.endpoint != nil
+ }
+ device.peers.RUnlock()
+} \ No newline at end of file
diff --git a/device/peer.go b/device/peer.go
index d13acd9..8cb0dc2 100644
--- a/device/peer.go
+++ b/device/peer.go
@@ -28,6 +28,7 @@ type Peer struct {
device *Device
endpoint conn.Endpoint
persistentKeepaliveInterval uint16
+ disableRoaming bool
// These fields are accessed with atomic operations, which must be
// 64-bit aligned even on 32-bit platforms. Go guarantees that an
@@ -290,10 +291,9 @@ func (peer *Peer) Stop() {
peer.ZeroAndFlushAll()
}
-var RoamingDisabled bool
func (peer *Peer) SetEndpointFromPacket(endpoint conn.Endpoint) {
- if RoamingDisabled {
+ if peer.disableRoaming {
return
}
peer.Lock()