From 10f37db9daf3aac61d25c703125e0a098d03ce09 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Tue, 31 Mar 2015 12:04:31 +0100 Subject: [PATCH] tidy up DNSServer fields - make Zone, Iface and Upstream public - this is safe and makes sense since all are immutable, and the former two are passed to the constructor and are thus known anyway, and the latter is derived from external information - remove IfaceName - we can just use Iface instead - log Upstream on startup --- nameserver/server.go | 44 +++++++++++++++++++------------------------- weavedns/main.go | 1 + 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/nameserver/server.go b/nameserver/server.go index c6efbc3d..f0b52479 100644 --- a/nameserver/server.go +++ b/nameserver/server.go @@ -18,8 +18,7 @@ const ( DefaultCacheLen = 8192 // default cache capacity DefaultResolvWorkers = 8 // default number of resolution workers DefaultTimeout = 5 // default timeout for DNS resolutions - DefaultIfaceName = "default interface" - DefaultResolvTries = 3 // max # of times a worker tries to resolve a query + DefaultResolvTries = 3 // max # of times a worker tries to resolve a query ) type DNSServerConfig struct { @@ -68,32 +67,30 @@ func (proto dnsProtocol) GetNewClient(bufsize int) *dns.Client { } type DNSServer struct { + Zone Zone + Iface *net.Interface + Upstream *dns.ClientConfig udpSrv *dns.Server tcpSrv *dns.Server mdnsCli *MDNSClient mdnsSrv *MDNSServer cache *Cache - zone Zone - iface *net.Interface - upstream *dns.ClientConfig timeout int udpBuf int listenersWg *sync.WaitGroup Domain string // the local domain - IfaceName string // the interface where mDNS is working on ListenAddr string // the address the server is listening at } // Creates a new DNS server func NewDNSServer(config DNSServerConfig, zone Zone, iface *net.Interface) (s *DNSServer, err error) { s = &DNSServer{ - zone: zone, - iface: iface, + Zone: zone, + Iface: iface, listenersWg: new(sync.WaitGroup), Domain: DefaultLocalDomain, - IfaceName: DefaultIfaceName, ListenAddr: fmt.Sprintf(":%d", DefaultServerPort), } @@ -105,13 +102,13 @@ func NewDNSServer(config DNSServerConfig, zone Zone, iface *net.Interface) (s *D s.Domain = config.LocalDomain } if config.UpstreamCfg != nil { - s.upstream = config.UpstreamCfg + s.Upstream = config.UpstreamCfg } else { cfgFile := DefaultCLICfgFile if len(config.UpstreamCfgFile) > 0 { cfgFile = config.UpstreamCfgFile } - if s.upstream, err = dns.ClientConfigFromFile(cfgFile); err != nil { + if s.Upstream, err = dns.ClientConfigFromFile(cfgFile); err != nil { return nil, err } } @@ -125,13 +122,10 @@ func NewDNSServer(config DNSServerConfig, zone Zone, iface *net.Interface) (s *D if err != nil { return } - s.mdnsSrv, err = NewMDNSServer(s.zone) + s.mdnsSrv, err = NewMDNSServer(s.Zone) if err != nil { return } - if iface != nil { - s.IfaceName = iface.Name - } cacheLen := DefaultCacheLen if config.CacheLen > 0 { cacheLen = config.CacheLen @@ -146,8 +140,8 @@ func NewDNSServer(config DNSServerConfig, zone Zone, iface *net.Interface) (s *D // (we use the same protocol for asking upstream servers) mux := func(proto dnsProtocol) *dns.ServeMux { m := dns.NewServeMux() - m.HandleFunc(s.Domain, s.queryHandler([]Lookup{s.zone, s.mdnsCli}, proto)) - m.HandleFunc(RDNSDomain, s.rdnsHandler([]Lookup{s.zone, s.mdnsCli}, proto)) + m.HandleFunc(s.Domain, s.queryHandler([]Lookup{s.Zone, s.mdnsCli}, proto)) + m.HandleFunc(RDNSDomain, s.rdnsHandler([]Lookup{s.Zone, s.mdnsCli}, proto)) m.HandleFunc(".", s.notUsHandler(proto)) return m } @@ -160,10 +154,10 @@ func NewDNSServer(config DNSServerConfig, zone Zone, iface *net.Interface) (s *D // Start the DNS server func (s *DNSServer) Start() error { - Info.Printf("Using mDNS on %s", s.IfaceName) - err := s.mdnsCli.Start(s.iface) + Info.Printf("Using mDNS on %v", s.Iface) + err := s.mdnsCli.Start(s.Iface) CheckFatal(err) - err = s.mdnsSrv.Start(s.iface, s.Domain) + err = s.mdnsSrv.Start(s.Iface, s.Domain) CheckFatal(err) s.listenersWg.Add(2) @@ -198,9 +192,9 @@ func (s *DNSServer) Status() string { var buf bytes.Buffer fmt.Fprintln(&buf, "Local domain", s.Domain) fmt.Fprintln(&buf, "Listen address", s.ListenAddr) - fmt.Fprintln(&buf, "mDNS interface", s.iface) - fmt.Fprintln(&buf, "Fallback DNS config", s.upstream) - fmt.Fprintf(&buf, "Zone database:\n%s", s.zone) + fmt.Fprintln(&buf, "mDNS interface", s.Iface) + fmt.Fprintln(&buf, "Fallback DNS config", s.Upstream) + fmt.Fprintf(&buf, "Zone database:\n%s", s.Zone) return buf.String() } @@ -334,8 +328,8 @@ func (s *DNSServer) notUsHandler(proto dnsProtocol) dns.HandlerFunc { rcopy.SetEdns0(uint16(maxLen), false) Debug.Printf("[dns msgid %d] Fallback query: %+v [%s, max:%d bytes]", rcopy.MsgHdr.Id, q, proto, maxLen) - for _, server := range s.upstream.Servers { - reply, _, err := dnsClient.Exchange(rcopy, fmt.Sprintf("%s:%s", server, s.upstream.Port)) + for _, server := range s.Upstream.Servers { + reply, _, err := dnsClient.Exchange(rcopy, fmt.Sprintf("%s:%s", server, s.Upstream.Port)) if err != nil { Debug.Printf("[dns msgid %d] Network error trying %s (%s)", r.MsgHdr.Id, server, err) diff --git a/weavedns/main.go b/weavedns/main.go index e7c76e33..66b68021 100644 --- a/weavedns/main.go +++ b/weavedns/main.go @@ -87,6 +87,7 @@ func main() { if err != nil { Error.Fatal("Failed to initialize the WeaveDNS server", err) } + Info.Println("Upstream", srv.Upstream) Debug.Printf("Starting the signals handler") go handleSignals(srv)