{"record":{"id":"99acde5ba2c08938","repo":"AdguardTeam/AdGuardHome","slug":"q-q-unexpected-family-q","errorCode":null,"errorMessage":"%q %q unexpected family %q","messagePattern":"%q %q unexpected family %q","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/ipset/ipset_linux.go","lineNumber":511,"sourceCode":"\tip4s []net.IP,\n\tip6s []net.IP,\n\tsets []props,\n) (n int, err error) {\n\tfor _, set := range sets {\n\t\tvar nn int\n\t\tswitch set.family {\n\t\tcase netfilter.ProtoIPv4:\n\t\t\tnn, err = m.addIPs(host, set, ip4s)\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\tcase netfilter.ProtoIPv6:\n\t\t\tnn, err = m.addIPs(host, set, ip6s)\n\t\t\tif err != nil {\n\t\t\t\treturn n, err\n\t\t\t}\n\t\tdefault:\n\t\t\treturn n, fmt.Errorf(\"%q %q unexpected family %q\", set.name, set.typeName, set.family)\n\t\t}\n\n\t\tm.logger.DebugContext(\n\t\t\tctx,\n\t\t\t\"added ips to set\",\n\t\t\t\"ips_num\", nn,\n\t\t\t\"set_name\", set.name,\n\t\t\t\"set_type\", set.typeName,\n\t\t)\n\n\t\tn += nn\n\t}\n\n\treturn n, nil\n}\n\n// Add implements the [Manager] interface for *manager.\nfunc (m *manager) Add(ctx context.Context, host string, ip4s, ip6s []net.IP) (n int, err error) {","sourceCodeStart":493,"sourceCodeEnd":529,"githubUrl":"https://github.com/AdguardTeam/AdGuardHome/blob/b41aefbe51c8dde65e2c50f093996afa0502edf9/internal/ipset/ipset_linux.go#L493-L529","documentation":"While iterating sets for a host, addToSets hit the default family branch — the set's family is neither IPv4 nor IPv6. Defensive invariant check mirroring 391 at the addToSets level.","triggerScenarios":"A cached props entry with invalid family reaches the add loop, e.g. after a failed re-query left inconsistent state.","commonSituations":"Extremely rare; indicates corrupted internal state or an upstream parsing bug rather than user misconfiguration.","solutions":["Restart the service to rebuild the ipset cache","Verify all referenced sets have valid families with 'ipset list'","Report upstream with logs if persistent"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":"func (p props) hasValidFamily() bool {\n\treturn p.family == netfilter.ProtoIPv4 || p.family == netfilter.ProtoIPv6\n}","tryCatchPattern":null,"preventionTips":["Treat this as a canary for corrupted state; restart to re-sync","Report reproducible occurrences upstream"],"tags":["ipset","internal-invariant","netfilter"],"backgroundTag":"internal-invariant-violation","analyzedSha":"b41aefbe51c8dde65e2c50f093996afa0502edf9","analyzedAt":"2026-08-27T04:57:55.097Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}