From 7e2630235fd7393c9c9fcbfcaca02b6675dc028f Mon Sep 17 00:00:00 2001 From: Jordan Whited Date: Wed, 7 May 2025 09:15:33 -0700 Subject: [PATCH] feature/relayserver: consider relay:server node attribute for enablement (#15901) Updates tailscale/corp#27502 Signed-off-by: Jordan Whited --- feature/relayserver/relayserver.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/feature/relayserver/relayserver.go b/feature/relayserver/relayserver.go index 87aba4228..846e21a7d 100644 --- a/feature/relayserver/relayserver.go +++ b/feature/relayserver/relayserver.go @@ -72,10 +72,20 @@ func (e *extension) Init(host ipnext.Host) error { profile, prefs := host.Profiles().CurrentProfileState() e.profileStateChanged(profile, prefs, false) host.Hooks().ProfileStateChange.Add(e.profileStateChanged) - // TODO(jwhited): callback for netmap/nodeattr changes (e.hasNodeAttrRelayServer) + host.Hooks().OnSelfChange.Add(e.selfNodeViewChanged) return nil } +func (e *extension) selfNodeViewChanged(nodeView tailcfg.NodeView) { + e.mu.Lock() + defer e.mu.Unlock() + e.hasNodeAttrRelayServer = nodeView.HasCap(tailcfg.NodeAttrRelayServer) + if !e.hasNodeAttrRelayServer && e.server != nil { + e.server.Close() + e.server = nil + } +} + func (e *extension) profileStateChanged(_ ipn.LoginProfileView, prefs ipn.PrefsView, sameNode bool) { e.mu.Lock() defer e.mu.Unlock()