nameserver

package
v0.11.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 26, 2015 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxDuration = time.Duration(math.MaxInt64)
	MailboxSize = 16
)
View Source
const (
	DefaultLocalDomain   = "weave.local."     // The default name used for the local domain
	DefaultServerPort    = 53                 // The default server port
	DefaultCLICfgFile    = "/etc/resolv.conf" // default "resolv.conf" file to try to load
	DefaultUDPBuflen     = 4096               // bigger than the default 512
	DefaultCacheLen      = 8192               // default cache capacity
	DefaultResolvWorkers = 8                  // default number of resolution workers
	DefaultTimeout       = 5                  // default timeout for DNS resolutions
)
View Source
const (
	CacheNoLocalReplies uint8 = 1 << iota // not found in local network (stored in the cache so we skip another local lookup or some time)
)
View Source
const (
	RDNSDomain = "in-addr.arpa."
)

Variables

This section is empty.

Functions

func LinkLocalMulticastListener

func LinkLocalMulticastListener(ifi *net.Interface) (net.PacketConn, error)

func ListenHTTP added in v0.10.0

func ListenHTTP(version string, server *DNSServer, domain string, db Zone, port int)

Types

type Cache added in v0.10.0

type Cache struct {
	// contains filtered or unexported fields
}

Cache is a thread-safe fixed capacity LRU cache.

func NewCache added in v0.10.0

func NewCache(capacity int, clk clock.Clock) (*Cache, error)

NewCache creates a cache of the given capacity

func (*Cache) Capacity added in v0.10.0

func (c *Cache) Capacity() int

Return the max capacity

func (*Cache) Clear added in v0.10.0

func (c *Cache) Clear()

Clear removes all the entries in the cache

func (*Cache) Get added in v0.10.0

func (c *Cache) Get(request *dns.Msg, maxLen int) (reply *dns.Msg, err error)

Look up for a question's reply from the cache. If no reply is stored in the cache, it returns a `nil` reply and no error.

func (*Cache) Len added in v0.10.0

func (c *Cache) Len() int

Len returns the number of entries in the cache.

func (*Cache) Purge added in v0.10.0

func (c *Cache) Purge()

Purge removes the old elements in the cache

func (*Cache) Put added in v0.10.0

func (c *Cache) Put(request *dns.Msg, reply *dns.Msg, ttl int, flags uint8) int

Add adds a reply to the cache. When `ttl` is equal to `nullTTL`, the cache entry will be valid until the closest TTL in the `reply`

func (*Cache) Remove added in v0.10.0

func (c *Cache) Remove(question *dns.Question)

Remove removes the provided question from the cache.

func (*Cache) String added in v0.11.0

func (c *Cache) String() string

Return the max capacity

type DNSServer added in v0.10.0

type DNSServer struct {
	Zone     Zone
	Iface    *net.Interface
	Upstream *dns.ClientConfig

	Domain     string // the local domain
	ListenAddr string // the address the server is listening at
	// contains filtered or unexported fields
}

func NewDNSServer added in v0.10.0

func NewDNSServer(config DNSServerConfig, zone Zone, iface *net.Interface) (s *DNSServer, err error)

Creates a new DNS server

func (*DNSServer) Start added in v0.10.0

func (s *DNSServer) Start() error

Start the DNS server

func (*DNSServer) Status added in v0.10.0

func (s *DNSServer) Status() string

Return status string

func (*DNSServer) Stop added in v0.10.0

func (s *DNSServer) Stop() error

Perform a graceful shutdown

type DNSServerConfig added in v0.10.0

type DNSServerConfig struct {
	// (Optional) client config file for resolving upstream servers
	UpstreamCfgFile string
	// (Optional) DNS client config for the fallback server(s)
	UpstreamCfg *dns.ClientConfig
	// (Optional) port number (for TCP and UDP)
	Port int
	// (Optional) local domain (ie, "weave.local.")
	LocalDomain string
	// (Optional) cache size
	CacheLen int
	// (Optional) timeout for DNS queries
	Timeout int
	// (Optional) UDP buffer length
	UDPBufLen int
}

type DuplicateError

type DuplicateError struct {
}

func (DuplicateError) Error

func (dup DuplicateError) Error() string

type IPv4 added in v0.11.0

type IPv4 [4]byte

simple IPv4 type that can be used as a key in a map (in contrast with net.IP), used for sets of IPs, etc...

func (IPv4) String added in v0.11.0

func (ip IPv4) String() string

type LookupError

type LookupError string

func (LookupError) Error

func (ops LookupError) Error() string

type LookupFunc added in v0.9.0

type LookupFunc func(ZoneLookup, *dns.Msg, *dns.Question) *dns.Msg

type MDNSAction added in v0.10.0

type MDNSAction func()

type MDNSClient

type MDNSClient struct {
	// contains filtered or unexported fields
}

func NewMDNSClient

func NewMDNSClient() (*MDNSClient, error)

func (*MDNSClient) InsistentLookupInaddr added in v0.11.0

func (client *MDNSClient) InsistentLookupInaddr(inaddr string) ([]ZoneRecord, error)

Perform an insistent lookup for an IP address, returning either a list of names or an error Insistent queries will wait up to `mDNSTimeout` milliseconds for responses

func (*MDNSClient) InsistentLookupName added in v0.11.0

func (client *MDNSClient) InsistentLookupName(name string) ([]ZoneRecord, error)

Perform lookup for a name, returning either a list of IP addresses or an error Insistent queries will wait up to `mDNSTimeout` milliseconds for responses

func (*MDNSClient) LookupInaddr added in v0.9.0

func (client *MDNSClient) LookupInaddr(inaddr string) ([]ZoneRecord, error)

Perform a lookup for an IP address, returning either a name or an error

func (*MDNSClient) LookupName added in v0.9.0

func (client *MDNSClient) LookupName(name string) ([]ZoneRecord, error)

Perform a lookup for a name, returning either an IP address or an error

func (*MDNSClient) ResponseCallback

func (c *MDNSClient) ResponseCallback(r *dns.Msg)

Async - called from dns library multiplexer

func (*MDNSClient) SendQuery

func (c *MDNSClient) SendQuery(name string, querytype uint16, insistent bool, responseCh chan<- *Response)

Async

func (*MDNSClient) Start

func (c *MDNSClient) Start(ifi *net.Interface) (err error)

func (*MDNSClient) Stop added in v0.11.0

func (c *MDNSClient) Stop() error

type MDNSServer

type MDNSServer struct {
	// contains filtered or unexported fields
}

func NewMDNSServer

func NewMDNSServer(zone Zone) (*MDNSServer, error)

Create a new mDNS server Nothing will be done (including port bindings) until you `Start()` the server

func (*MDNSServer) Start

func (s *MDNSServer) Start(ifi *net.Interface) (err error)

Start the mDNS server

func (*MDNSServer) Stop added in v0.10.0

func (s *MDNSServer) Stop() error

Stop the mDNS server

func (*MDNSServer) Zone added in v0.11.0

func (s *MDNSServer) Zone() Zone

type Record

type Record struct {
	// contains filtered or unexported fields
}

A basic record struct (satisfying the ZoneRecord interface)

func (Record) IP

func (r Record) IP() net.IP

func (Record) Name

func (r Record) Name() string

func (Record) Priority added in v0.11.0

func (r Record) Priority() int

func (Record) String added in v0.11.0

func (r Record) String() string

func (Record) TTL added in v0.11.0

func (r Record) TTL() int

func (Record) Weight added in v0.11.0

func (r Record) Weight() int

type Response added in v0.9.0

type Response struct {
	// contains filtered or unexported fields
}

func (Response) Equal added in v0.11.0

func (r Response) Equal(r2 *Response) bool

func (Response) IP added in v0.11.0

func (r Response) IP() net.IP

func (Response) Name added in v0.9.0

func (r Response) Name() string

func (Response) Priority added in v0.11.0

func (r Response) Priority() int

func (Response) String added in v0.11.0

func (r Response) String() string

func (Response) TTL added in v0.11.0

func (r Response) TTL() int

func (Response) Weight added in v0.11.0

func (r Response) Weight() int

type Zone

type Zone interface {
	AddRecord(ident string, name string, ip net.IP) error
	DeleteRecord(ident string, ip net.IP) error
	DeleteRecordsFor(ident string) error
	Domain() string
	ZoneLookup
}

type ZoneCache added in v0.11.0

type ZoneCache interface {
	// Get from the cache
	Get(request *dns.Msg, maxLen int) (reply *dns.Msg, err error)
	// Put in the cache
	Put(request *dns.Msg, reply *dns.Msg, ttl int, flags uint8) int
	// Remove from the cache
	Remove(question *dns.Question)
	// Purge all expired entries from the cache
	Purge()
	// Remove all entries
	Clear()
	// Return the cache length
	Len() int
	// Return the max capacity
	Capacity() int
}

The cache interface

type ZoneDb

type ZoneDb struct {
	// contains filtered or unexported fields
}

Very simple data structure for now, with linear searching. TODO: make more sophisticated to improve performance.

func NewZoneDb added in v0.11.0

func NewZoneDb(domain string) *ZoneDb

func (*ZoneDb) AddRecord

func (zone *ZoneDb) AddRecord(ident string, name string, ip net.IP) error

func (*ZoneDb) ContainerDied added in v0.10.0

func (zone *ZoneDb) ContainerDied(ident string) error

func (*ZoneDb) DeleteRecord

func (zone *ZoneDb) DeleteRecord(ident string, ip net.IP) error

func (*ZoneDb) DeleteRecordsFor

func (zone *ZoneDb) DeleteRecordsFor(ident string) error

func (*ZoneDb) Domain added in v0.11.0

func (zone *ZoneDb) Domain() string

func (*ZoneDb) LookupInaddr added in v0.9.0

func (zone *ZoneDb) LookupInaddr(inaddr string) ([]ZoneRecord, error)

func (*ZoneDb) LookupName added in v0.9.0

func (zone *ZoneDb) LookupName(name string) ([]ZoneRecord, error)

func (*ZoneDb) String added in v0.10.0

func (zone *ZoneDb) String() string

type ZoneLookup added in v0.11.0

type ZoneLookup interface {
	// Lookup for a name
	LookupName(name string) ([]ZoneRecord, error)
	// Lookup for an address
	LookupInaddr(inaddr string) ([]ZoneRecord, error)
}

type ZoneObserver added in v0.11.0

type ZoneObserver interface {
	// Observe anything that affects a particular name in the zone
	ObserveName(name string, observer ZoneRecordObserver) error
	// Observe anything that affects a particular IP in the zone
	ObserveInaddr(inaddr string, observer ZoneRecordObserver) error
}

type ZoneRecord added in v0.11.0

type ZoneRecord interface {
	Name() string  // The name for this IP
	IP() net.IP    // The IP (v4) address
	Priority() int // The priority
	Weight() int   // The weight
	TTL() int      // TTL
}

A zone record Note: we will try to keep all the zone records information is concentrated here. Maybe not all queries will

use things like priorities or weights, but we do not want to create a hierarchy for dealing with all
possible queries...

type ZoneRecordObserver added in v0.11.0

type ZoneRecordObserver func()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL