From 075fb93e69bf2093d08f1a7f950c98db24681a28 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 31 Mar 2021 22:13:23 -0700 Subject: [PATCH] net/dns/resolver: remove the Config struct. In preparation for reintroducing a runtime reconfig Config struct. Signed-off-by: David Anderson --- net/dns/resolver/tsdns.go | 53 +++++++++------------------------- net/dns/resolver/tsdns_test.go | 18 ++++++------ wgengine/userspace.go | 6 +--- 3 files changed, 23 insertions(+), 54 deletions(-) diff --git a/net/dns/resolver/tsdns.go b/net/dns/resolver/tsdns.go index 569575452..3d04777ce 100644 --- a/net/dns/resolver/tsdns.go +++ b/net/dns/resolver/tsdns.go @@ -82,34 +82,18 @@ type Resolver struct { dnsMap *Map } -// Config is the set of configuration options for a Resolver. -type Config struct { - // Logf is the logger to use throughout the Resolver. - Logf logger.Logf - // Forward determines whether the resolver will forward packets to - // nameservers set with SetUpstreams if the domain name is not of a Tailscale node. - Forward bool - // LinkMonitor optionally provides a link monitor to use to rebind - // connections on link changes. - // If nil, rebinds are not performend. - LinkMonitor *monitor.Mon -} - -// New constructs a resolver associated with the given root domain. -// The root domain must be in canonical form (with a trailing period). -func New(config Config) *Resolver { +// New returns a new resolver. +// linkMon optionally specifies a link monitor to use for socket rebinding. +func New(logf logger.Logf, linkMon *monitor.Mon) *Resolver { r := &Resolver{ - logf: logger.WithPrefix(config.Logf, "dns: "), - linkMon: config.LinkMonitor, + logf: logger.WithPrefix(logf, "dns: "), + linkMon: linkMon, queue: make(chan Packet, queueSize), responses: make(chan Packet), errors: make(chan error), closed: make(chan struct{}), } - - if config.Forward { - r.forwarder = newForwarder(r.logf, r.responses) - } + r.forwarder = newForwarder(r.logf, r.responses) if r.linkMon != nil { r.unregLinkMon = r.linkMon.RegisterChangeCallback(r.onLinkMonitorChange) } @@ -145,10 +129,7 @@ func (r *Resolver) Close() { r.unregLinkMon() } - if r.forwarder != nil { - r.forwarder.Close() - } - + r.forwarder.Close() r.wg.Wait() } @@ -156,9 +137,7 @@ func (r *Resolver) onLinkMonitorChange(changed bool, state *interfaces.State) { if !changed { return } - if r.forwarder != nil { - r.forwarder.rebindFromNetworkChange() - } + r.forwarder.rebindFromNetworkChange() } // SetMap sets the resolver's DNS map, taking ownership of it. @@ -173,9 +152,7 @@ func (r *Resolver) SetMap(m *Map) { // SetUpstreams sets the addresses of the resolver's // upstream nameservers, taking ownership of the argument. func (r *Resolver) SetUpstreams(upstreams []net.Addr) { - if r.forwarder != nil { - r.forwarder.setUpstreams(upstreams) - } + r.forwarder.setUpstreams(upstreams) r.logf("set upstreams: %v", upstreams) } @@ -307,14 +284,10 @@ func (r *Resolver) poll() { out, err := r.respond(packet.Payload) if err == errNotOurName { - if r.forwarder != nil { - err = r.forwarder.forward(packet) - if err == nil { - // forward will send response into r.responses, nothing to do. - continue - } - } else { - err = errNotForwarding + err = r.forwarder.forward(packet) + if err == nil { + // forward will send response into r.responses, nothing to do. + continue } } diff --git a/net/dns/resolver/tsdns_test.go b/net/dns/resolver/tsdns_test.go index f673108b4..fc1491b51 100644 --- a/net/dns/resolver/tsdns_test.go +++ b/net/dns/resolver/tsdns_test.go @@ -194,7 +194,7 @@ func TestRDNSNameToIPv6(t *testing.T) { } func TestResolve(t *testing.T) { - r := New(Config{Logf: t.Logf, Forward: false}) + r := New(t.Logf, nil) r.SetMap(dnsMap) if err := r.Start(); err != nil { @@ -240,7 +240,7 @@ func TestResolve(t *testing.T) { } func TestResolveReverse(t *testing.T) { - r := New(Config{Logf: t.Logf, Forward: false}) + r := New(t.Logf, nil) r.SetMap(dnsMap) if err := r.Start(); err != nil { @@ -318,7 +318,7 @@ func TestDelegate(t *testing.T) { return } - r := New(Config{Logf: t.Logf, Forward: true}) + r := New(t.Logf, nil) r.SetMap(dnsMap) r.SetUpstreams([]net.Addr{ v4server.PacketConn.LocalAddr(), @@ -397,7 +397,7 @@ func TestDelegateCollision(t *testing.T) { } defer server.Shutdown() - r := New(Config{Logf: t.Logf, Forward: true}) + r := New(t.Logf, nil) r.SetMap(dnsMap) r.SetUpstreams([]net.Addr{server.PacketConn.LocalAddr()}) @@ -463,7 +463,7 @@ func TestDelegateCollision(t *testing.T) { } func TestConcurrentSetMap(t *testing.T) { - r := New(Config{Logf: t.Logf, Forward: false}) + r := New(t.Logf, nil) if err := r.Start(); err != nil { t.Fatalf("start: %v", err) @@ -499,7 +499,7 @@ func TestConcurrentSetUpstreams(t *testing.T) { } defer server.Shutdown() - r := New(Config{Logf: t.Logf, Forward: true}) + r := New(t.Logf, nil) r.SetMap(dnsMap) if err := r.Start(); err != nil { @@ -670,7 +670,7 @@ var emptyResponse = []byte{ } func TestFull(t *testing.T) { - r := New(Config{Logf: t.Logf, Forward: false}) + r := New(t.Logf, nil) r.SetMap(dnsMap) if err := r.Start(); err != nil { @@ -709,7 +709,7 @@ func TestFull(t *testing.T) { } func TestAllocs(t *testing.T) { - r := New(Config{Logf: t.Logf, Forward: false}) + r := New(t.Logf, nil) r.SetMap(dnsMap) if err := r.Start(); err != nil { @@ -778,7 +778,7 @@ func BenchmarkFull(b *testing.B) { } defer server.Shutdown() - r := New(Config{Logf: b.Logf, Forward: true}) + r := New(b.Logf, nil) r.SetMap(dnsMap) r.SetUpstreams([]net.Addr{server.PacketConn.LocalAddr()}) diff --git a/wgengine/userspace.go b/wgengine/userspace.go index 3f451f2a1..35195dd5b 100644 --- a/wgengine/userspace.go +++ b/wgengine/userspace.go @@ -219,11 +219,7 @@ func NewUserspaceEngine(logf logger.Logf, conf Config) (_ Engine, reterr error) e.linkMonOwned = true } - e.resolver = resolver.New(resolver.Config{ - Logf: logf, - Forward: true, - LinkMonitor: e.linkMon, - }) + e.resolver = resolver.New(logf, e.linkMon) logf("link state: %+v", e.linkMon.InterfaceState())