From: Jason A. Donenfeld Date: Wed, 7 Oct 2020 08:17:48 +0000 (+0200) Subject: device: remove global for roaming escape hatch X-Git-Tag: 0.0.20201118~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8fe925020de61b30eec2bc016fb7f45df78dc6c;p=thirdparty%2Fwireguard-go.git device: remove global for roaming escape hatch Signed-off-by: Jason A. Donenfeld --- 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()