1
0
mirror of https://git.zx2c4.com/wireguard-go synced 2024-11-15 01:05:15 +01:00

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

View File

@ -58,11 +58,12 @@ func (endpoint *NativeEndpoint) dst6() *unix.SockaddrInet6 {
} }
type NativeBind struct { type NativeBind struct {
sock4 int sock4 int
sock6 int sock6 int
netlinkSock int netlinkSock int
netlinkCancel *rwcancel.RWCancel netlinkCancel *rwcancel.RWCancel
lastMark uint32 lastMark uint32
clearSourceOnAllRouteChanges bool
} }
var _ Endpoint = (*NativeEndpoint)(nil) var _ Endpoint = (*NativeEndpoint)(nil)
@ -582,6 +583,16 @@ func (bind *NativeBind) routineRouteListener(device *Device) {
switch hdr.Type { switch hdr.Type {
case unix.RTM_NEWROUTE, unix.RTM_DELROUTE: 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 hdr.Seq <= MaxPeers && hdr.Seq > 0 {
if uint(len(remain)) < uint(hdr.Len) { if uint(len(remain)) < uint(hdr.Len) {
break break