summaryrefslogtreecommitdiffhomepage
path: root/wgengine/userspace.go
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2026-03-07 18:33:02 +0000
committerBrad Fitzpatrick <bradfitz@tailscale.com>2026-03-07 18:33:02 +0000
commit7b081a98bdbce817a2b3e7929d6a8c7f1c551b35 (patch)
tree5598f046f24c82fd16f8cca1379e380da1d06e92 /wgengine/userspace.go
parente400d5aa7b22ef131d2b05a1df89177f87dd3922 (diff)
downloadtailscale-dctp1.tar.xz
tailscale-dctp1.zip
all: add some experimental hooksdctp1dctp-1
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
Diffstat (limited to 'wgengine/userspace.go')
-rw-r--r--wgengine/userspace.go35
1 files changed, 24 insertions, 11 deletions
diff --git a/wgengine/userspace.go b/wgengine/userspace.go
index 245ce421f..bf325721f 100644
--- a/wgengine/userspace.go
+++ b/wgengine/userspace.go
@@ -23,6 +23,7 @@ import (
"github.com/tailscale/wireguard-go/device"
"github.com/tailscale/wireguard-go/tun"
"tailscale.com/control/controlknobs"
+ "tailscale.com/disco"
"tailscale.com/drive"
"tailscale.com/envknob"
"tailscale.com/feature"
@@ -265,6 +266,16 @@ type Config struct {
// Conn25PacketHooks, if non-nil, is used to hook packets for Connectors 2025
// app connector handling logic.
Conn25PacketHooks Conn25PacketHooks
+
+ // DiscoMessageHook, if non-nil, is called when a disco message is
+ // received from a peer. If it returns true, the message is considered
+ // handled and no further processing occurs.
+ DiscoMessageHook func(disco.Message, key.DiscoPublic, key.NodePublic) bool
+
+ // AcceptDiscoFromUnknownPeer, if non-nil, is called when a disco
+ // message arrives from an unknown peer. If it returns true, the
+ // message is accepted.
+ AcceptDiscoFromUnknownPeer func(key.DiscoPublic) bool
}
// NewFakeUserspaceEngine returns a new userspace engine for testing.
@@ -422,17 +433,19 @@ func NewUserspaceEngine(logf logger.Logf, conf Config) (_ Engine, reterr error)
e.RequestStatus()
}
magicsockOpts := magicsock.Options{
- EventBus: e.eventBus,
- Logf: logf,
- Port: conf.ListenPort,
- EndpointsFunc: endpointsFn,
- DERPActiveFunc: e.RequestStatus,
- IdleFunc: e.tundev.IdleDuration,
- NetMon: e.netMon,
- HealthTracker: e.health,
- Metrics: conf.Metrics,
- ControlKnobs: conf.ControlKnobs,
- PeerByKeyFunc: e.PeerByKey,
+ EventBus: e.eventBus,
+ Logf: logf,
+ Port: conf.ListenPort,
+ EndpointsFunc: endpointsFn,
+ DERPActiveFunc: e.RequestStatus,
+ IdleFunc: e.tundev.IdleDuration,
+ NetMon: e.netMon,
+ HealthTracker: e.health,
+ Metrics: conf.Metrics,
+ ControlKnobs: conf.ControlKnobs,
+ PeerByKeyFunc: e.PeerByKey,
+ DiscoMessageHook: conf.DiscoMessageHook,
+ AcceptDiscoFromUnknownPeer: conf.AcceptDiscoFromUnknownPeer,
}
if buildfeatures.HasLazyWG {
magicsockOpts.NoteRecvActivity = e.noteRecvActivity