dhcpsvc: imp code, docs
Some checks failed
build / test (macOS-latest) (push) Has been cancelled
build / test (ubuntu-latest) (push) Has been cancelled
build / test (windows-latest) (push) Has been cancelled
lint / go-lint (push) Has been cancelled
lint / eslint (push) Has been cancelled
build / build-release (push) Has been cancelled
build / notify (push) Has been cancelled
lint / notify (push) Has been cancelled

This commit is contained in:
Eugene Burkov 2026-07-20 17:00:38 +03:00
parent 5e39e4aba2
commit 5dfd12df4f
5 changed files with 27 additions and 14 deletions

View file

@ -6,10 +6,12 @@ import (
// Database is the interface for storing DHCP leases.
type Database interface {
// Load loads leases from the database. It must be safe for concurrent use.
// Load loads leases from the database. If err is not nil, leases must be
// nil. It must be safe for concurrent use.
Load(ctx context.Context) (leases []*Lease, err error)
// Store stores leases to the database. It must be safe for concurrent use.
// Store stores leases to the database. leases must be valid. It must be
// safe for concurrent use.
Store(ctx context.Context, leases []*Lease) (err error)
}

View file

@ -223,6 +223,7 @@ func TestDHCPServer_ServeEther4_release(t *testing.T) {
}
}
// TODO(e.burkov): Increase maintainability index.
func TestDHCPServer_ServeEther4_requestSelecting(t *testing.T) {
t.Parallel()

View file

@ -54,6 +54,7 @@ var (
testIPv6Static = netip.MustParseAddr("2001:db8::65")
)
// TODO(e.burkov): Increase maintainability index.
func TestDHCPServer_ServeEther6_solicit(t *testing.T) {
t.Parallel()
@ -215,6 +216,8 @@ func TestDHCPServer_ServeEther6_solicit(t *testing.T) {
// TODO(e.burkov): Add tests for REQUEST causing errors. This would require a
// custom implementation of the address checker at least.
//
// TODO(e.burkov): Increase maintainability index.
func TestDHCPServer_ServeEther6_request(t *testing.T) {
t.Parallel()

View file

@ -38,14 +38,25 @@ type jsonLeasesData struct {
//
// TODO(e.burkov): Migrate to add DUID and IAID fields for DHCPv6 leases.
type jsonLease struct {
Expiry string `json:"expires"`
IP netip.Addr `json:"ip"`
Hostname string `json:"hostname"`
HWAddr string `json:"mac"`
IsStatic bool `json:"static"`
// Expiry is the expiration time of the lease in RFC 3339 format. It is
// empty for static leases.
Expiry string `json:"expires"`
// IP is the IP address leased to the client. It must not be empty.
IP netip.Addr `json:"ip"`
// Hostname is the hostname of the client.
Hostname string `json:"hostname"`
// HWAddr is the MAC address of the client. It must be a valid hardware
// address string according to [netutil.IsValidMACString].
HWAddr string `json:"mac"`
// IsStatic defines if the lease is static.
IsStatic bool `json:"static"`
}
// compareNames returns the result of comparing the hostnames of dl and other
// compareNames returns the result of comparing the hostnames of jl and other
// lexicographically.
func (jl *jsonLease) compareNames(other *jsonLease) (res int) {
return strings.Compare(jl.Hostname, other.Hostname)
@ -71,7 +82,7 @@ func toJSONLease(l *Lease) (jl *jsonLease) {
}
}
// toInternal converts dl to *Lease.
// toInternal converts jl to *Lease.
func (jl *jsonLease) toInternal() (l *Lease, err error) {
mac, err := net.ParseMAC(jl.HWAddr)
if err != nil {

View file

@ -186,11 +186,7 @@ func (idx *leaseIndex) dbLoad(
) (err error) {
leases, err := idx.database.Load(ctx)
if err != nil {
if leases == nil {
return fmt.Errorf("loading leases: %w", err)
}
logger.ErrorContext(ctx, "loading leases", slogutil.KeyError, err)
return fmt.Errorf("loading leases: %w", err)
}
idx.addDBLeases(ctx, logger, leases, ifaces4, ifaces6)