summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdriano Sela Aviles <adriano@tailscale.com>2026-04-13 08:59:28 -0700
committerAdriano Sela Aviles <adriano.selaviles@gmail.com>2026-04-13 14:36:48 -0700
commit4ce16439295f5b3dd67b2993c6ff03d9f9060d8b (patch)
tree0cb6162a41da16510aa16c9a07b2b03918e35bca
parente2fa9ff140b9b1a65b2839cd0235bd506f0c6fc3 (diff)
downloadtailscale-4ce16439295f5b3dd67b2993c6ff03d9f9060d8b.tar.xz
tailscale-4ce16439295f5b3dd67b2993c6ff03d9f9060d8b.zip
types/netmap,tailcfg: update documentation for Services cap
Updates tailscale/corp#40052 Signed-off-by: Adriano Sela Aviles <adriano@tailscale.com>
-rw-r--r--tailcfg/tailcfg.go6
-rw-r--r--types/netmap/netmap.go6
2 files changed, 8 insertions, 4 deletions
diff --git a/tailcfg/tailcfg.go b/tailcfg/tailcfg.go
index bc3693dab..0811ecc9f 100644
--- a/tailcfg/tailcfg.go
+++ b/tailcfg/tailcfg.go
@@ -2794,9 +2794,11 @@ const (
const (
// NodeAttrPrefixServices is the prefix for per-service [NodeCapMap]
- // entries describing Services visible (accessible) to this node. The full
- // key for a service named "svc:foo" is NodeAttrPrefixServices+"foo".
+ // entries describing Services visible (accessible) to this node.
// Each value under such a key is of type [ServiceDetails].
+ // The suffix after the prefix is an opaque server-chosen identifier;
+ // consumers must use [ServiceDetails.Name] as the canonical service name
+ // rather than parsing it from the map key.
NodeAttrPrefixServices NodeCapabilityPrefix = "services/"
)
diff --git a/types/netmap/netmap.go b/types/netmap/netmap.go
index ef76c05da..b768caf4c 100644
--- a/types/netmap/netmap.go
+++ b/types/netmap/netmap.go
@@ -147,8 +147,10 @@ func (nm *NetworkMap) GetIPVIPServiceMap() IPServiceMappings {
}
// Services returns the Services visible (accessible) to this node,
-// decoded from [tailcfg.NodeAttrPrefixServices]+serviceName entries in the
-// self node's CapMap. Returns nil if nm is nil or SelfNode is invalid.
+// decoded from [tailcfg.NodeAttrPrefixServices] entries in the self node's
+// CapMap. The returned map is keyed by [tailcfg.ServiceDetails.Name], which is
+// the canonical service name; the NodeCapMap key suffix is opaque and must not
+// be parsed or relied upon. It returns nil if nm is nil or SelfNode is invalid.
//
// TODO(adrianosela): cache the result of decoding the capmap so
// we don't have to decode it multiple times after each netmap update.