summaryrefslogtreecommitdiffhomepage
path: root/types/netmap
diff options
context:
space:
mode:
Diffstat (limited to 'types/netmap')
-rw-r--r--types/netmap/netmap.go2
-rw-r--r--types/netmap/netmap_clone.go73
-rw-r--r--types/netmap/netmap_view.go122
3 files changed, 197 insertions, 0 deletions
diff --git a/types/netmap/netmap.go b/types/netmap/netmap.go
index b1eecaa8f..42ba30807 100644
--- a/types/netmap/netmap.go
+++ b/types/netmap/netmap.go
@@ -21,6 +21,8 @@ import (
"tailscale.com/wgengine/filter/filtertype"
)
+//go:generate go run tailscale.com/cmd/viewer -type=NetworkMap
+
// NetworkMap is the current state of the world.
//
// The fields should all be considered read-only. They might
diff --git a/types/netmap/netmap_clone.go b/types/netmap/netmap_clone.go
new file mode 100644
index 000000000..ac01cda32
--- /dev/null
+++ b/types/netmap/netmap_clone.go
@@ -0,0 +1,73 @@
+// Copyright (c) Tailscale Inc & AUTHORS
+// SPDX-License-Identifier: BSD-3-Clause
+
+// Code generated by tailscale.com/cmd/cloner; DO NOT EDIT.
+
+package netmap
+
+import (
+ "maps"
+ "time"
+
+ "tailscale.com/tailcfg"
+ "tailscale.com/tka"
+ "tailscale.com/types/key"
+ "tailscale.com/types/views"
+ "tailscale.com/util/set"
+ "tailscale.com/wgengine/filter/filtertype"
+)
+
+// Clone makes a deep copy of NetworkMap.
+// The result aliases no memory with the original.
+func (src *NetworkMap) Clone() *NetworkMap {
+ if src == nil {
+ return nil
+ }
+ dst := new(NetworkMap)
+ *dst = *src
+ dst.SelfNode = src.SelfNode
+ dst.AllCaps = maps.Clone(src.AllCaps)
+ if src.Peers != nil {
+ dst.Peers = make([]tailcfg.NodeView, len(src.Peers))
+ for i := range dst.Peers {
+ dst.Peers[i] = src.Peers[i]
+ }
+ }
+ dst.DNS = *src.DNS.Clone()
+ if src.PacketFilter != nil {
+ dst.PacketFilter = make([]filtertype.Match, len(src.PacketFilter))
+ for i := range dst.PacketFilter {
+ dst.PacketFilter[i] = *src.PacketFilter[i].Clone()
+ }
+ }
+ dst.PacketFilterRules = src.PacketFilterRules
+ dst.SSHPolicy = src.SSHPolicy.Clone()
+ dst.DERPMap = src.DERPMap.Clone()
+ dst.ControlHealth = append(src.ControlHealth[:0:0], src.ControlHealth...)
+ dst.UserProfiles = maps.Clone(src.UserProfiles)
+ return dst
+}
+
+// A compilation failure here means this code must be regenerated, with the command at the top of this file.
+var _NetworkMapCloneNeedsRegeneration = NetworkMap(struct {
+ SelfNode tailcfg.NodeView
+ AllCaps set.Set[tailcfg.NodeCapability]
+ NodeKey key.NodePublic
+ PrivateKey key.NodePrivate
+ Expiry time.Time
+ Name string
+ MachineKey key.MachinePublic
+ Peers []tailcfg.NodeView
+ DNS tailcfg.DNSConfig
+ PacketFilter []filtertype.Match
+ PacketFilterRules views.Slice[tailcfg.FilterRule]
+ SSHPolicy *tailcfg.SSHPolicy
+ CollectServices bool
+ DERPMap *tailcfg.DERPMap
+ ControlHealth []string
+ TKAEnabled bool
+ TKAHead tka.AUMHash
+ Domain string
+ DomainAuditLogID string
+ UserProfiles map[tailcfg.UserID]tailcfg.UserProfileView
+}{})
diff --git a/types/netmap/netmap_view.go b/types/netmap/netmap_view.go
new file mode 100644
index 000000000..f0e5ac4b6
--- /dev/null
+++ b/types/netmap/netmap_view.go
@@ -0,0 +1,122 @@
+// Copyright (c) Tailscale Inc & AUTHORS
+// SPDX-License-Identifier: BSD-3-Clause
+
+// Code generated by tailscale/cmd/viewer; DO NOT EDIT.
+
+package netmap
+
+import (
+ "encoding/json"
+ "errors"
+ "time"
+
+ "tailscale.com/tailcfg"
+ "tailscale.com/tka"
+ "tailscale.com/types/key"
+ "tailscale.com/types/views"
+ "tailscale.com/util/set"
+ "tailscale.com/wgengine/filter/filtertype"
+)
+
+//go:generate go run tailscale.com/cmd/cloner -clonefunc=false -type=NetworkMap
+
+// View returns a read-only view of NetworkMap.
+func (p *NetworkMap) View() NetworkMapView {
+ return NetworkMapView{ж: p}
+}
+
+// NetworkMapView provides a read-only view over NetworkMap.
+//
+// Its methods should only be called if `Valid()` returns true.
+type NetworkMapView struct {
+ // ж is the underlying mutable value, named with a hard-to-type
+ // character that looks pointy like a pointer.
+ // It is named distinctively to make you think of how dangerous it is to escape
+ // to callers. You must not let callers be able to mutate it.
+ ж *NetworkMap
+}
+
+// Valid reports whether v's underlying value is non-nil.
+func (v NetworkMapView) Valid() bool { return v.ж != nil }
+
+// AsStruct returns a clone of the underlying value which aliases no memory with
+// the original.
+func (v NetworkMapView) AsStruct() *NetworkMap {
+ if v.ж == nil {
+ return nil
+ }
+ return v.ж.Clone()
+}
+
+func (v NetworkMapView) MarshalJSON() ([]byte, error) { return json.Marshal(v.ж) }
+
+func (v *NetworkMapView) UnmarshalJSON(b []byte) error {
+ if v.ж != nil {
+ return errors.New("already initialized")
+ }
+ if len(b) == 0 {
+ return nil
+ }
+ var x NetworkMap
+ if err := json.Unmarshal(b, &x); err != nil {
+ return err
+ }
+ v.ж = &x
+ return nil
+}
+
+func (v NetworkMapView) SelfNode() tailcfg.NodeView { return v.ж.SelfNode }
+
+func (v NetworkMapView) AllCaps() views.Map[tailcfg.NodeCapability, struct{}] {
+ return views.MapOf(v.ж.AllCaps)
+}
+func (v NetworkMapView) NodeKey() key.NodePublic { return v.ж.NodeKey }
+func (v NetworkMapView) PrivateKey() key.NodePrivate { return v.ж.PrivateKey }
+func (v NetworkMapView) Expiry() time.Time { return v.ж.Expiry }
+func (v NetworkMapView) Name() string { return v.ж.Name }
+func (v NetworkMapView) MachineKey() key.MachinePublic { return v.ж.MachineKey }
+func (v NetworkMapView) Peers() views.Slice[tailcfg.NodeView] { return views.SliceOf(v.ж.Peers) }
+func (v NetworkMapView) DNS() tailcfg.DNSConfigView { return v.ж.DNS.View() }
+func (v NetworkMapView) PacketFilter() views.ValueSliceView[filtertype.Match, *filtertype.Match, filtertype.MatchView] {
+ return views.SliceOfValueViews[filtertype.Match, *filtertype.Match](v.ж.PacketFilter)
+}
+func (v NetworkMapView) PacketFilterRules() views.Slice[tailcfg.FilterRule] {
+ return v.ж.PacketFilterRules
+}
+func (v NetworkMapView) SSHPolicy() tailcfg.SSHPolicyView { return v.ж.SSHPolicy.View() }
+func (v NetworkMapView) CollectServices() bool { return v.ж.CollectServices }
+func (v NetworkMapView) DERPMap() tailcfg.DERPMapView { return v.ж.DERPMap.View() }
+func (v NetworkMapView) ControlHealth() views.Slice[string] { return views.SliceOf(v.ж.ControlHealth) }
+func (v NetworkMapView) TKAEnabled() bool { return v.ж.TKAEnabled }
+func (v NetworkMapView) TKAHead() tka.AUMHash { return v.ж.TKAHead }
+func (v NetworkMapView) Domain() string { return v.ж.Domain }
+func (v NetworkMapView) DomainAuditLogID() string { return v.ж.DomainAuditLogID }
+
+func (v NetworkMapView) UserProfiles() views.Map[tailcfg.UserID, tailcfg.UserProfileView] {
+ return views.MapOf(v.ж.UserProfiles)
+}
+func (v NetworkMapView) String() string { return v.ж.String() }
+
+// A compilation failure here means this code must be regenerated, with the command at the top of this file.
+var _NetworkMapViewNeedsRegeneration = NetworkMap(struct {
+ SelfNode tailcfg.NodeView
+ AllCaps set.Set[tailcfg.NodeCapability]
+ NodeKey key.NodePublic
+ PrivateKey key.NodePrivate
+ Expiry time.Time
+ Name string
+ MachineKey key.MachinePublic
+ Peers []tailcfg.NodeView
+ DNS tailcfg.DNSConfig
+ PacketFilter []filtertype.Match
+ PacketFilterRules views.Slice[tailcfg.FilterRule]
+ SSHPolicy *tailcfg.SSHPolicy
+ CollectServices bool
+ DERPMap *tailcfg.DERPMap
+ ControlHealth []string
+ TKAEnabled bool
+ TKAHead tka.AUMHash
+ Domain string
+ DomainAuditLogID string
+ UserProfiles map[tailcfg.UserID]tailcfg.UserProfileView
+}{})