Skip to content

Commit

Permalink
net/dns: add a Primary field to OSConfig.
Browse files Browse the repository at this point in the history
Currently ignored.

Signed-off-by: David Anderson <danderson@tailscale.com>
  • Loading branch information
danderson committed Apr 5, 2021
1 parent b2a597b commit de6dc4c
Show file tree
Hide file tree
Showing 9 changed files with 37 additions and 44 deletions.
8 changes: 0 additions & 8 deletions net/dns/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,3 @@ type Config struct {
// return NXDOMAIN.
AuthoritativeSuffixes []string
}

// OSConfig is an OS DNS configuration.
type OSConfig struct {
// Nameservers are the IP addresses of the nameservers to use.
Nameservers []netaddr.IP
// Domains are the search domains to use.
Domains []string
}
4 changes: 2 additions & 2 deletions net/dns/direct.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,8 @@ func (m directManager) SetDNS(config OSConfig) error {
return nil
}

func (m directManager) RoutingMode() RoutingMode {
return RoutingModeNone
func (m directManager) SupportsSplitDNS() bool {
return false
}

func (m directManager) Close() error {
Expand Down
4 changes: 2 additions & 2 deletions net/dns/manager_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ func (m windowsManager) SetDNS(config OSConfig) error {
return nil
}

func (m windowsManager) RoutingMode() RoutingMode {
return RoutingModeNone
func (m windowsManager) SupportsSplitDNS() bool {
return false
}

func (m windowsManager) Close() error {
Expand Down
2 changes: 1 addition & 1 deletion net/dns/nm.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ func (m nmManager) SetDNS(config OSConfig) error {
return nil
}

func (m nmManager) RoutingMode() RoutingMode { return RoutingModeNone }
func (m nmManager) SupportsSplitDNS() bool { return false }

func (m nmManager) Close() error {
return m.SetDNS(OSConfig{})
Expand Down
6 changes: 3 additions & 3 deletions net/dns/noop.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ package dns

type noopManager struct{}

func (m noopManager) SetDNS(OSConfig) error { return nil }
func (m noopManager) RoutingMode() RoutingMode { return RoutingModeNone }
func (m noopManager) Close() error { return nil }
func (m noopManager) SetDNS(OSConfig) error { return nil }
func (m noopManager) SupportsSplitDNS() bool { return false }
func (m noopManager) Close() error { return nil }

func NewNoopManager() noopManager {
return noopManager{}
Expand Down
39 changes: 20 additions & 19 deletions net/dns/osconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,7 @@

package dns

// DNSRoutingMode describes the type of per-domain DNS routing that
// the OS is capable of.
type RoutingMode int

const (
// RoutingModeNone means the OS only supports setting a single
// primary set of DNS resolvers.
RoutingModeNone RoutingMode = iota
// RoutingModeSingle means the OS supports a set of
// primary resolvers, as well as one set of additional per-suffix
// resolvers per network interface.
RoutingModeSingle
// RoutingModeMulti means the OS supports a set of primary
// resolvers, as well as an arbitrary overlay of DNS routes.
RoutingModeMulti
)
import "inet.af/netaddr"

// An OSConfigurator applies DNS settings to the operating system.
type OSConfigurator interface {
Expand All @@ -28,9 +13,25 @@ type OSConfigurator interface {
// configuration is removed.
// SetDNS must not be called after Close.
SetDNS(cfg OSConfig) error
// DNSRoutingMode reports the DNS routing capabilities of this OS
// configurator.
RoutingMode() RoutingMode
// SupportsSplitDNS reports whether the configurator is capable of
// installing a resolver only for specific DNS suffixes. If false,
// the configurator can only set a global resolver.
SupportsSplitDNS() bool
// Close removes Tailscale-related DNS configuration from the OS.
Close() error
}

// OSConfig is an OS DNS configuration.
type OSConfig struct {
// Nameservers are the IP addresses of the nameservers to use.
Nameservers []netaddr.IP
// Domains are the search domains to use.
Domains []string
// Primary indicates whether to set Nameservers as the
// primary/"default" resolvers for the system.
// If false, Nameservers will be set as resolvers for Domains
// only.
// Primary=false is only allowed for OSConfigurators that report
// SupportsSplitDNS.
Primary bool
}
4 changes: 2 additions & 2 deletions net/dns/resolvconf.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,8 @@ func (m resolvconfManager) SetDNS(config OSConfig) error {
return nil
}

func (m resolvconfManager) RoutingMode() RoutingMode {
return RoutingModeNone
func (m resolvconfManager) SupportsSplitDNS() bool {
return false
}

func (m resolvconfManager) Close() error {
Expand Down
4 changes: 2 additions & 2 deletions net/dns/resolved.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,8 @@ func (m resolvedManager) SetDNS(config OSConfig) error {
return nil
}

func (m resolvedManager) RoutingMode() RoutingMode {
return RoutingModeNone
func (m resolvedManager) SupportsSplitDNS() bool {
return false
}

func (m resolvedManager) Close() error {
Expand Down
10 changes: 5 additions & 5 deletions wgengine/router/callback.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import (
// Mainly used as a shim for OSes that want to set both network and
// DNS configuration simultaneously (iOS, android).
type CallbackRouter struct {
SetBoth func(rcfg *Config, dcfg *dns.OSConfig) error
DNSMode dns.RoutingMode
SetBoth func(rcfg *Config, dcfg *dns.OSConfig) error
SplitDNS bool

mu sync.Mutex // protects all the following
rcfg *Config // last applied router config
Expand Down Expand Up @@ -44,9 +44,9 @@ func (r *CallbackRouter) SetDNS(dcfg dns.OSConfig) error {
return r.SetBoth(r.rcfg, r.dcfg)
}

// RoutingMode implements dns.OSConfigurator.
func (r *CallbackRouter) RoutingMode() dns.RoutingMode {
return r.DNSMode
// SupportsSplitDNS implements dns.OSConfigurator.
func (r *CallbackRouter) SupportsSplitDNS() bool {
return r.SplitDNS
}

func (r *CallbackRouter) Close() error {
Expand Down

0 comments on commit de6dc4c

Please sign in to comment.