diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index aab2b792e..cbae9c843 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -8609,7 +8609,7 @@ var ErrNoPreferredDERP = errors.New("no preferred DERP, try again later") // suggestExitNodeLocked computes a suggestion based on the current netmap and // other optional factors. If there are multiple equally good options, one may // be selected at random, so the result is not stable. To be eligible for -// consideration, the peer must have NodeAttrSuggestExitNode in its CapMap. +// consideration, the peer must have [tailcfg.NodeAttrSuggestExitNode] in its CapMap. // // b.mu must be held. func (b *LocalBackend) suggestExitNodeLocked() (response apitype.ExitNodeSuggestionResponse, err error) { @@ -8641,6 +8641,10 @@ func (b *LocalBackend) suggestExitNodeLocked() (response apitype.ExitNodeSuggest return res, err } +// SuggestExitNode computes an exit-node suggestion based on the current netmap and +// other optional factors. If there are multiple equally good options, one may +// be selected at random, so the result is not stable. To be eligible for +// consideration, the peer must have [tailcfg.NodeAttrSuggestExitNode] in its CapMap. func (b *LocalBackend) SuggestExitNode() (response apitype.ExitNodeSuggestionResponse, err error) { if !buildfeatures.HasUseExitNode { return response, feature.ErrUnavailable diff --git a/net/routecheck/probe.go b/net/routecheck/probe.go index 5222e10a7..16e425848 100644 --- a/net/routecheck/probe.go +++ b/net/routecheck/probe.go @@ -137,8 +137,13 @@ func (c *Client) probe(ctx context.Context, nodes iter.Seq[probed], limit int, t metricPingError.Add(1) return nil default: - c.vlogf("ping %s (%s): result: %f ms (err: %v)", - n.addr, n.ID(), pong.LatencySeconds*1000, pong.Err) + if pong.Err != "" { + c.vlogf("ping %s (%s): result: %f ms (err: %v)", + n.addr, n.ID(), pong.LatencySeconds*1000, pong.Err) + } else { + c.vlogf("ping %s (%s): result: %f ms", + n.addr, n.ID(), pong.LatencySeconds*1000) + } metricPingReachable.Add(1) } diff --git a/net/routecheck/report.go b/net/routecheck/report.go index 44a1cd217..6f0d5e2c4 100644 --- a/net/routecheck/report.go +++ b/net/routecheck/report.go @@ -26,7 +26,7 @@ var ( ) // Report returns the latest reachability report. -// Returns nil if a report isn’t available, which happens during initialization. +// It returns nil if a report isn’t available, which happens during initialization. func (c *Client) Report() *Report { metricReport.Add(1) nm := c.nm.NetMapNoPeers() diff --git a/net/routecheck/routecheck.go b/net/routecheck/routecheck.go index 5c562c6c4..641c4c0fb 100644 --- a/net/routecheck/routecheck.go +++ b/net/routecheck/routecheck.go @@ -195,9 +195,9 @@ func (c *Client) Close() error { return nil } - ch := c.hasNetMap.Swap(nil) // clear before waking anything up - if ch != nil && *ch != nil { - close(*ch) + hasNetMap := c.hasNetMap.Swap(nil) // clear before waking anything up + if hasNetMap != nil && *hasNetMap != nil { + close(*hasNetMap) // wake waitForNetMap } return nil