Trick for being extra sensitive to route changes

This commit is contained in:
Jason A. Donenfeld 2018-05-24 18:00:45 +02:00
parent bbf320c477
commit 4365b4583f
1 changed files with 16 additions and 5 deletions

View File

@ -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