diff options
| author | Brad Fitzpatrick <bradfitz@tailscale.com> | 2023-10-06 06:50:13 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@tailscale.com> | 2023-10-06 06:59:17 -0700 |
| commit | a794630f60dcb6f0c13eb2820f201c2a12c952ef (patch) | |
| tree | 01023fb3f2df5553e60d93c303c34a4917498729 /control/controlknobs/controlknobs.go | |
| parent | c761d102ea5c76bc955fdb2d0ac56c8096e86466 (diff) | |
| download | tailscale-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.go | 18 |
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(), } } |
