From 9dee6adfab0024f2b0e2de48e5fb835e4fbc38a3 Mon Sep 17 00:00:00 2001 From: Tom DNetto Date: Thu, 14 Apr 2022 14:55:23 -0700 Subject: [PATCH] cmd/tailscaled,ipn/ipnlocal,wgengine/...: pass dns.Manager into netstack Needed for a following commit which moves magicDNS handling into netstack. Signed-off-by: Tom DNetto --- cmd/tailscaled/tailscaled.go | 6 +++--- ipn/ipnlocal/local.go | 4 ++-- ipn/ipnlocal/peerapi.go | 2 +- wgengine/netstack/netstack.go | 5 ++++- wgengine/userspace.go | 8 ++++---- wgengine/watchdog.go | 2 +- 6 files changed, 15 insertions(+), 12 deletions(-) diff --git a/cmd/tailscaled/tailscaled.go b/cmd/tailscaled/tailscaled.go index 0570f07db..9ab1b9553 100644 --- a/cmd/tailscaled/tailscaled.go +++ b/cmd/tailscaled/tailscaled.go @@ -342,7 +342,7 @@ func run() error { } if debugMux != nil { if ig, ok := e.(wgengine.InternalsGetter); ok { - if _, mc, ok := ig.GetInternals(); ok { + if _, mc, _, ok := ig.GetInternals(); ok { debugMux.HandleFunc("/debug/magicsock", mc.ServeHTTPDebug) } } @@ -566,11 +566,11 @@ func runDebugServer(mux *http.ServeMux, addr string) { } func newNetstack(logf logger.Logf, dialer *tsdial.Dialer, e wgengine.Engine) (*netstack.Impl, error) { - tunDev, magicConn, ok := e.(wgengine.InternalsGetter).GetInternals() + tunDev, magicConn, dns, ok := e.(wgengine.InternalsGetter).GetInternals() if !ok { return nil, fmt.Errorf("%T is not a wgengine.InternalsGetter", e) } - return netstack.Create(logf, tunDev, e, magicConn, dialer) + return netstack.Create(logf, tunDev, e, magicConn, dialer, dns) } // mustStartProxyListeners creates listeners for local SOCKS and HTTP diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go index 5cc66b061..3fea28c49 100644 --- a/ipn/ipnlocal/local.go +++ b/ipn/ipnlocal/local.go @@ -249,7 +249,7 @@ func NewLocalBackend(logf logger.Logf, logid string, store ipn.StateStore, diale wiredPeerAPIPort := false if ig, ok := e.(wgengine.InternalsGetter); ok { - if tunWrap, _, ok := ig.GetInternals(); ok { + if tunWrap, _, _, ok := ig.GetInternals(); ok { tunWrap.PeerAPIPort = b.GetPeerAPIPort wiredPeerAPIPort = true } @@ -3287,7 +3287,7 @@ func (b *LocalBackend) magicConn() (*magicsock.Conn, error) { if !ok { return nil, errors.New("engine isn't InternalsGetter") } - _, mc, ok := ig.GetInternals() + _, mc, _, ok := ig.GetInternals() if !ok { return nil, errors.New("failed to get internals") } diff --git a/ipn/ipnlocal/peerapi.go b/ipn/ipnlocal/peerapi.go index 64017c365..0031ecc4c 100644 --- a/ipn/ipnlocal/peerapi.go +++ b/ipn/ipnlocal/peerapi.go @@ -864,7 +864,7 @@ func (h *peerAPIHandler) handleServeMagicsock(w http.ResponseWriter, r *http.Req } eng := h.ps.b.e if ig, ok := eng.(wgengine.InternalsGetter); ok { - if _, mc, ok := ig.GetInternals(); ok { + if _, mc, _, ok := ig.GetInternals(); ok { mc.ServeHTTPDebug(w, r) return } diff --git a/wgengine/netstack/netstack.go b/wgengine/netstack/netstack.go index 7733ffa6b..9e229bfe8 100644 --- a/wgengine/netstack/netstack.go +++ b/wgengine/netstack/netstack.go @@ -37,6 +37,7 @@ import ( "inet.af/netaddr" "tailscale.com/envknob" "tailscale.com/ipn/ipnlocal" + "tailscale.com/net/dns" "tailscale.com/net/packet" "tailscale.com/net/tsaddr" "tailscale.com/net/tsdial" @@ -101,6 +102,7 @@ type Impl struct { ctx context.Context // alive until Close ctxCancel context.CancelFunc // called on Close lb *ipnlocal.LocalBackend // or nil + dns *dns.Manager peerapiPort4Atomic uint32 // uint16 port number for IPv4 peerapi peerapiPort6Atomic uint32 // uint16 port number for IPv6 peerapi @@ -127,7 +129,7 @@ const nicID = 1 const mtu = 1500 // Create creates and populates a new Impl. -func Create(logf logger.Logf, tundev *tstun.Wrapper, e wgengine.Engine, mc *magicsock.Conn, dialer *tsdial.Dialer) (*Impl, error) { +func Create(logf logger.Logf, tundev *tstun.Wrapper, e wgengine.Engine, mc *magicsock.Conn, dialer *tsdial.Dialer, dns *dns.Manager) (*Impl, error) { if mc == nil { return nil, errors.New("nil magicsock.Conn") } @@ -180,6 +182,7 @@ func Create(logf logger.Logf, tundev *tstun.Wrapper, e wgengine.Engine, mc *magi mc: mc, dialer: dialer, connsOpenBySubnetIP: make(map[netaddr.IP]int), + dns: dns, } ns.ctx, ns.ctxCancel = context.WithCancel(context.Background()) ns.atomicIsLocalIPFunc.Store(tsaddr.NewContainsIPFunc(nil)) diff --git a/wgengine/userspace.go b/wgengine/userspace.go index f94692720..06d4f5b6b 100644 --- a/wgengine/userspace.go +++ b/wgengine/userspace.go @@ -142,11 +142,11 @@ type userspaceEngine struct { // InternalsGetter is implemented by Engines that can export their internals. type InternalsGetter interface { - GetInternals() (_ *tstun.Wrapper, _ *magicsock.Conn, ok bool) + GetInternals() (_ *tstun.Wrapper, _ *magicsock.Conn, _ *dns.Manager, ok bool) } -func (e *userspaceEngine) GetInternals() (_ *tstun.Wrapper, _ *magicsock.Conn, ok bool) { - return e.tundev, e.magicConn, true +func (e *userspaceEngine) GetInternals() (_ *tstun.Wrapper, _ *magicsock.Conn, _ *dns.Manager, ok bool) { + return e.tundev, e.magicConn, e.dns, true } // ResolvingEngine is implemented by Engines that have DNS resolvers. @@ -244,7 +244,7 @@ func IsNetstack(e Engine) bool { if !ok { return false } - tw, _, ok := ig.GetInternals() + tw, _, _, ok := ig.GetInternals() if !ok { return false } diff --git a/wgengine/watchdog.go b/wgengine/watchdog.go index dc10624e6..8b4972afb 100644 --- a/wgengine/watchdog.go +++ b/wgengine/watchdog.go @@ -133,7 +133,7 @@ func (e *watchdogEngine) WhoIsIPPort(ipp netaddr.IPPort) (tsIP netaddr.IP, ok bo func (e *watchdogEngine) Close() { e.watchdog("Close", e.wrap.Close) } -func (e *watchdogEngine) GetInternals() (tw *tstun.Wrapper, c *magicsock.Conn, ok bool) { +func (e *watchdogEngine) GetInternals() (tw *tstun.Wrapper, c *magicsock.Conn, d *dns.Manager, ok bool) { if ig, ok := e.wrap.(InternalsGetter); ok { return ig.GetInternals() }