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 <tom@tailscale.com>
pull/4590/head
Tom DNetto 2 years ago committed by Tom
parent 5b85f848dd
commit 9dee6adfab

@ -342,7 +342,7 @@ func run() error {
} }
if debugMux != nil { if debugMux != nil {
if ig, ok := e.(wgengine.InternalsGetter); ok { 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) 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) { 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 { if !ok {
return nil, fmt.Errorf("%T is not a wgengine.InternalsGetter", e) 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 // mustStartProxyListeners creates listeners for local SOCKS and HTTP

@ -249,7 +249,7 @@ func NewLocalBackend(logf logger.Logf, logid string, store ipn.StateStore, diale
wiredPeerAPIPort := false wiredPeerAPIPort := false
if ig, ok := e.(wgengine.InternalsGetter); ok { if ig, ok := e.(wgengine.InternalsGetter); ok {
if tunWrap, _, ok := ig.GetInternals(); ok { if tunWrap, _, _, ok := ig.GetInternals(); ok {
tunWrap.PeerAPIPort = b.GetPeerAPIPort tunWrap.PeerAPIPort = b.GetPeerAPIPort
wiredPeerAPIPort = true wiredPeerAPIPort = true
} }
@ -3287,7 +3287,7 @@ func (b *LocalBackend) magicConn() (*magicsock.Conn, error) {
if !ok { if !ok {
return nil, errors.New("engine isn't InternalsGetter") return nil, errors.New("engine isn't InternalsGetter")
} }
_, mc, ok := ig.GetInternals() _, mc, _, ok := ig.GetInternals()
if !ok { if !ok {
return nil, errors.New("failed to get internals") return nil, errors.New("failed to get internals")
} }

@ -864,7 +864,7 @@ func (h *peerAPIHandler) handleServeMagicsock(w http.ResponseWriter, r *http.Req
} }
eng := h.ps.b.e eng := h.ps.b.e
if ig, ok := eng.(wgengine.InternalsGetter); ok { if ig, ok := eng.(wgengine.InternalsGetter); ok {
if _, mc, ok := ig.GetInternals(); ok { if _, mc, _, ok := ig.GetInternals(); ok {
mc.ServeHTTPDebug(w, r) mc.ServeHTTPDebug(w, r)
return return
} }

@ -37,6 +37,7 @@ import (
"inet.af/netaddr" "inet.af/netaddr"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/ipn/ipnlocal" "tailscale.com/ipn/ipnlocal"
"tailscale.com/net/dns"
"tailscale.com/net/packet" "tailscale.com/net/packet"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
"tailscale.com/net/tsdial" "tailscale.com/net/tsdial"
@ -101,6 +102,7 @@ type Impl struct {
ctx context.Context // alive until Close ctx context.Context // alive until Close
ctxCancel context.CancelFunc // called on Close ctxCancel context.CancelFunc // called on Close
lb *ipnlocal.LocalBackend // or nil lb *ipnlocal.LocalBackend // or nil
dns *dns.Manager
peerapiPort4Atomic uint32 // uint16 port number for IPv4 peerapi peerapiPort4Atomic uint32 // uint16 port number for IPv4 peerapi
peerapiPort6Atomic uint32 // uint16 port number for IPv6 peerapi peerapiPort6Atomic uint32 // uint16 port number for IPv6 peerapi
@ -127,7 +129,7 @@ const nicID = 1
const mtu = 1500 const mtu = 1500
// Create creates and populates a new Impl. // 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 { if mc == nil {
return nil, errors.New("nil magicsock.Conn") 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, mc: mc,
dialer: dialer, dialer: dialer,
connsOpenBySubnetIP: make(map[netaddr.IP]int), connsOpenBySubnetIP: make(map[netaddr.IP]int),
dns: dns,
} }
ns.ctx, ns.ctxCancel = context.WithCancel(context.Background()) ns.ctx, ns.ctxCancel = context.WithCancel(context.Background())
ns.atomicIsLocalIPFunc.Store(tsaddr.NewContainsIPFunc(nil)) ns.atomicIsLocalIPFunc.Store(tsaddr.NewContainsIPFunc(nil))

@ -142,11 +142,11 @@ type userspaceEngine struct {
// InternalsGetter is implemented by Engines that can export their internals. // InternalsGetter is implemented by Engines that can export their internals.
type InternalsGetter interface { 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) { func (e *userspaceEngine) GetInternals() (_ *tstun.Wrapper, _ *magicsock.Conn, _ *dns.Manager, ok bool) {
return e.tundev, e.magicConn, true return e.tundev, e.magicConn, e.dns, true
} }
// ResolvingEngine is implemented by Engines that have DNS resolvers. // ResolvingEngine is implemented by Engines that have DNS resolvers.
@ -244,7 +244,7 @@ func IsNetstack(e Engine) bool {
if !ok { if !ok {
return false return false
} }
tw, _, ok := ig.GetInternals() tw, _, _, ok := ig.GetInternals()
if !ok { if !ok {
return false return false
} }

@ -133,7 +133,7 @@ func (e *watchdogEngine) WhoIsIPPort(ipp netaddr.IPPort) (tsIP netaddr.IP, ok bo
func (e *watchdogEngine) Close() { func (e *watchdogEngine) Close() {
e.watchdog("Close", e.wrap.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 { if ig, ok := e.wrap.(InternalsGetter); ok {
return ig.GetInternals() return ig.GetInternals()
} }

Loading…
Cancel
Save