{"record":{"id":"e1856a93e13acff7","repo":"AdguardTeam/AdGuardHome","slug":"q-q-making-header-query-w","errorCode":null,"errorMessage":"%q %q making header query: %w","messagePattern":"%q %q making header query: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/ipset/ipset_linux.go","lineNumber":357,"sourceCode":") (sets []props, err error) {\n\tfor _, n := range names {\n\t\tp, ok := currentlyKnown[n]\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"unknown ipset %q\", n)\n\t\t}\n\n\t\tif p.family != netfilter.ProtoIPv4 && p.family != netfilter.ProtoIPv6 {\n\t\t\tm.logger.DebugContext(\n\t\t\t\tctx,\n\t\t\t\t\"got unexpected ipset family while getting set properties\",\n\t\t\t\t\"set_name\", p.name,\n\t\t\t\t\"set_type\", p.typeName,\n\t\t\t\t\"set_family\", p.family,\n\t\t\t)\n\n\t\t\tp, err = m.ipsetProps(n)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"%q %q making header query: %w\", p.name, p.typeName, err)\n\t\t\t}\n\t\t}\n\n\t\tm.nameToIpset[n] = p\n\t\tsets = append(sets, p)\n\t}\n\n\treturn sets, nil\n}\n\n// newManagerWithDialer returns a new Linux ipset manager using the provided\n// dialer.\nfunc newManagerWithDialer(ctx context.Context, conf *Config, dial dialer) (mgr Manager, err error) {\n\tdefer func() { err = errors.Annotate(err, \"ipset: %w\") }()\n\n\tm := &manager{\n\t\tmu: &sync.Mutex{},\n","sourceCodeStart":339,"sourceCodeEnd":375,"githubUrl":"https://github.com/AdguardTeam/AdGuardHome/blob/b41aefbe51c8dde65e2c50f093996afa0502edf9/internal/ipset/ipset_linux.go#L339-L375","documentation":"When cached properties for a set are stale/invalid (wrong family), the manager re-queries the ipset header via netlink; this wraps a failure of that re-query.","triggerScenarios":"m.ipsetProps(n) netlink query fails: set was destroyed concurrently, netlink socket error, or permission dropped after init.","commonSituations":"Another process (firewall reload, ipset destroy) removes the set while the service is (re)configuring; transient netlink buffer exhaustion.","solutions":["Ensure sets named in config exist and are not destroyed concurrently","Retry service start/reload after the firewall settles","Check dmesg for netlink/netfilter errors"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"for attempt := 1; attempt <= 3; attempt++ {\n\tm, err = ipset.NewManager(conf)\n\tif err == nil || !strings.Contains(err.Error(), \"header query\") { break }\n\ttime.Sleep(time.Duration(attempt) * 500 * time.Millisecond)\n}","preventionTips":["Avoid destroying/recreating ipsets while the service (re)initializes","Order firewall scripts: create sets, then start service"],"tags":["ipset","netlink","concurrency"],"backgroundTag":"netlink-query-failed","analyzedSha":"b41aefbe51c8dde65e2c50f093996afa0502edf9","analyzedAt":"2026-08-27T04:57:55.097Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}