Counters: forget the totals of objects that no longer exist
hc counters kept listing the objects of a configuration replaced since housecarld started (an import with --replace gives every object a new ID) beside the current ones. Disabled objects, built-ins and policies keep their totals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d813ce13db
commit
429c910df1
4 files changed
+61
-1
No files matched your search
@@ -556,9 +556,39 @@ func (f *Firewall) Apply(ctx context.Context, st *model.State) error {
|
||||
f.base[k] = b
|
||||
}
|
||||
}
|
||||
pruneCounters(f.base, st)
|
||||
return nil
|
||||
}
|
||||
|
||||
// pruneCounters forgets the totals of objects st no longer has (deleted,
|
||||
// or replaced by an import with new IDs), so they aren't listed beside
|
||||
// the current ones. A disabled object keeps its totals for when it comes
|
||||
// back; built-ins and policies are always kept.
|
||||
func pruneCounters(base map[string]Counter, st *model.State) {
|
||||
ids := map[string]bool{}
|
||||
for _, r := range st.Rules {
|
||||
ids[fmt.Sprintf("r%d", r.ID)] = true
|
||||
}
|
||||
for _, x := range st.Forwards {
|
||||
ids[fmt.Sprintf("f%d", x.ID)] = true
|
||||
}
|
||||
for _, x := range st.SNATs {
|
||||
ids[fmt.Sprintf("s%d", x.ID)] = true
|
||||
}
|
||||
for _, x := range st.Redirects {
|
||||
ids[fmt.Sprintf("d%d", x.ID)] = true
|
||||
}
|
||||
for mark := range base {
|
||||
obj, _, _ := strings.Cut(mark, "-") // f3-hairpin, f3-6 are f3's
|
||||
if len(obj) < 2 || !strings.ContainsRune("rfsd", rune(obj[0])) || strings.Trim(obj[1:], "0123456789") != "" {
|
||||
continue // b-established, p-input
|
||||
}
|
||||
if !ids[obj] {
|
||||
delete(base, mark)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// SaveBoot writes the ruleset of st for the boot unit, and the fallback
|
||||
// it loads if that fails (FallbackFile), atomically. The boot ruleset has
|
||||
// no flowtable: it loads before the network comes up, when its devices
|
||||
|
||||
Reference in new issue
Block a user