{"record":{"id":"ed17edf5c282b23c","repo":"AdguardTeam/AdGuardHome","slug":"resetting-dhcpv4-leases-w","errorCode":null,"errorMessage":"resetting dhcpv4 leases: %w","messagePattern":"resetting dhcpv4 leases: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/dhcpd/db.go","lineNumber":131,"sourceCode":"\tfor _, l := range leases {\n\t\tvar lease *dhcpsvc.Lease\n\t\tlease, err = l.toLease()\n\t\tif err != nil {\n\t\t\tlog.Info(\"dhcp: invalid lease: %s\", err)\n\n\t\t\tcontinue\n\t\t}\n\n\t\tif lease.IP.Is4() {\n\t\t\tleases4 = append(leases4, lease)\n\t\t} else {\n\t\t\tleases6 = append(leases6, lease)\n\t\t}\n\t}\n\n\terr = s.srv4.ResetLeases(leases4)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"resetting dhcpv4 leases: %w\", err)\n\t}\n\n\tif s.srv6 != nil {\n\t\terr = s.srv6.ResetLeases(leases6)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"resetting dhcpv6 leases: %w\", err)\n\t\t}\n\t}\n\n\tlog.Info(\n\t\t\"dhcp: loaded leases v4:%d  v6:%d  total-read:%d from DB\",\n\t\tlen(leases4),\n\t\tlen(leases6),\n\t\tlen(leases),\n\t)\n\n\treturn nil\n}","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/AdguardTeam/AdGuardHome/blob/b41aefbe51c8dde65e2c50f093996afa0502edf9/internal/dhcpd/db.go#L113-L149","documentation":"After loading and converting leases, pushing them into the DHCPv4 server's lease table via ResetLeases failed. The wrapped error comes from the dhcpsvc layer, often overlapping IPs, bad masks, or too many leases.","triggerScenarios":"Calling Create/handleDHCPSetConfig with a stored lease set containing duplicate IPs, an IP outside the current subnet, or otherwise invalid v4 lease data for the new config.","commonSituations":"Changing the DHCP subnet/range while old leases reference addresses in the previous subnet; corrupt or stale lease DBs.","solutions":["Check the wrapped error detail for the offending lease","If the subnet changed, delete the stale leases file so old-subnet leases are dropped","Reconcile static leases with the new range before re-applying config"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// filter leases to current subnet before reset\nvar kept []*dhcpsvc.Lease\nfor _, l := range leases { if subnet.Contains(l.IP) { kept = append(kept, l) } }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Delete stale lease DBs when changing subnets","Keep static leases consistent with the active range"],"tags":["dhcp","leases","ipv4","reset"],"backgroundTag":"dhcp-lease-reset-failed","analyzedSha":"b41aefbe51c8dde65e2c50f093996afa0502edf9","analyzedAt":"2026-08-27T04:57:55.097Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}