diff --git a/internal/dhcp4d/dhcp4d.go b/internal/dhcp4d/dhcp4d.go index 4eaf1de..e143f90 100644 --- a/internal/dhcp4d/dhcp4d.go +++ b/internal/dhcp4d/dhcp4d.go @@ -187,7 +187,7 @@ func (h *Handler) canLease(reqIP net.IP, hwaddr string) int { } leaseNum := dhcp4.IPRange(h.start, reqIP) - 1 - if leaseNum < 0 || leaseNum >= h.leaseRange { + if leaseNum < 0 { return -1 } @@ -195,6 +195,10 @@ func (h *Handler) canLease(reqIP net.IP, hwaddr string) int { defer h.leasesMu.Unlock() l, ok := h.leasesIP[leaseNum] if !ok { + if leaseNum >= h.leaseRange { + return -1 + } + return leaseNum // lease available } @@ -202,6 +206,10 @@ func (h *Handler) canLease(reqIP net.IP, hwaddr string) int { return leaseNum // lease already owned by requestor } + if leaseNum >= h.leaseRange { + return -1 + } + if l.Expired(h.timeNow()) { return leaseNum // lease expired }