AdguardTeam/AdGuardHome · error

resetting dhcpv6 leases

Error message

resetting dhcpv6 leases: %w

What it means

Loading stored leases into the DHCPv6 server via ResetLeases failed. Only raised when a v6 server is configured (s.srv6 != nil); wrapped error comes from the v6 lease storage layer.

Solutions

  1. Inspect the wrapped error for the specific lease problem
  2. Delete the leases file if old v6 leases are stale after a prefix change
  3. Ensure v6 range config matches the leases being restored
Defensive patterns

Strategy: fallback

Validate before calling

// drop v6 leases outside configured range before enabling
for _, l := range leases6 { if !v6RangeContains(l.IP) { /* drop */ } }

Prevention

When it happens

Trigger: Calling Create or set-config with DHCPv6 enabled and a lease DB containing invalid v6 lease data (bad IP, conflicts with the configured v6 range).

Common situations: Enabling DHCPv6 after previously running with a different range/prefix; stale or corrupt leases referencing deprecated prefixes.

Related errors


AI-assisted analysis of AdguardTeam/AdGuardHome@b41aefbe51 (2026-08-27). Data as JSON: /api/errors/60aa685c99284405. Report an issue: GitHub.

Appendix: source

Thrown at internal/dhcpd/db.go:137

			continue
		}

		if lease.IP.Is4() {
			leases4 = append(leases4, lease)
		} else {
			leases6 = append(leases6, lease)
		}
	}

	err = s.srv4.ResetLeases(leases4)
	if err != nil {
		return fmt.Errorf("resetting dhcpv4 leases: %w", err)
	}

	if s.srv6 != nil {
		err = s.srv6.ResetLeases(leases6)
		if err != nil {
			return fmt.Errorf("resetting dhcpv6 leases: %w", err)
		}
	}

	log.Info(
		"dhcp: loaded leases v4:%d  v6:%d  total-read:%d from DB",
		len(leases4),
		len(leases6),
		len(leases),
	)

	return nil
}

// dbStore stores DHCP leases.
func (s *server) dbStore() (err error) {
	// Use an empty slice here as opposed to nil so that it doesn't write
	// "null" into the database file if leases are empty.
	leases := []*dbLease{}

View on GitHub (pinned to b41aefbe51)