@ -50,11 +50,11 @@ func newExtension(logf logger.Logf, _ ipnext.SafeBackend) (ipnext.Extension, err
type extension struct {
logf logger . Logf
mu sync . Mutex // guards the following fields
shutdown bool
port * int // ipn.Prefs.RelayServerPort, nil if disabled
hasNodeAttr RelayServer bool // tailcfg.NodeAttr RelayServer
server relayServer // lazily initialized
mu sync . Mutex // guards the following fields
shutdown bool
port * int // ipn.Prefs.RelayServerPort, nil if disabled
hasNodeAttr Disable RelayServer bool // tailcfg.NodeAttr Disable RelayServer
server relayServer // lazily initialized
}
// relayServer is the interface of [udprelay.Server].
@ -81,8 +81,8 @@ func (e *extension) Init(host ipnext.Host) error {
func ( e * extension ) selfNodeViewChanged ( nodeView tailcfg . NodeView ) {
e . mu . Lock ( )
defer e . mu . Unlock ( )
e . hasNodeAttr RelayServer = nodeView . HasCap ( tailcfg . NodeAttr RelayServer)
if ! e . hasNodeAttr RelayServer && e . server != nil {
e . hasNodeAttr Disable RelayServer = nodeView . HasCap ( tailcfg . NodeAttr Disable RelayServer)
if e . hasNodeAttr Disable RelayServer && e . server != nil {
e . server . Close ( )
e . server = nil
}
@ -130,8 +130,8 @@ func (e *extension) relayServerOrInit() (relayServer, error) {
if e . port == nil {
return nil , errors . New ( "relay server is not configured" )
}
if ! e . hasNodeAttr RelayServer {
return nil , errors . New ( " no relay:server node attribute ")
if e . hasNodeAttr Disable RelayServer {
return nil , errors . New ( " disable-relay-server node attribute is present ")
}
if ! envknob . UseWIPCode ( ) {
return nil , errors . New ( "TAILSCALE_USE_WIP_CODE envvar is not set" )