cmd/tailscale,feature/relayserver,ipn: add relay-server-static-endpoints set flag
Updates tailscale/corp#31489 Updates #17791 Signed-off-by: Jordan Whited <jordan@tailscale.com>
This commit is contained in:
committed by
Jordan Whited
parent
755309c04e
commit
7426eca163
@@ -9,6 +9,7 @@ import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/netip"
|
||||
|
||||
"tailscale.com/disco"
|
||||
"tailscale.com/feature"
|
||||
@@ -23,6 +24,7 @@ import (
|
||||
"tailscale.com/types/key"
|
||||
"tailscale.com/types/logger"
|
||||
"tailscale.com/types/ptr"
|
||||
"tailscale.com/types/views"
|
||||
"tailscale.com/util/eventbus"
|
||||
"tailscale.com/wgengine/magicsock"
|
||||
)
|
||||
@@ -85,6 +87,7 @@ type relayServer interface {
|
||||
AllocateEndpoint(discoA, discoB key.DiscoPublic) (endpoint.ServerEndpoint, error)
|
||||
GetSessions() []status.ServerSession
|
||||
SetDERPMapView(tailcfg.DERPMapView)
|
||||
SetStaticAddrPorts(addrPorts views.Slice[netip.AddrPort])
|
||||
}
|
||||
|
||||
// extension is an [ipnext.Extension] managing the relay server on platforms
|
||||
@@ -95,12 +98,13 @@ type extension struct {
|
||||
ec *eventbus.Client
|
||||
respPub *eventbus.Publisher[magicsock.UDPRelayAllocResp]
|
||||
|
||||
mu syncs.Mutex // guards the following fields
|
||||
shutdown bool // true if Shutdown() has been called
|
||||
rs relayServer // nil when disabled
|
||||
port *int // ipn.Prefs.RelayServerPort, nil if disabled
|
||||
derpMapView tailcfg.DERPMapView // latest seen over the eventbus
|
||||
hasNodeAttrDisableRelayServer bool // [tailcfg.NodeAttrDisableRelayServer]
|
||||
mu syncs.Mutex // guards the following fields
|
||||
shutdown bool // true if Shutdown() has been called
|
||||
rs relayServer // nil when disabled
|
||||
port *int // ipn.Prefs.RelayServerPort, nil if disabled
|
||||
staticEndpoints views.Slice[netip.AddrPort] // ipn.Prefs.RelayServerStaticEndpoints
|
||||
derpMapView tailcfg.DERPMapView // latest seen over the eventbus
|
||||
hasNodeAttrDisableRelayServer bool // [tailcfg.NodeAttrDisableRelayServer]
|
||||
}
|
||||
|
||||
// Name implements [ipnext.Extension].
|
||||
@@ -186,6 +190,7 @@ func (e *extension) relayServerShouldBeRunningLocked() bool {
|
||||
|
||||
// handleRelayServerLifetimeLocked handles the lifetime of [e.rs].
|
||||
func (e *extension) handleRelayServerLifetimeLocked() {
|
||||
defer e.handleRelayServerStaticAddrPortsLocked()
|
||||
if !e.relayServerShouldBeRunningLocked() {
|
||||
e.stopRelayServerLocked()
|
||||
return
|
||||
@@ -195,6 +200,13 @@ func (e *extension) handleRelayServerLifetimeLocked() {
|
||||
e.tryStartRelayServerLocked()
|
||||
}
|
||||
|
||||
func (e *extension) handleRelayServerStaticAddrPortsLocked() {
|
||||
if e.rs != nil {
|
||||
// TODO(jwhited): env var support
|
||||
e.rs.SetStaticAddrPorts(e.staticEndpoints)
|
||||
}
|
||||
}
|
||||
|
||||
func (e *extension) selfNodeViewChanged(nodeView tailcfg.NodeView) {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
@@ -205,6 +217,7 @@ func (e *extension) selfNodeViewChanged(nodeView tailcfg.NodeView) {
|
||||
func (e *extension) profileStateChanged(_ ipn.LoginProfileView, prefs ipn.PrefsView, sameNode bool) {
|
||||
e.mu.Lock()
|
||||
defer e.mu.Unlock()
|
||||
e.staticEndpoints = prefs.RelayServerStaticEndpoints()
|
||||
newPort, ok := prefs.RelayServerPort().GetOk()
|
||||
enableOrDisableServer := ok != (e.port != nil)
|
||||
portChanged := ok && e.port != nil && newPort != *e.port
|
||||
|
||||
Reference in New Issue
Block a user