tailscale/types
Claus Lensbøl 85bb5f84a5
wgengine/magicsock,control/controlclient: do not overwrite discokey with old key (#18606)
When a client starts up without being able to connect to control, it
sends its discoKey to other nodes it wants to communicate with over
TSMP. This disco key will be a newer key than the one control knows
about.

If the client that can connect to control gets a full netmap, ensure
that the disco key for the node not connected to control is not
overwritten with the stale key control knows about.

This is implemented through keeping track of mapSession and use that for
the discokey injection if it is available. This ensures that we are not
constantly resetting the wireguard connection when getting the wrong
keys from control.

This is implemented as:
 - If the key is received via TSMP:
   - Set lastSeen for the peer to now()
   - Set online for the peer to false
 - When processing new keys, only accept keys where either:
   - Peer is online
   - lastSeen is newer than existing last seen

If mapSession is not available, as in we are not yet connected to
control, punt down the disco key injection to magicsock.

Ideally, we will want to have mapSession be long lived at some point in
the near future so we only need to inject keys in one location and then
also use that for testing and loading the cache, but that is a yak for
another PR.

Updates #12639

Signed-off-by: Claus Lensbøl <claus@tailscale.com>
2026-03-20 08:56:27 -04:00
..
appctype appc,feature/conn25,net: Add DNS response interception for conn25 2026-02-20 07:43:37 -08:00
bools all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
dnstype all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
empty all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
events wgengine/magicsock,control/controlclient: do not overwrite discokey with old key (#18606) 2026-03-20 08:56:27 -04:00
flagtype all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
geo types/geo: fix floating point bug causing NaN returns in SphericalAngleTo (#18777) 2026-03-02 17:33:57 -08:00
iox all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
ipproto all: use Go 1.26 things, run most gofix modernizers 2026-03-06 13:32:03 -08:00
jsonx types/ptr: deprecate ptr.To, use Go 1.26 new 2026-03-05 20:13:18 -08:00
key types/key: add NodePrivate.Raw32 and DiscoPrivateFromRaw32 2026-03-10 07:36:35 -07:00
lazy all: use Go 1.26 things, run most gofix modernizers 2026-03-06 13:32:03 -08:00
logger all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
logid all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
mapx all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
netlogfunc all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
netlogtype all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
netmap all: use Go 1.26 things, run most gofix modernizers 2026-03-06 13:32:03 -08:00
nettype all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
opt all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
persist tailcfg: reintroduce UserProfile.Groups 2026-03-09 11:08:45 +00:00
prefs types/ptr: deprecate ptr.To, use Go 1.26 new 2026-03-05 20:13:18 -08:00
preftype all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
ptr types/ptr: deprecate ptr.To, use Go 1.26 new 2026-03-05 20:13:18 -08:00
result all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
structs all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
tkatype all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
views all: use Go 1.26 things, run most gofix modernizers 2026-03-06 13:32:03 -08:00