aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2020-10-07 10:17:48 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2020-10-14 10:45:31 +0200
commitc8fe925020de61b30eec2bc016fb7f45df78dc6c (patch)
treec39ee4bc7b787de92aa4288a8ba49ddeb4e40578
parentreplay: divide by bits-per-byte (diff)
downloadwireguard-go-c8fe925020de61b30eec2bc016fb7f45df78dc6c.tar.xz
wireguard-go-c8fe925020de61b30eec2bc016fb7f45df78dc6c.zip
device: remove global for roaming escape hatch
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-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()