AdguardTeam/AdGuardHome · error

resetting dhcpv6 leases: %w

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.

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)

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.