device: remove global for roaming escape hatch

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Jason A. Donenfeld 2020-10-07 10:17:48 +02:00
parent 0cfa3314ee
commit c8fe925020
2 changed files with 18 additions and 2 deletions

16
device/mobilequirks.go Normal file
View file

@ -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()
}

View file

@ -28,6 +28,7 @@ type Peer struct {
device *Device device *Device
endpoint conn.Endpoint endpoint conn.Endpoint
persistentKeepaliveInterval uint16 persistentKeepaliveInterval uint16
disableRoaming bool
// These fields are accessed with atomic operations, which must be // These fields are accessed with atomic operations, which must be
// 64-bit aligned even on 32-bit platforms. Go guarantees that an // 64-bit aligned even on 32-bit platforms. Go guarantees that an
@ -290,10 +291,9 @@ func (peer *Peer) Stop() {
peer.ZeroAndFlushAll() peer.ZeroAndFlushAll()
} }
var RoamingDisabled bool
func (peer *Peer) SetEndpointFromPacket(endpoint conn.Endpoint) { func (peer *Peer) SetEndpointFromPacket(endpoint conn.Endpoint) {
if RoamingDisabled { if peer.disableRoaming {
return return
} }
peer.Lock() peer.Lock()