mirror of
https://github.com/tailscale/tailscale.git
synced 2026-05-05 20:26:47 +02:00
wgengine/magicsock: disable some code paths when relay server is removed from build
Saves 90 KB. Updates #12614 Change-Id: I47c6b8541c4069fcc5dfcc9763da50f827ad28c7 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
6c6a1d8341
commit
a28e190e96
@ -24,6 +24,7 @@ import (
|
||||
"golang.org/x/net/ipv4"
|
||||
"golang.org/x/net/ipv6"
|
||||
"tailscale.com/disco"
|
||||
"tailscale.com/feature/buildfeatures"
|
||||
"tailscale.com/ipn/ipnstate"
|
||||
"tailscale.com/net/packet"
|
||||
"tailscale.com/net/stun"
|
||||
@ -896,7 +897,7 @@ func (de *endpoint) discoverUDPRelayPathsLocked(now mono.Time) {
|
||||
// wantUDPRelayPathDiscoveryLocked reports whether we should kick off UDP relay
|
||||
// path discovery.
|
||||
func (de *endpoint) wantUDPRelayPathDiscoveryLocked(now mono.Time) bool {
|
||||
if runtime.GOOS == "js" {
|
||||
if runtime.GOOS == "js" || !buildfeatures.HasRelayServer {
|
||||
return false
|
||||
}
|
||||
if !de.relayCapable {
|
||||
@ -2000,8 +2001,10 @@ func (de *endpoint) handleCallMeMaybe(m *disco.CallMeMaybe) {
|
||||
// path discovery can also trigger disco ping transmission, which *could*
|
||||
// lead to an infinite loop of peer relay path discovery between two peers,
|
||||
// absent intended triggers.
|
||||
if de.wantUDPRelayPathDiscoveryLocked(monoNow) {
|
||||
de.discoverUDPRelayPathsLocked(monoNow)
|
||||
if buildfeatures.HasRelayServer {
|
||||
if de.wantUDPRelayPathDiscoveryLocked(monoNow) {
|
||||
de.discoverUDPRelayPathsLocked(monoNow)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -644,7 +644,11 @@ func (c *Conn) consumeEventbusTopics(cli *eventbus.Client) func(*eventbus.Client
|
||||
nodeViewsSub := eventbus.Subscribe[NodeViewsUpdate](cli)
|
||||
nodeMutsSub := eventbus.Subscribe[NodeMutationsUpdate](cli)
|
||||
syncSub := eventbus.Subscribe[syncPoint](cli)
|
||||
allocRelayEndpointSub := eventbus.Subscribe[UDPRelayAllocResp](cli)
|
||||
|
||||
var relayCh <-chan UDPRelayAllocResp
|
||||
if buildfeatures.HasRelayServer {
|
||||
relayCh = eventbus.Subscribe[UDPRelayAllocResp](cli).Events()
|
||||
}
|
||||
return func(cli *eventbus.Client) {
|
||||
for {
|
||||
select {
|
||||
@ -661,8 +665,10 @@ func (c *Conn) consumeEventbusTopics(cli *eventbus.Client) func(*eventbus.Client
|
||||
case syncPoint := <-syncSub.Events():
|
||||
c.dlogf("magicsock: received sync point after reconfig")
|
||||
syncPoint.Signal()
|
||||
case allocResp := <-allocRelayEndpointSub.Events():
|
||||
c.onUDPRelayAllocResp(allocResp)
|
||||
case allocResp := <-relayCh:
|
||||
if buildfeatures.HasRelayServer {
|
||||
c.onUDPRelayAllocResp(allocResp)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1945,11 +1951,13 @@ func (c *Conn) sendDiscoMessage(dst epAddr, dstKey key.NodePublic, dstDisco key.
|
||||
var di *discoInfo
|
||||
switch {
|
||||
case isRelayHandshakeMsg:
|
||||
var ok bool
|
||||
di, ok = c.relayManager.discoInfo(dstDisco)
|
||||
if !ok {
|
||||
c.mu.Unlock()
|
||||
return false, errors.New("unknown relay server")
|
||||
if buildfeatures.HasRelayServer {
|
||||
var ok bool
|
||||
di, ok = c.relayManager.discoInfo(dstDisco)
|
||||
if !ok {
|
||||
c.mu.Unlock()
|
||||
return false, errors.New("unknown relay server")
|
||||
}
|
||||
}
|
||||
case c.peerMap.knownPeerDiscoKey(dstDisco):
|
||||
di = c.discoInfoForKnownPeerLocked(dstDisco)
|
||||
@ -2169,13 +2177,15 @@ func (c *Conn) handleDiscoMessage(msg []byte, src epAddr, shouldBeRelayHandshake
|
||||
var di *discoInfo
|
||||
switch {
|
||||
case shouldBeRelayHandshakeMsg:
|
||||
var ok bool
|
||||
di, ok = c.relayManager.discoInfo(sender)
|
||||
if !ok {
|
||||
if debugDisco() {
|
||||
c.logf("magicsock: disco: ignoring disco-looking relay handshake frame, no active handshakes with key %v over %v", sender.ShortString(), src)
|
||||
if buildfeatures.HasRelayServer {
|
||||
var ok bool
|
||||
di, ok = c.relayManager.discoInfo(sender)
|
||||
if !ok {
|
||||
if debugDisco() {
|
||||
c.logf("magicsock: disco: ignoring disco-looking relay handshake frame, no active handshakes with key %v over %v", sender.ShortString(), src)
|
||||
}
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
case c.peerMap.knownPeerDiscoKey(sender):
|
||||
di = c.discoInfoForKnownPeerLocked(sender)
|
||||
@ -2894,6 +2904,9 @@ func (c *Conn) onFilterUpdate(f FilterUpdate) {
|
||||
// 2. Moving this work upstream into [nodeBackend] or similar, and publishing
|
||||
// the computed result over the eventbus instead.
|
||||
func (c *Conn) updateRelayServersSet(filt *filter.Filter, self tailcfg.NodeView, peers views.Slice[tailcfg.NodeView]) {
|
||||
if !buildfeatures.HasRelayServer {
|
||||
return
|
||||
}
|
||||
relayServers := make(set.Set[candidatePeerRelay])
|
||||
nodes := append(peers.AsSlice(), self)
|
||||
for _, maybeCandidate := range nodes {
|
||||
|
||||
@ -12,6 +12,7 @@ import (
|
||||
"time"
|
||||
|
||||
"tailscale.com/disco"
|
||||
"tailscale.com/feature/buildfeatures"
|
||||
"tailscale.com/net/packet"
|
||||
"tailscale.com/net/stun"
|
||||
udprelay "tailscale.com/net/udprelay/endpoint"
|
||||
@ -419,6 +420,9 @@ func (r *relayManager) handleCallMeMaybeVia(ep *endpoint, lastBest addrQuality,
|
||||
// [*disco.AllocateUDPRelayEndpointResponse] then relayServerNodeKey must be
|
||||
// nonzero.
|
||||
func (r *relayManager) handleRxDiscoMsg(conn *Conn, dm disco.Message, relayServerNodeKey key.NodePublic, discoKey key.DiscoPublic, src epAddr) {
|
||||
if !buildfeatures.HasRelayServer {
|
||||
return
|
||||
}
|
||||
relayManagerInputEvent(r, nil, &r.rxDiscoMsgCh, relayDiscoMsgEvent{
|
||||
conn: conn,
|
||||
msg: dm,
|
||||
@ -445,6 +449,9 @@ func (r *relayManager) handleRelayServersSet(servers set.Set[candidatePeerRelay]
|
||||
// goroutine to return, i.e. the calling goroutine was birthed by runLoop and is
|
||||
// cancelable via 'ctx'. 'ctx' may be nil.
|
||||
func relayManagerInputEvent[T any](r *relayManager, ctx context.Context, eventCh *chan T, event T) {
|
||||
if !buildfeatures.HasRelayServer {
|
||||
return
|
||||
}
|
||||
r.init()
|
||||
var ctxDoneCh <-chan struct{}
|
||||
if ctx != nil {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user