summaryrefslogtreecommitdiffhomepage
path: root/cmd
diff options
context:
space:
mode:
authorMihai Parparita <mihai@tailscale.com>2023-04-17 16:01:41 -0700
committerMihai Parparita <mihai.parparita@gmail.com>2023-04-20 15:46:01 -0700
commit7330aa593e3701cb193ceff0bc26eda3bc62df83 (patch)
treed76ab14868a92aa799dbb2119502b7ee267f06dd /cmd
parent7f17e04a5a7952f9c1ed0e23b799a21a124a5a51 (diff)
downloadtailscale-7330aa593e3701cb193ceff0bc26eda3bc62df83.tar.xz
tailscale-7330aa593e3701cb193ceff0bc26eda3bc62df83.zip
all: avoid repeated default interface lookups
On some platforms (notably macOS and iOS) we look up the default interface to bind outgoing connections to. This is both duplicated work and results in logspam when the default interface is not available (i.e. when a phone has no connectivity, we log an error and thus cause more things that we will try to upload and fail). Fixed by passing around a netmon.Monitor to more places, so that we can use its cached interface state. Fixes #7850 Updates #7621 Signed-off-by: Mihai Parparita <mihai@tailscale.com>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/derper/depaware.txt2
-rw-r--r--cmd/tailscale/cli/netcheck.go8
-rw-r--r--cmd/tailscale/depaware.txt2
-rw-r--r--cmd/tailscaled/debug.go4
-rw-r--r--cmd/tailscaled/tailscaled.go25
-rw-r--r--cmd/tailscaled/tailscaled_windows.go8
-rw-r--r--cmd/tsconnect/wasm/wasm_js.go2
7 files changed, 33 insertions, 18 deletions
diff --git a/cmd/derper/depaware.txt b/cmd/derper/depaware.txt
index 7e82305d1..b40ca360a 100644
--- a/cmd/derper/depaware.txt
+++ b/cmd/derper/depaware.txt
@@ -86,7 +86,7 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa
💣 tailscale.com/net/interfaces from tailscale.com/net/netns+
tailscale.com/net/netaddr from tailscale.com/ipn+
tailscale.com/net/netknob from tailscale.com/net/netns
- tailscale.com/net/netmon from tailscale.com/net/sockstats
+ tailscale.com/net/netmon from tailscale.com/net/sockstats+
tailscale.com/net/netns from tailscale.com/derp/derphttp
tailscale.com/net/netutil from tailscale.com/client/tailscale
tailscale.com/net/packet from tailscale.com/wgengine/filter
diff --git a/cmd/tailscale/cli/netcheck.go b/cmd/tailscale/cli/netcheck.go
index 0c2f7acd1..bac5a0a48 100644
--- a/cmd/tailscale/cli/netcheck.go
+++ b/cmd/tailscale/cli/netcheck.go
@@ -19,6 +19,7 @@ import (
"tailscale.com/envknob"
"tailscale.com/ipn"
"tailscale.com/net/netcheck"
+ "tailscale.com/net/netmon"
"tailscale.com/net/portmapper"
"tailscale.com/tailcfg"
"tailscale.com/types/logger"
@@ -45,9 +46,14 @@ var netcheckArgs struct {
}
func runNetcheck(ctx context.Context, args []string) error {
+ logf := logger.WithPrefix(log.Printf, "portmap: ")
+ netMon, err := netmon.New(logf)
+ if err != nil {
+ return err
+ }
c := &netcheck.Client{
UDPBindAddr: envknob.String("TS_DEBUG_NETCHECK_UDP_BIND"),
- PortMapper: portmapper.NewClient(logger.WithPrefix(log.Printf, "portmap: "), nil, nil),
+ PortMapper: portmapper.NewClient(logf, netMon, nil, nil),
UseDNSCache: false, // always resolve, don't cache
}
if netcheckArgs.verbose {
diff --git a/cmd/tailscale/depaware.txt b/cmd/tailscale/depaware.txt
index b146ec567..5b644992e 100644
--- a/cmd/tailscale/depaware.txt
+++ b/cmd/tailscale/depaware.txt
@@ -74,7 +74,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
tailscale.com/net/netcheck from tailscale.com/cmd/tailscale/cli
tailscale.com/net/neterror from tailscale.com/net/netcheck+
tailscale.com/net/netknob from tailscale.com/net/netns
- tailscale.com/net/netmon from tailscale.com/net/sockstats
+ tailscale.com/net/netmon from tailscale.com/net/sockstats+
tailscale.com/net/netns from tailscale.com/derp/derphttp+
tailscale.com/net/netutil from tailscale.com/client/tailscale+
tailscale.com/net/packet from tailscale.com/wgengine/filter+
diff --git a/cmd/tailscaled/debug.go b/cmd/tailscaled/debug.go
index 8c1ad88b1..b6a95ba49 100644
--- a/cmd/tailscaled/debug.go
+++ b/cmd/tailscaled/debug.go
@@ -193,8 +193,8 @@ func checkDerp(ctx context.Context, derpRegion string) (err error) {
priv1 := key.NewNode()
priv2 := key.NewNode()
- c1 := derphttp.NewRegionClient(priv1, log.Printf, getRegion)
- c2 := derphttp.NewRegionClient(priv2, log.Printf, getRegion)
+ c1 := derphttp.NewRegionClient(priv1, log.Printf, nil, getRegion)
+ c2 := derphttp.NewRegionClient(priv2, log.Printf, nil, getRegion)
defer func() {
if err != nil {
c1.Close()
diff --git a/cmd/tailscaled/tailscaled.go b/cmd/tailscaled/tailscaled.go
index 3bae560a2..d2c28de99 100644
--- a/cmd/tailscaled/tailscaled.go
+++ b/cmd/tailscaled/tailscaled.go
@@ -329,7 +329,15 @@ var logPol *logpolicy.Policy
var debugMux *http.ServeMux
func run() error {
- pol := logpolicy.New(logtail.CollectionNode)
+ var logf logger.Logf = log.Printf
+ netMon, err := netmon.New(func(format string, args ...any) {
+ logf(format, args...)
+ })
+ if err != nil {
+ return fmt.Errorf("netmon.New: %w", err)
+ }
+
+ pol := logpolicy.New(logtail.CollectionNode, netMon)
pol.SetVerbosityLevel(args.verbose)
logPol = pol
defer func() {
@@ -353,7 +361,6 @@ func run() error {
return nil
}
- var logf logger.Logf = log.Printf
if envknob.Bool("TS_DEBUG_MEMORY") {
logf = logger.RusagePrefixLog(logf)
}
@@ -379,10 +386,10 @@ func run() error {
debugMux = newDebugMux()
}
- return startIPNServer(context.Background(), logf, pol.PublicID)
+ return startIPNServer(context.Background(), logf, pol.PublicID, netMon)
}
-func startIPNServer(ctx context.Context, logf logger.Logf, logID logid.PublicID) error {
+func startIPNServer(ctx context.Context, logf logger.Logf, logID logid.PublicID, netMon *netmon.Monitor) error {
ln, err := safesocket.Listen(args.socketpath)
if err != nil {
return fmt.Errorf("safesocket.Listen: %v", err)
@@ -408,7 +415,7 @@ func startIPNServer(ctx context.Context, logf logger.Logf, logID logid.PublicID)
}
}()
- srv := ipnserver.New(logf, logID)
+ srv := ipnserver.New(logf, logID, netMon)
if debugMux != nil {
debugMux.HandleFunc("/debug/ipn", srv.ServeHTMLStatus)
}
@@ -426,7 +433,7 @@ func startIPNServer(ctx context.Context, logf logger.Logf, logID logid.PublicID)
return
}
}
- lb, err := getLocalBackend(ctx, logf, logID)
+ lb, err := getLocalBackend(ctx, logf, logID, netMon)
if err == nil {
logf("got LocalBackend in %v", time.Since(t0).Round(time.Millisecond))
srv.SetLocalBackend(lb)
@@ -450,11 +457,7 @@ func startIPNServer(ctx context.Context, logf logger.Logf, logID logid.PublicID)
return nil
}
-func getLocalBackend(ctx context.Context, logf logger.Logf, logID logid.PublicID) (_ *ipnlocal.LocalBackend, retErr error) {
- netMon, err := netmon.New(logf)
- if err != nil {
- return nil, fmt.Errorf("netmon.New: %w", err)
- }
+func getLocalBackend(ctx context.Context, logf logger.Logf, logID logid.PublicID, netMon *netmon.Monitor) (_ *ipnlocal.LocalBackend, retErr error) {
if logPol != nil {
logPol.Logtail.SetNetMon(netMon)
}
diff --git a/cmd/tailscaled/tailscaled_windows.go b/cmd/tailscaled/tailscaled_windows.go
index a654dadf4..077d3f99f 100644
--- a/cmd/tailscaled/tailscaled_windows.go
+++ b/cmd/tailscaled/tailscaled_windows.go
@@ -45,6 +45,7 @@ import (
"tailscale.com/logpolicy"
"tailscale.com/logtail/backoff"
"tailscale.com/net/dns"
+ "tailscale.com/net/netmon"
"tailscale.com/net/tstun"
"tailscale.com/types/logger"
"tailscale.com/types/logid"
@@ -291,8 +292,13 @@ func beWindowsSubprocess() bool {
}
}()
+ netMon, err := netmon.New(log.Printf)
+ if err != nil {
+ log.Printf("Could not create netMon: %v", err)
+ netMon = nil
+ }
publicLogID, _ := logid.ParsePublicID(logID)
- err := startIPNServer(ctx, log.Printf, publicLogID)
+ err = startIPNServer(ctx, log.Printf, publicLogID, netMon)
if err != nil {
log.Fatalf("ipnserver: %v", err)
}
diff --git a/cmd/tsconnect/wasm/wasm_js.go b/cmd/tsconnect/wasm/wasm_js.go
index f94b850a2..a1b0fd95e 100644
--- a/cmd/tsconnect/wasm/wasm_js.go
+++ b/cmd/tsconnect/wasm/wasm_js.go
@@ -123,7 +123,7 @@ func newIPN(jsConfig js.Value) map[string]any {
}
logid := lpc.PublicID
- srv := ipnserver.New(logf, logid)
+ srv := ipnserver.New(logf, logid, nil /* no netMon */)
lb, err := ipnlocal.NewLocalBackend(logf, logid, store, dialer, eng, controlclient.LoginEphemeral)
if err != nil {
log.Fatalf("ipnlocal.NewLocalBackend: %v", err)