summaryrefslogtreecommitdiffhomepage
path: root/control/controlknobs/controlknobs.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2023-10-06 06:50:13 -0700
committerBrad Fitzpatrick <bradfitz@tailscale.com>2023-10-06 06:59:17 -0700
commita794630f60dcb6f0c13eb2820f201c2a12c952ef (patch)
tree01023fb3f2df5553e60d93c303c34a4917498729 /control/controlknobs/controlknobs.go
parentc761d102ea5c76bc955fdb2d0ac56c8096e86466 (diff)
downloadtailscale-bradfitz/sessionactivetimeout.tar.xz
tailscale-bradfitz/sessionactivetimeout.zip
wgengine/magicsock: add controlknob tunable for session timeout experimentsbradfitz/sessionactivetimeout
Updates #TODO Change-Id: Ifb7ee2b69545cbc457aa2bf4c4744f431edb36e2 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
Diffstat (limited to 'control/controlknobs/controlknobs.go')
-rw-r--r--control/controlknobs/controlknobs.go18
1 files changed, 18 insertions, 0 deletions
diff --git a/control/controlknobs/controlknobs.go b/control/controlknobs/controlknobs.go
index e64bc8011..7810c5333 100644
--- a/control/controlknobs/controlknobs.go
+++ b/control/controlknobs/controlknobs.go
@@ -7,7 +7,9 @@ package controlknobs
import (
"slices"
+ "strconv"
"sync/atomic"
+ "time"
"tailscale.com/syncs"
"tailscale.com/tailcfg"
@@ -52,6 +54,10 @@ type Knobs struct {
// DisableDNSForwarderTCPRetries is whether the DNS forwarder should
// skip retrying truncated queries over TCP.
DisableDNSForwarderTCPRetries atomic.Bool
+
+ // MagicsockSessionActiveTimeout is an alternate magicsock session timeout
+ // duration to use. If zero or unset, the default is used.
+ MagicsockSessionActiveTimeout syncs.AtomicValue[time.Duration]
}
// UpdateFromNodeAttributes updates k (if non-nil) based on the provided self
@@ -91,6 +97,17 @@ func (k *Knobs) UpdateFromNodeAttributes(selfNodeAttrs []tailcfg.NodeCapability,
k.DisableDeltaUpdates.Store(disableDeltaUpdates)
k.PeerMTUEnable.Store(peerMTUEnable)
k.DisableDNSForwarderTCPRetries.Store(dnsForwarderDisableTCPRetries)
+
+ var timeout time.Duration
+ if vv := capMap[tailcfg.NodeAttrMagicsockSessionTimeout]; len(vv) > 0 {
+ if v, _ := strconv.Unquote(string(vv[0])); v != "" {
+ timeout, _ = time.ParseDuration(v)
+ timeout = max(timeout, 0)
+ }
+ }
+ if was := k.MagicsockSessionActiveTimeout.Load(); was != timeout {
+ k.MagicsockSessionActiveTimeout.Store(timeout)
+ }
}
// AsDebugJSON returns k as something that can be marshalled with json.Marshal
@@ -109,5 +126,6 @@ func (k *Knobs) AsDebugJSON() map[string]any {
"DisableDeltaUpdates": k.DisableDeltaUpdates.Load(),
"PeerMTUEnable": k.PeerMTUEnable.Load(),
"DisableDNSForwarderTCPRetries": k.DisableDNSForwarderTCPRetries.Load(),
+ "MagicsockSessionActiveTimeout": k.MagicsockSessionActiveTimeout.Load().String(),
}
}