aboutsummaryrefslogtreecommitdiff
path: root/conn_linux.go
diff options
context:
space:
mode:
Diffstat (limited to 'conn_linux.go')
-rw-r--r--conn_linux.go21
1 files 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