Documentation ¶
Overview ¶
Package dhcpsvc contains the AdGuard Home DHCP service.
TODO(e.burkov): Add tests.
Index ¶
- type Config
- type Empty
- func (Empty) AddLease(_ *Lease) (err error)
- func (Empty) Config() (conf *Config)
- func (Empty) EditLease(_, _ *Lease) (err error)
- func (Empty) Enabled() (ok bool)
- func (Empty) HostByIP(_ netip.Addr) (host string)
- func (Empty) IPByHost(_ string) (ip netip.Addr)
- func (Empty) Leases() (leases []*Lease)
- func (Empty) MACByIP(_ netip.Addr) (mac net.HardwareAddr)
- func (Empty) RemoveLease(_ *Lease) (err error)
- func (Empty) Reset() (err error)
- func (Empty) Shutdown(_ context.Context) (err error)
- func (Empty) Start() (err error)
- type IPv4Config
- type IPv6Config
- type Interface
- type InterfaceConfig
- type Lease
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct { // Interfaces stores configurations of DHCP server specific for the network // interface identified by its name. Interfaces map[string]*InterfaceConfig // LocalDomainName is the top-level domain name to use for resolving DHCP // clients' hostnames. LocalDomainName string // ICMPTimeout is the timeout for checking another DHCP server's presence. ICMPTimeout time.Duration // Enabled is the state of the service, whether it is enabled or not. Enabled bool }
Config is the configuration for the DHCP service.
type Empty ¶
type Empty struct{}
Empty is an Interface implementation that does nothing.
func (Empty) MACByIP ¶
func (Empty) MACByIP(_ netip.Addr) (mac net.HardwareAddr)
MACByIP implements the Interface interface for Empty.
func (Empty) RemoveLease ¶
RemoveLease implements the Interface interface for Empty.
type IPv4Config ¶
type IPv4Config struct { // GatewayIP is the IPv4 address of the network's gateway. It is used as // the default gateway for DHCP clients and also used in calculating the // network-specific broadcast address. GatewayIP netip.Addr // SubnetMask is the IPv4 subnet mask of the network. It should be a valid // IPv4 subnet mask (i.e. all 1s followed by all 0s). SubnetMask netip.Addr // RangeStart is the first address in the range to assign to DHCP clients. RangeStart netip.Addr // RangeEnd is the last address in the range to assign to DHCP clients. RangeEnd netip.Addr // Options is the list of DHCP options to send to DHCP clients. Options layers.DHCPOptions // LeaseDuration is the TTL of a DHCP lease. LeaseDuration time.Duration // Enabled is the state of the DHCPv4 service, whether it is enabled or not // on the specific interface. Enabled bool }
IPv4Config is the interface-specific configuration for DHCPv4.
type IPv6Config ¶
type IPv6Config struct { // RangeStart is the first address in the range to assign to DHCP clients. RangeStart netip.Addr // Options is the list of DHCP options to send to DHCP clients. Options layers.DHCPOptions // LeaseDuration is the TTL of a DHCP lease. LeaseDuration time.Duration // RASlaacOnly defines whether the DHCP clients should only use SLAAC for // address assignment. RASLAACOnly bool // RAAllowSlaac defines whether the DHCP clients may use SLAAC for address // assignment. RAAllowSLAAC bool // Enabled is the state of the DHCPv6 service, whether it is enabled or not // on the specific interface. Enabled bool }
IPv6Config is the interface-specific configuration for DHCPv6.
type Interface ¶
type Interface interface { agh.ServiceWithConfig[*Config] // Enabled returns true if DHCP provides information about clients. Enabled() (ok bool) // HostByIP returns the hostname of the DHCP client with the given IP // address. The address will be netip.Addr{} if there is no such client, // due to an assumption that a DHCP client must always have an IP address. HostByIP(ip netip.Addr) (host string) // MACByIP returns the MAC address for the given IP address leased. It // returns nil if there is no such client, due to an assumption that a DHCP // client must always have a MAC address. MACByIP(ip netip.Addr) (mac net.HardwareAddr) // IPByHost returns the IP address of the DHCP client with the given // hostname. The hostname will be an empty string if there is no such // client, due to an assumption that a DHCP client must always have a // hostname, either set by the client or assigned automatically. IPByHost(host string) (ip netip.Addr) // Leases returns all the DHCP leases. Leases() (leases []*Lease) // AddLease adds a new DHCP lease. It returns an error if the lease is // invalid or already exists. AddLease(l *Lease) (err error) // EditLease changes an existing DHCP lease. It returns an error if there // is no lease equal to old or if new is invalid or already exists. EditLease(old, new *Lease) (err error) // RemoveLease removes an existing DHCP lease. It returns an error if there // is no lease equal to l. RemoveLease(l *Lease) (err error) // Reset removes all the DHCP leases. Reset() (err error) }
type InterfaceConfig ¶
type InterfaceConfig struct { // IPv4 is the configuration of DHCP protocol for IPv4. IPv4 *IPv4Config // IPv6 is the configuration of DHCP protocol for IPv6. IPv6 *IPv6Config }
InterfaceConfig is the configuration of a single DHCP interface.
type Lease ¶
type Lease struct { // IP is the IP address leased to the client. IP netip.Addr // Expiry is the expiration time of the lease. Expiry time.Time // Hostname of the client. Hostname string // HWAddr is the physical hardware address (MAC address). HWAddr net.HardwareAddr // IsStatic defines if the lease is static. IsStatic bool }
Lease is a DHCP lease.
TODO(e.burkov): Consider it to agh, since it also may be needed in [websvc]. Also think of implementing iterating methods with appropriate signatures.