From a26f23d94986fb304bebb4e6554b0ac9a85c4eca Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Sat, 19 Nov 2022 13:10:45 -0800 Subject: [PATCH] ipn/ipnlocal: actually fill out PeerAPIURLs in PeerStatus The earlier 5f6d63936f3 was not complete. Updates tailscale/corp#7515 Change-Id: I35efca51d1584c48ef6834a7d29cd42d7c943628 Signed-off-by: Brad Fitzpatrick --- ipn/ipnlocal/local.go | 14 ++++++++------ ipn/ipnstate/ipnstate.go | 3 +++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 8ea234d38..b3a5e85bf 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -672,13 +672,11 @@ func (b *LocalBackend) populatePeerStatusLocked(sb *ipnstate.StatusBuilder) { peerStatusFromNode(ps, p) p4, p6 := peerAPIPorts(p) - ip4 := nodeIP(p, netip.Addr.Is4) - ip6 := nodeIP(p, netip.Addr.Is6) - if p4 != 0 && ip4.IsValid() { - ps.PeerAPIURL = append(ps.PeerAPIURL, peerAPIURL(ip4, p4)) + if u := peerAPIURL(nodeIP(p, netip.Addr.Is4), p4); u != "" { + ps.PeerAPIURL = append(ps.PeerAPIURL, u) } - if p6 != 0 && ip6.IsValid() { - ps.PeerAPIURL = append(ps.PeerAPIURL, peerAPIURL(ip6, p6)) + if u := peerAPIURL(nodeIP(p, netip.Addr.Is6), p6); u != "" { + ps.PeerAPIURL = append(ps.PeerAPIURL, u) } sb.AddPeer(p.Key, ps) } @@ -3701,6 +3699,10 @@ func peerAPIPorts(peer *tailcfg.Node) (p4, p6 uint16) { return } +// peerAPIURL returns an HTTP URL for the peer's peerapi service, +// without a trailing slash. +// +// If ip or port is the zero value then it returns the empty string. func peerAPIURL(ip netip.Addr, port uint16) string { if port == 0 || !ip.IsValid() { return "" diff --git a/ipn/ipnstate/ipnstate.go b/ipn/ipnstate/ipnstate.go index bed9e7ddf..6ba0e649b 100644 --- a/ipn/ipnstate/ipnstate.go +++ b/ipn/ipnstate/ipnstate.go @@ -391,6 +391,9 @@ func (sb *StatusBuilder) AddPeer(peer key.NodePublic, st *PeerStatus) { if st.Active { e.Active = true } + if st.PeerAPIURL != nil { + e.PeerAPIURL = st.PeerAPIURL + } } type StatusUpdater interface {