summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2021-05-13 14:31:12 -0700
committerBrad Fitzpatrick <bradfitz@tailscale.com>2021-05-13 14:31:12 -0700
commit963d585156fcbc58290fe5629bc5f508cb4259f2 (patch)
tree30fd5665f4629c88ef0de40bfd15040aa6929960
parentebcd7ab89042fb660a96a75a360ce17140084435 (diff)
downloadtailscale-bradfitz/demo_pinger.tar.xz
tailscale-bradfitz/demo_pinger.zip
XXX: plumb a Pinger down to controlclientbradfitz/demo_pinger
-rw-r--r--control/controlclient/direct.go10
-rw-r--r--ipn/ipnlocal/local.go1
2 files changed, 11 insertions, 0 deletions
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 @@ import (
"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.