wgengine/magicsock: implement probing of UDP path lifetime (#10844)

This commit implements probing of UDP path lifetime on the tail end of
an active direct connection. Probing configuration has two parts -
Cliffs, which are various timeout cliffs of interest, and
CycleCanStartEvery, which limits how often a probing cycle can start,
per-endpoint. Initially a statically defined default configuration will
be used. The default configuration has cliffs of 10s, 30s, and 60s,
with a CycleCanStartEvery of 24h. Probing results are communicated via
clientmetric counters. Probing is off by default, and can be enabled
via control knob. Probing is purely informational and does not yet
drive any magicsock behaviors.

Updates #540

Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
Jordan Whited
2024-01-23 09:37:32 -08:00
committed by GitHub
parent 0e2cb76abe
commit 8b47322acc
11 changed files with 903 additions and 50 deletions

View File

@@ -126,7 +126,8 @@ type CapabilityVersion int
// - 83: 2023-12-18: Client understands DefaultAutoUpdate
// - 84: 2024-01-04: Client understands SeamlessKeyRenewal
// - 85: 2024-01-05: Client understands MaxKeyDuration
const CurrentCapabilityVersion CapabilityVersion = 85
// - 86: 2024-01-23: Client understands NodeAttrProbeUDPLifetime
const CurrentCapabilityVersion CapabilityVersion = 86
type StableID string
@@ -2203,6 +2204,10 @@ const (
// NodeAttrSeamlessKeyRenewal makes clients enable beta functionality
// of renewing node keys without breaking connections.
NodeAttrSeamlessKeyRenewal NodeCapability = "seamless-key-renewal"
// NodeAttrProbeUDPLifetime makes the client probe UDP path lifetime at the
// tail end of an active direct connection in magicsock.
NodeAttrProbeUDPLifetime NodeCapability = "probe-udp-lifetime"
)
// SetDNSRequest is a request to add a DNS record.