Skip to content

Commit a201b89

Browse files
committed
wgengine/magicsock: reconnect to DERP when its definition changes
Change-Id: I7c560feb9e4a6e155a35ec764a68354f19f694e4 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
1 parent 506c727 commit a201b89

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

wgengine/magicsock/magicsock.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2252,12 +2252,31 @@ func (c *Conn) SetDERPMap(dm *tailcfg.DERPMap) {
22522252
return
22532253
}
22542254

2255+
old := c.derpMap
22552256
c.derpMap = dm
22562257
if dm == nil {
22572258
c.closeAllDerpLocked("derp-disabled")
22582259
return
22592260
}
22602261

2262+
// Reconnect any DERP region that changed definitions.
2263+
if old != nil {
2264+
changes := false
2265+
for rid, oldDef := range old.Regions {
2266+
if reflect.DeepEqual(oldDef, dm.Regions[rid]) {
2267+
continue
2268+
}
2269+
changes = true
2270+
if rid == c.myDerp {
2271+
c.myDerp = 0
2272+
}
2273+
c.closeDerpLocked(rid, "derp-region-redefined")
2274+
}
2275+
if changes {
2276+
c.logActiveDerpLocked()
2277+
}
2278+
}
2279+
22612280
go c.ReSTUN("derp-map-update")
22622281
}
22632282

0 commit comments

Comments
 (0)