mirror of
https://github.com/netbirdio/netbird.git
synced 2026-09-02 04:51:29 +02:00
38 lines
1.2 KiB
Go
38 lines
1.2 KiB
Go
package iptables
|
|
|
|
import "github.com/netbirdio/netbird/client/firewall/manager"
|
|
|
|
// Rule to handle management of rules. Source set membership (when the
|
|
// rule was built against a shared hash:net ipset) is encoded in specs;
|
|
// DeleteFilterRule recovers it via findSets so the refcounter can drop
|
|
// the right reference.
|
|
type Rule struct {
|
|
id manager.RuleID
|
|
specs []string
|
|
mangleSpecs []string
|
|
// extraRules holds the rules beyond the first when the ipset
|
|
// fallback expands a multi-source rule into one rule per prefix.
|
|
extraRules []filterSpecs
|
|
chain string
|
|
v6 bool
|
|
}
|
|
|
|
// filterSpecs is one installed iptables rule: its filter-table spec and
|
|
// the paired mangle redirect-mark spec (nil for route rules or when the
|
|
// mangle rule could not be added).
|
|
type filterSpecs struct {
|
|
specs []string
|
|
mangleSpecs []string
|
|
}
|
|
|
|
// allSpecs returns the spec pairs of every iptables rule backing this
|
|
// Rule, the primary one first.
|
|
func (r *Rule) allSpecs() []filterSpecs {
|
|
return append([]filterSpecs{{specs: r.specs, mangleSpecs: r.mangleSpecs}}, r.extraRules...)
|
|
}
|
|
|
|
// ID returns the rule id
|
|
func (r *Rule) ID() manager.RuleID {
|
|
return r.id
|
|
}
|