Documentation
¶
Overview ¶
Package tsd (short for "Tailscale Daemon") contains a System type that containing all the subsystems a Tailscale node (tailscaled or platform equivalent) uses.
The goal of this package (as of 2023-05-03) is to eventually unify initialization across tailscaled, tailscaled as a Windows services, the mac GUI, tsnet, wasm, tests, and other places that wire up all the subsystems. And doing so without weird optional interface accessors on some subsystems that return other subsystems. It's all a work in progress.
This package depends on nearly all parts of Tailscale, so it should not be imported by (or thus passed to) any package that does not want to depend on the world. In practice this means that only things like cmd/tailscaled, ipn/ipnlocal, and ipn/ipnserver should import this package.
Index ¶
- type LocalBackend
- type NetstackImpl
- type SubSystem
- type System
- func (s *System) ControlKnobs() *controlknobs.Knobs
- func (s *System) IsNetstack() bool
- func (s *System) IsNetstackRouter() bool
- func (s *System) PolicyClientOrDefault() policyclient.Client
- func (s *System) ProxyMapper() *proxymap.Mapper
- func (s *System) Set(v any)
- func (s *System) UserMetricsRegistry() *usermetric.Registry
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type LocalBackend ¶ added in v1.90.0
type LocalBackend = any
LocalBackend is a fake name for *ipnlocal.LocalBackend to avoid an import cycle.
type NetstackImpl ¶ added in v1.50.0
type NetstackImpl interface {
Start(LocalBackend) error
UpdateNetstackIPs(*netmap.NetworkMap)
}
NetstackImpl is the interface that *netstack.Impl implements. It's an interface for circular dependency reasons: netstack.Impl references LocalBackend, and LocalBackend has a tsd.System.
type SubSystem ¶
type SubSystem[T any] struct { // contains filtered or unexported fields }
SubSystem represents some subsystem of the Tailscale node daemon.
A subsystem can be set to a value, and then later retrieved. A subsystem value tracks whether it's been set and, once set, doesn't allow the value to change.
func (*SubSystem[T]) Get ¶
func (p *SubSystem[T]) Get() T
Get returns the value of p, panicking if it hasn't been set.
type System ¶
type System struct {
Bus SubSystem[*eventbus.Bus]
Dialer SubSystem[*tsdial.Dialer]
DNSManager SubSystem[*dns.Manager] // can get its *resolver.Resolver from DNSManager.Resolver
Engine SubSystem[wgengine.Engine]
NetMon SubSystem[*netmon.Monitor]
MagicSock SubSystem[*magicsock.Conn]
NetstackRouter SubSystem[bool] // using Netstack at all (either entirely or at least for subnets)
Router SubSystem[router.Router]
Tun SubSystem[*tstun.Wrapper]
StateStore SubSystem[ipn.StateStore]
Netstack SubSystem[NetstackImpl] // actually a *netstack.Impl
DriveForLocal SubSystem[drive.FileSystemForLocal]
DriveForRemote SubSystem[drive.FileSystemForRemote]
PolicyClient SubSystem[policyclient.Client]
HealthTracker SubSystem[*health.Tracker]
// InitialConfig is initial server config, if any.
// It is nil if the node is not in declarative mode.
// This value is never updated after startup.
// LocalBackend tracks the current config after any reloads.
InitialConfig *conffile.Config
// contains filtered or unexported fields
}
System contains all the subsystems of a Tailscale node (tailscaled, etc.)
A valid System value must always have a non-nil Bus populated. Callers must ensure this before using the value further. Call NewSystem to obtain a value ready to use.
func NewSystem ¶ added in v1.84.0
func NewSystem() *System
NewSystem constructs a new otherwise-empty System with a freshly-constructed event bus populated.
func NewSystemWithBus ¶ added in v1.90.0
NewSystemWithBus constructs a new otherwise-empty System with an eventbus provided by the caller. The provided bus must not be nil. This is mainly intended for testing; for production use call [NewBus].
func (*System) ControlKnobs ¶ added in v1.50.0
func (s *System) ControlKnobs() *controlknobs.Knobs
ControlKnobs returns the control knobs for this node.
func (*System) IsNetstack ¶
IsNetstack reports whether Tailscale is running as a netstack-based TUN-free engine.
func (*System) IsNetstackRouter ¶
IsNetstackRouter reports whether Tailscale is either fully netstack based (without TUN) or is at least using netstack for routing.
func (*System) PolicyClientOrDefault ¶ added in v1.88.0
func (s *System) PolicyClientOrDefault() policyclient.Client
PolicyClientOrDefault returns the policy client if set or a no-op default otherwise. It always returns a non-nil value.
func (*System) ProxyMapper ¶ added in v1.50.0
ProxyMapper returns the ephemeral ip:port mapper.
func (*System) Set ¶
Set is a convenience method to set a subsystem value. It panics if the type is unknown or has that type has already been set.
func (*System) UserMetricsRegistry ¶ added in v1.76.0
func (s *System) UserMetricsRegistry() *usermetric.Registry
UserMetricsRegistry returns the system usermetrics.