From 963d585156fcbc58290fe5629bc5f508cb4259f2 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Thu, 13 May 2021 14:31:12 -0700 Subject: [PATCH] XXX: plumb a Pinger down to controlclient --- control/controlclient/direct.go | 10 ++++++++++ ipn/ipnlocal/local.go | 1 + 2 files changed, 11 insertions(+) diff --git a/control/controlclient/direct.go b/control/controlclient/direct.go index 5e522ed93..3e0f7d788 100644 --- a/control/controlclient/direct.go +++ b/control/controlclient/direct.go @@ -32,6 +32,7 @@ "golang.org/x/crypto/nacl/box" "inet.af/netaddr" "tailscale.com/health" + "tailscale.com/ipn/ipnstate" "tailscale.com/log/logheap" "tailscale.com/net/dnscache" "tailscale.com/net/dnsfallback" @@ -66,6 +67,7 @@ type Direct struct { debugFlags []string keepSharerAndUserSplit bool skipIPForwardingCheck bool + pinger Pinger mu sync.Mutex // mutex guards the following fields serverKey wgkey.Key @@ -80,6 +82,12 @@ type Direct struct { localPort uint16 // or zero to mean auto } +type Pinger interface { + // Ping is a request to start a discovery ping with the peer handling + // the given IP and then call cb with its ping latency & method. + Ping(ip netaddr.IP, useTSMP bool, cb func(*ipnstate.PingResult)) +} + type Options struct { Persist persist.Persist // initial persistent data GetMachinePrivateKey func() (wgkey.Private, error) // returns the machine key to use @@ -94,6 +102,7 @@ type Options struct { HTTPTestClient *http.Client // optional HTTP client to use (for tests only) DebugFlags []string // debug settings to send to control LinkMonitor *monitor.Mon // optional link monitor + Pinger Pinger // KeepSharerAndUserSplit controls whether the client // understands Node.Sharer. If false, the Sharer is mapped to the User. @@ -165,6 +174,7 @@ func NewDirect(opts Options) (*Direct, error) { keepSharerAndUserSplit: opts.KeepSharerAndUserSplit, linkMon: opts.LinkMonitor, skipIPForwardingCheck: opts.SkipIPForwardingCheck, + pinger: opts.Pinger, } if opts.Hostinfo == nil { c.SetHostinfo(NewHostinfo()) diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 00065623a..fdd6d1ed8 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -808,6 +808,7 @@ func (b *LocalBackend) Start(opts ipn.Options) error { DiscoPublicKey: discoPublic, DebugFlags: debugFlags, LinkMonitor: b.e.GetLinkMonitor(), + Pinger: b.e, // Don't warn about broken Linux IP forwading when // netstack is being used.