wgengine/magicsock: reconnect to DERP home after network comes back up
Updates
@@ -963,6 +963,13 @@ func (c *Conn) setNearestDERP(derpNum int) (wantDERP bool) {
return true
}
+// startDerpHomeConnectLocked starts connecting to our DERP home, if any.
+//
+// c.mu must be held.
+func (c *Conn) startDerpHomeConnectLocked() {
+ c.goDerpConnect(c.myDerp)
+}
+
// goDerpConnect starts a goroutine to start connecting to the given
// DERP node.
//
@@ -2125,7 +2132,9 @@ func (c *Conn) SetNetworkUp(up bool) {
c.logf("magicsock: SetNetworkUp(%v)", up)
c.networkUp.Set(up)
- if !up {
+ if up {
+ c.startDerpHomeConnectLocked()
+ } else {
c.closeAllDerpLocked("network-down")
}
}
@@ -2167,7 +2176,7 @@ func (c *Conn) SetPrivateKey(privateKey wgkey.Private) error {
// Key changed. Close existing DERP connections and reconnect to home.
if c.myDerp != 0 && !newKey.IsZero() {
c.logf("magicsock: private key changed, reconnecting to home derp-%d", c.myDerp)
- c.goDerpConnect(c.myDerp)
+ c.startDerpHomeConnectLocked()
}
if newKey.IsZero() {
@@ -2630,12 +2639,11 @@ func (c *Conn) Rebind() {
c.mu.Lock()
c.closeAllDerpLocked("rebind")
- haveKey := !c.privateKey.IsZero()
+ if !c.privateKey.IsZero() {
+ c.startDerpHomeConnectLocked()
+ }
c.mu.Unlock()
- if haveKey {
- c.goDerpConnect(c.myDerp)
- }
c.resetEndpointStates()
}
