-// +build !linux
+// +build !linux android
/* SPDX-License-Identifier: GPL-2.0
*
+// +build !android
+
/* SPDX-License-Identifier: GPL-2.0
*
* Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
}
type NativeBind struct {
- sock4 int
- sock6 int
- netlinkSock int
- netlinkCancel *rwcancel.RWCancel
- lastMark uint32
- clearSourceOnAllRouteChanges bool
+ sock4 int
+ sock6 int
+ netlinkSock int
+ netlinkCancel *rwcancel.RWCancel
+ lastMark uint32
}
var _ Endpoint = (*NativeEndpoint)(nil)
switch hdr.Type {
case unix.RTM_NEWROUTE, unix.RTM_DELROUTE:
- if bind.clearSourceOnAllRouteChanges {
- for _, peer := range device.peers.keyMap {
- peer.mutex.Lock()
- if peer.endpoint != nil && peer.endpoint.(*NativeEndpoint) != nil {
- peer.endpoint.(*NativeEndpoint).ClearSrc()
- }
- peer.mutex.Unlock()
- }
- break
- }
if hdr.Seq <= MaxPeers && hdr.Seq > 0 {
if uint(len(remain)) < uint(hdr.Len) {
break
peer.ZeroAndFlushAll()
}
+
+var roamingDisabled bool
+
+func (peer *Peer) SetEndpointFromPacket(endpoint Endpoint) {
+ if roamingDisabled {
+ return
+ }
+ peer.mutex.Lock()
+ peer.endpoint = endpoint
+ peer.mutex.Unlock()
+}
peer.timersAnyAuthenticatedPacketReceived()
// update endpoint
-
- peer.mutex.Lock()
- peer.endpoint = elem.endpoint
- peer.mutex.Unlock()
+ peer.SetEndpointFromPacket(elem.endpoint)
logDebug.Println(peer, "- Received handshake initiation")
}
// update endpoint
-
- peer.mutex.Lock()
- peer.endpoint = elem.endpoint
- peer.mutex.Unlock()
+ peer.SetEndpointFromPacket(elem.endpoint)
logDebug.Println(peer, "- Received handshake response")
}
// update endpoint
-
- peer.mutex.Lock()
- peer.endpoint = elem.endpoint
- peer.mutex.Unlock()
+ peer.SetEndpointFromPacket(elem.endpoint)
// check if using new keypair
if peer.ReceivedWithKeypair(elem.keypair) {