package iptables import ( "context" "errors" "sync" ) var ErrKernelModuleMissing = errors.New("kernel module is missing for this operation") type Config struct { runner CmdRunner logger Logger iptablesMutex sync.Mutex ip6tablesMutex sync.Mutex // Fixed state ipTables string ip6Tables string modules kernelModules } func New(ctx context.Context, runner CmdRunner, logger Logger) (*Config, error) { iptables, err := checkIptablesSupport(ctx, runner, "iptables", "iptables-nft", "iptables-legacy") if err != nil { return nil, err } ip6tables, err := findIP6tablesSupported(ctx, runner) if err != nil { return nil, err } return &Config{ runner: runner, logger: logger, ipTables: iptables, ip6Tables: ip6tables, modules: newKernelModules(), }, nil }