diff options
Diffstat (limited to 'control/controlknobs/controlknobs.go')
| -rw-r--r-- | control/controlknobs/controlknobs.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/control/controlknobs/controlknobs.go b/control/controlknobs/controlknobs.go new file mode 100644 index 000000000..884c0f8dd --- /dev/null +++ b/control/controlknobs/controlknobs.go @@ -0,0 +1,41 @@ +// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package controlknobs contains client options configurable from control which can be turned on +// or off. The ability to turn options on and off is for incrementally adding features in. +package controlknobs + +import ( + "os" + "strconv" + "sync/atomic" + + "tailscale.com/types/opt" +) + +// disableUPnP indicates whether to attempt UPnP mapping. +var disableUPnP atomic.Value + +func init() { + v, _ := strconv.ParseBool(os.Getenv("TS_DISABLE_UPNP")) + var toStore opt.Bool + toStore.Set(v) + disableUPnP.Store(toStore) +} + +// DisableUPnP reports the last reported value from control +// whether UPnP portmapping should be disabled. +func DisableUPnP() opt.Bool { + v, _ := disableUPnP.Load().(opt.Bool) + return v +} + +// SetDisableUPnP will set whether UPnP connections are permitted or not, +// intended to be set from control. +func SetDisableUPnP(v opt.Bool) { + old, ok := disableUPnP.Load().(opt.Bool) + if !ok || old != v { + disableUPnP.Store(v) + } +} |
