mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-11 13:18:53 +00:00
all: start groundwork for using capver for localapi & peerapi
Updates #7015 Change-Id: I3d4c11b42a727a62eaac3262a879f29bb4ce82dd Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:

committed by
Brad Fitzpatrick

parent
c129bf1da1
commit
6edf357b96
@@ -29,7 +29,8 @@ import (
|
||||
// single monotonically increasing integer, rather than the relatively
|
||||
// complex x.y.z-xxxxx semver+hash(es). Whenever the client gains a
|
||||
// capability or wants to negotiate a change in semantics with the
|
||||
// server (control plane), bump this number and document what's new.
|
||||
// server (control plane), peers (over PeerAPI), or frontend (over
|
||||
// LocalAPI), bump this number and document what's new.
|
||||
//
|
||||
// Previously (prior to 2022-03-06), it was known as the "MapRequest
|
||||
// version" or "mapVer" or "map cap" and that name and usage persists
|
||||
@@ -90,7 +91,8 @@ type CapabilityVersion int
|
||||
// - 51: 2022-11-30: Client understands CapabilityTailnetLockAlpha
|
||||
// - 52: 2023-01-05: client can handle c2n POST /logtail/flush
|
||||
// - 53: 2023-01-18: client respects explicit Node.Expired + auto-sets based on Node.KeyExpiry
|
||||
const CurrentCapabilityVersion CapabilityVersion = 53
|
||||
// - 54: 2023-01-19: Node.Cap added, PeersChangedPatch.Cap, uses Node.Cap for ExitDNS before Hostinfo.Services fallback
|
||||
const CurrentCapabilityVersion CapabilityVersion = 54
|
||||
|
||||
type StableID string
|
||||
|
||||
@@ -199,6 +201,7 @@ type Node struct {
|
||||
DERP string `json:",omitempty"` // DERP-in-IP:port ("127.3.3.40:N") endpoint
|
||||
Hostinfo HostinfoView
|
||||
Created time.Time
|
||||
Cap CapabilityVersion `json:",omitempty"` // if non-zero, the node's capability version; old servers might not send
|
||||
|
||||
// Tags are the list of ACL tags applied to this node.
|
||||
// Tags take the form of `tag:<value>` where value starts
|
||||
@@ -1627,6 +1630,7 @@ func (n *Node) Equal(n2 *Node) bool {
|
||||
eqCIDRs(n.PrimaryRoutes, n2.PrimaryRoutes) &&
|
||||
eqStrings(n.Endpoints, n2.Endpoints) &&
|
||||
n.DERP == n2.DERP &&
|
||||
n.Cap == n2.Cap &&
|
||||
n.Hostinfo.Equal(n2.Hostinfo) &&
|
||||
n.Created.Equal(n2.Created) &&
|
||||
eqTimePtr(n.LastSeen, n2.LastSeen) &&
|
||||
@@ -2001,6 +2005,9 @@ type PeerChange struct {
|
||||
// region ID is now this number.
|
||||
DERPRegion int `json:",omitempty"`
|
||||
|
||||
// Cap, if non-zero, means that NodeID's capability version has changed.
|
||||
Cap CapabilityVersion `json:",omitempty"`
|
||||
|
||||
// Endpoints, if non-empty, means that NodeID's UDP Endpoints
|
||||
// have changed to these.
|
||||
Endpoints []string `json:",omitempty"`
|
||||
|
@@ -85,6 +85,7 @@ var _NodeCloneNeedsRegeneration = Node(struct {
|
||||
DERP string
|
||||
Hostinfo HostinfoView
|
||||
Created time.Time
|
||||
Cap CapabilityVersion
|
||||
Tags []string
|
||||
PrimaryRoutes []netip.Prefix
|
||||
LastSeen *time.Time
|
||||
|
@@ -329,7 +329,7 @@ func TestNodeEqual(t *testing.T) {
|
||||
"ID", "StableID", "Name", "User", "Sharer",
|
||||
"Key", "KeyExpiry", "KeySignature", "Machine", "DiscoKey",
|
||||
"Addresses", "AllowedIPs", "Endpoints", "DERP", "Hostinfo",
|
||||
"Created", "Tags", "PrimaryRoutes",
|
||||
"Created", "Cap", "Tags", "PrimaryRoutes",
|
||||
"LastSeen", "Online", "KeepAlive", "MachineAuthorized",
|
||||
"Capabilities",
|
||||
"UnsignedPeerAPIOnly",
|
||||
|
@@ -148,6 +148,7 @@ func (v NodeView) Endpoints() views.Slice[string] { return views.SliceOf(v.ж.E
|
||||
func (v NodeView) DERP() string { return v.ж.DERP }
|
||||
func (v NodeView) Hostinfo() HostinfoView { return v.ж.Hostinfo }
|
||||
func (v NodeView) Created() time.Time { return v.ж.Created }
|
||||
func (v NodeView) Cap() CapabilityVersion { return v.ж.Cap }
|
||||
func (v NodeView) Tags() views.Slice[string] { return views.SliceOf(v.ж.Tags) }
|
||||
func (v NodeView) PrimaryRoutes() views.IPPrefixSlice {
|
||||
return views.IPPrefixSliceOf(v.ж.PrimaryRoutes)
|
||||
@@ -196,6 +197,7 @@ var _NodeViewNeedsRegeneration = Node(struct {
|
||||
DERP string
|
||||
Hostinfo HostinfoView
|
||||
Created time.Time
|
||||
Cap CapabilityVersion
|
||||
Tags []string
|
||||
PrimaryRoutes []netip.Prefix
|
||||
LastSeen *time.Time
|
||||
|
Reference in New Issue
Block a user