summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2020-07-27 10:19:05 -0700
committerBrad Fitzpatrick <bradfitz@tailscale.com>2020-07-27 10:19:17 -0700
commitfe68841dc7649162c43849beb2fcf9a2ad80ee7c (patch)
tree23ac7f4f14f2e51303d74ba04f5ad72c6bc0cfde
parent69f3ceeb7ccacdc1dfb6293869093b8d6d9669e2 (diff)
downloadtailscale-fe68841dc7649162c43849beb2fcf9a2ad80ee7c.tar.xz
tailscale-fe68841dc7649162c43849beb2fcf9a2ad80ee7c.zip
wgengine/magicsock: log better with less spam on transition to stopped state
Required a minor test update too, which now needs a private key to get far enough to test the thing being tested.
-rw-r--r--wgengine/magicsock/magicsock.go23
-rw-r--r--wgengine/magicsock/magicsock_test.go3
2 files changed, 20 insertions, 6 deletions
diff --git a/wgengine/magicsock/magicsock.go b/wgengine/magicsock/magicsock.go
index 248c3f5e1..929ac0069 100644
--- a/wgengine/magicsock/magicsock.go
+++ b/wgengine/magicsock/magicsock.go
@@ -1788,13 +1788,16 @@ func (c *Conn) SetPrivateKey(privateKey wgcfg.PrivateKey) error {
if oldKey.IsZero() {
c.logf("magicsock: SetPrivateKey called (init)")
go c.ReSTUN("set-private-key")
+ } else if newKey.IsZero() {
+ c.logf("magicsock: SetPrivateKey called (zeroed)")
+ c.closeAllDerpLocked("zero-private-key")
} else {
- c.logf("magicsock: SetPrivateKey called (changed")
+ c.logf("magicsock: SetPrivateKey called (changed)")
+ c.closeAllDerpLocked("new-private-key")
}
- c.closeAllDerpLocked("new-private-key")
// Key changed. Close existing DERP connections and reconnect to home.
- if c.myDerp != 0 {
+ if c.myDerp != 0 && !newKey.IsZero() {
c.logf("magicsock: private key changed, reconnecting to home derp-%d", c.myDerp)
c.goDerpConnect(c.myDerp)
}
@@ -1844,7 +1847,9 @@ func (c *Conn) SetDERPMap(dm *tailcfg.DERPMap) {
return
}
- go c.ReSTUN("derp-map-update")
+ if c.started {
+ go c.ReSTUN("derp-map-update")
+ }
}
func nodesEqual(x, y []*tailcfg.Node) bool {
@@ -2152,6 +2157,10 @@ func (c *Conn) ReSTUN(why string) {
// raced with a shutdown.
return
}
+ if c.privateKey.IsZero() {
+ c.logf("magicsock: ReSTUN(%q) ignored; no private key", why)
+ return
+ }
if c.endpointsUpdateActive {
if c.wantEndpointsUpdate != why {
@@ -2242,8 +2251,12 @@ func (c *Conn) Rebind() {
c.mu.Lock()
c.closeAllDerpLocked("rebind")
+ haveKey := !c.privateKey.IsZero()
c.mu.Unlock()
- c.goDerpConnect(c.myDerp)
+
+ if haveKey {
+ c.goDerpConnect(c.myDerp)
+ }
c.resetAddrSetStates()
}
diff --git a/wgengine/magicsock/magicsock_test.go b/wgengine/magicsock/magicsock_test.go
index 306ce755a..82945d978 100644
--- a/wgengine/magicsock/magicsock_test.go
+++ b/wgengine/magicsock/magicsock_test.go
@@ -215,8 +215,9 @@ func TestNewConn(t *testing.T) {
t.Fatal(err)
}
defer conn.Close()
- conn.Start()
conn.SetDERPMap(stuntest.DERPMapOf(stunAddr.String()))
+ conn.SetPrivateKey(wgcfg.PrivateKey(key.NewPrivate()))
+ conn.Start()
go func() {
var pkt [64 << 10]byte