From 4365b4583fa32b1b77d33f5074da9c165a28f824 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 24 May 2018 18:00:45 +0200 Subject: [PATCH] Trick for being extra sensitive to route changes --- conn_linux.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/conn_linux.go b/conn_linux.go index bde4416..396c403 100644 --- a/conn_linux.go +++ b/conn_linux.go @@ -58,11 +58,12 @@ func (endpoint *NativeEndpoint) dst6() *unix.SockaddrInet6 { } type NativeBind struct { - sock4 int - sock6 int - netlinkSock int - netlinkCancel *rwcancel.RWCancel - lastMark uint32 + sock4 int + sock6 int + netlinkSock int + netlinkCancel *rwcancel.RWCancel + lastMark uint32 + clearSourceOnAllRouteChanges bool } var _ Endpoint = (*NativeEndpoint)(nil) @@ -582,6 +583,16 @@ 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