From d8d9036dbb5a2a2d8559dc82e456583db6179de6 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Tue, 27 Jul 2021 08:01:29 -0700 Subject: [PATCH] tailcfg: add Node.PrimaryRoutes Signed-off-by: Brad Fitzpatrick --- tailcfg/tailcfg.go | 7 +++++++ tailcfg/tailcfg_clone.go | 2 ++ tailcfg/tailcfg_test.go | 3 ++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/tailcfg/tailcfg.go b/tailcfg/tailcfg.go index 93ce4580c..93a47867f 100644 --- a/tailcfg/tailcfg.go +++ b/tailcfg/tailcfg.go @@ -164,6 +164,12 @@ type Node struct { Hostinfo Hostinfo Created time.Time + // PrimaryRoutes are the routes from AllowedIPs that this node + // is currently the primary subnet router for, as determined + // by the control plane. It does not include the self address + // values from Addresses that are in AllowedIPs. + PrimaryRoutes []netaddr.IPPrefix `json:",omitempty"` + // LastSeen is when the node was last online. It is not // updated when Online is true. It is nil if the current // node doesn't have permission to know, or the node @@ -1142,6 +1148,7 @@ func (n *Node) Equal(n2 *Node) bool { eqBoolPtr(n.Online, n2.Online) && eqCIDRs(n.Addresses, n2.Addresses) && eqCIDRs(n.AllowedIPs, n2.AllowedIPs) && + eqCIDRs(n.PrimaryRoutes, n2.PrimaryRoutes) && eqStrings(n.Endpoints, n2.Endpoints) && n.DERP == n2.DERP && n.Hostinfo.Equal(&n2.Hostinfo) && diff --git a/tailcfg/tailcfg_clone.go b/tailcfg/tailcfg_clone.go index 5b7e9b7c8..0b67df91c 100644 --- a/tailcfg/tailcfg_clone.go +++ b/tailcfg/tailcfg_clone.go @@ -49,6 +49,7 @@ func (src *Node) Clone() *Node { dst.AllowedIPs = append(src.AllowedIPs[:0:0], src.AllowedIPs...) dst.Endpoints = append(src.Endpoints[:0:0], src.Endpoints...) dst.Hostinfo = *src.Hostinfo.Clone() + dst.PrimaryRoutes = append(src.PrimaryRoutes[:0:0], src.PrimaryRoutes...) if dst.LastSeen != nil { dst.LastSeen = new(time.Time) *dst.LastSeen = *src.LastSeen @@ -79,6 +80,7 @@ var _NodeNeedsRegeneration = Node(struct { DERP string Hostinfo Hostinfo Created time.Time + PrimaryRoutes []netaddr.IPPrefix LastSeen *time.Time Online *bool KeepAlive bool diff --git a/tailcfg/tailcfg_test.go b/tailcfg/tailcfg_test.go index b1aad3857..a3c60355d 100644 --- a/tailcfg/tailcfg_test.go +++ b/tailcfg/tailcfg_test.go @@ -194,7 +194,8 @@ func TestNodeEqual(t *testing.T) { "ID", "StableID", "Name", "User", "Sharer", "Key", "KeyExpiry", "Machine", "DiscoKey", "Addresses", "AllowedIPs", "Endpoints", "DERP", "Hostinfo", - "Created", "LastSeen", "Online", "KeepAlive", "MachineAuthorized", + "Created", "PrimaryRoutes", + "LastSeen", "Online", "KeepAlive", "MachineAuthorized", "Capabilities", "ComputedName", "computedHostIfDifferent", "ComputedNameWithHost", }