]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
Disappointing anti-sticky experiment
authorJason A. Donenfeld <Jason@zx2c4.com>
Sat, 26 May 2018 00:59:26 +0000 (02:59 +0200)
committerJason A. Donenfeld <Jason@zx2c4.com>
Sun, 27 May 2018 20:55:15 +0000 (22:55 +0200)
conn_default.go
conn_linux.go
peer.go
receive.go

index bd1b08b0da05ce7e590616a07cb043f78400d7e6..14ed56cbda28e6b968714131a47964d195a5374b 100644 (file)
@@ -1,4 +1,4 @@
-// +build !linux
+// +build !linux android
 
 /* SPDX-License-Identifier: GPL-2.0
  *
index 396c4031089964f97c5d3d5dc174fac8e6cb0aa1..0227f044b3395a50ab77ee4a7a82029a9499c410 100644 (file)
@@ -1,3 +1,5 @@
+// +build !android
+
 /* SPDX-License-Identifier: GPL-2.0
  *
  * Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
@@ -58,12 +60,11 @@ func (endpoint *NativeEndpoint) dst6() *unix.SockaddrInet6 {
 }
 
 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)
@@ -583,16 +584,6 @@ func (bind *NativeBind) routineRouteListener(device *Device) {
 
                        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
diff --git a/peer.go b/peer.go
index a279d965b5f2abe49d3e72454c61acdeddea3749..228dc5ec376f66bca435b0817824658b9994f404 100644 (file)
--- a/peer.go
+++ b/peer.go
@@ -258,3 +258,14 @@ func (peer *Peer) Stop() {
 
        peer.ZeroAndFlushAll()
 }
+
+var roamingDisabled bool
+
+func (peer *Peer) SetEndpointFromPacket(endpoint Endpoint) {
+       if roamingDisabled {
+               return
+       }
+       peer.mutex.Lock()
+       peer.endpoint = endpoint
+       peer.mutex.Unlock()
+}
index 30a63d06a4bc653772cae0d0e95e2d2988c95587..86d1e69c09892fa636d8d7c125e95d66bc9de041 100644 (file)
@@ -440,10 +440,7 @@ func (device *Device) RoutineHandshake() {
                        peer.timersAnyAuthenticatedPacketReceived()
 
                        // update endpoint
-
-                       peer.mutex.Lock()
-                       peer.endpoint = elem.endpoint
-                       peer.mutex.Unlock()
+                       peer.SetEndpointFromPacket(elem.endpoint)
 
                        logDebug.Println(peer, "- Received handshake initiation")
 
@@ -473,10 +470,7 @@ func (device *Device) RoutineHandshake() {
                        }
 
                        // update endpoint
-
-                       peer.mutex.Lock()
-                       peer.endpoint = elem.endpoint
-                       peer.mutex.Unlock()
+                       peer.SetEndpointFromPacket(elem.endpoint)
 
                        logDebug.Println(peer, "- Received handshake response")
 
@@ -549,10 +543,7 @@ func (peer *Peer) RoutineSequentialReceiver() {
                        }
 
                        // 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) {