tailcfg: add a DebugFlags field for experiments and debugging.

Also replaces the IPv6Overlay bool with use of DebugFlags, since
it's currently an experimental configuration.

Signed-off-by: David Anderson <danderson@tailscale.com>
pull/836/head
David Anderson 4 years ago committed by Dave Anderson
parent ac866054c7
commit 62d941dc26

@ -45,10 +45,6 @@ import (
"tailscale.com/version" "tailscale.com/version"
) )
var (
enableV6Overlay, _ = strconv.ParseBool(os.Getenv("TS_DEBUG_ENABLE_IPV6_OVERLAY"))
)
type Persist struct { type Persist struct {
_ structs.Incomparable _ structs.Incomparable
@ -111,6 +107,7 @@ type Direct struct {
logf logger.Logf logf logger.Logf
discoPubKey tailcfg.DiscoKey discoPubKey tailcfg.DiscoKey
machinePrivKey wgcfg.PrivateKey machinePrivKey wgcfg.PrivateKey
debugFlags []string
mu sync.Mutex // mutex guards the following fields mu sync.Mutex // mutex guards the following fields
serverKey wgcfg.Key serverKey wgcfg.Key
@ -137,6 +134,7 @@ type Options struct {
KeepAlive bool KeepAlive bool
Logf logger.Logf Logf logger.Logf
HTTPTestClient *http.Client // optional HTTP client to use (for tests only) HTTPTestClient *http.Client // optional HTTP client to use (for tests only)
DebugFlags []string // debug settings to send to control
} }
type Decompressor interface { type Decompressor interface {
@ -189,6 +187,7 @@ func NewDirect(opts Options) (*Direct, error) {
persist: opts.Persist, persist: opts.Persist,
authKey: opts.AuthKey, authKey: opts.AuthKey,
discoPubKey: opts.DiscoPublicKey, discoPubKey: opts.DiscoPublicKey,
debugFlags: opts.DebugFlags,
} }
if opts.Hostinfo == nil { if opts.Hostinfo == nil {
c.SetHostinfo(NewHostinfo()) c.SetHostinfo(NewHostinfo())
@ -531,16 +530,16 @@ func (c *Direct) PollNetMap(ctx context.Context, maxPolls int, cb func(*NetworkM
} }
request := tailcfg.MapRequest{ request := tailcfg.MapRequest{
Version: 4, Version: 4,
IncludeIPv6: true, IncludeIPv6: true,
IncludeIPv6Overlay: enableV6Overlay, DeltaPeers: true,
DeltaPeers: true, KeepAlive: c.keepAlive,
KeepAlive: c.keepAlive, NodeKey: tailcfg.NodeKey(persist.PrivateNodeKey.Public()),
NodeKey: tailcfg.NodeKey(persist.PrivateNodeKey.Public()), DiscoKey: c.discoPubKey,
DiscoKey: c.discoPubKey, Endpoints: ep,
Endpoints: ep, Stream: allowStream,
Stream: allowStream, Hostinfo: hostinfo,
Hostinfo: hostinfo, DebugFlags: c.debugFlags,
} }
if c.newDecompressor != nil { if c.newDecompressor != nil {
request.Compress = "zstd" request.Compress = "zstd"

@ -36,6 +36,10 @@ import (
"tailscale.com/wgengine/tsdns" "tailscale.com/wgengine/tsdns"
) )
var (
controlDebugFlags = strings.Split(os.Getenv("TS_DEBUG_CONTROL_FLAGS"), ",")
)
// LocalBackend is the glue between the major pieces of the Tailscale // LocalBackend is the glue between the major pieces of the Tailscale
// network software: the cloud control plane (via controlclient), the // network software: the cloud control plane (via controlclient), the
// network data plane (via wgengine), and the user-facing UIs and CLIs // network data plane (via wgengine), and the user-facing UIs and CLIs
@ -451,6 +455,7 @@ func (b *LocalBackend) Start(opts Options) error {
NewDecompressor: b.newDecompressor, NewDecompressor: b.newDecompressor,
HTTPTestClient: opts.HTTPTestClient, HTTPTestClient: opts.HTTPTestClient,
DiscoPublicKey: discoPublic, DiscoPublicKey: discoPublic,
DebugFlags: controlDebugFlags,
}) })
if err != nil { if err != nil {
return err return err

@ -486,6 +486,14 @@ type MapRequest struct {
// being omitted in the response. (For example, a client on // being omitted in the response. (For example, a client on
// start up using ReadOnly to get the DERP map.) // start up using ReadOnly to get the DERP map.)
OmitPeers bool `json:",omitempty"` OmitPeers bool `json:",omitempty"`
// DebugFlags is a list of strings specifying debugging and
// development features to enable in handling this map
// request. The values are deliberately unspecified, as they get
// added and removed all the time during development, and offer no
// compatibility promise. To roll out semantic changes, bump
// Version instead.
DebugFlags []string `json:",omitempty"`
} }
// PortRange represents a range of UDP or TCP port numbers. // PortRange represents a range of UDP or TCP port numbers.

Loading…
Cancel
Save