npm/pkg/dataplane/iptables/iptable.go (64 lines of code) (raw):

package NPMIPtable import ( "fmt" "strings" ) // Table struct type Table struct { Name string Chains map[string]*Chain } // Chain struct type Chain struct { Name string Data []byte Rules []*Rule } // Rule struct type Rule struct { Protocol string Target *Target Modules []*Module } // Module struct type Module struct { Verb string OptionValueMap map[string][]string } // Target struct type Target struct { Name string OptionValueMap map[string][]string } // for debugging func (t *Table) String() string { return fmt.Sprintf("IPTABLE NAME - %v\n%s\n", t.Name, t.printIptableChains()) } func (t *Table) printIptableChains() string { var ret strings.Builder for k, v := range t.Chains { ret.WriteString(fmt.Sprintf("\tIPTABLE CHAIN NAME - %v\n%s\n", k, t.printIptableChainRules(v))) } return ret.String() } func (t *Table) printIptableChainRules(chain *Chain) string { var ret strings.Builder for k, v := range chain.Rules { ret.WriteString(fmt.Sprintf("\t\tRULE %v\n", k)) ret.WriteString(fmt.Sprintf("\t\t\tRULE'S PROTOCOL - %v\n", v.Protocol)) ret.WriteString(t.printIptableRuleModules(v.Modules)) ret.WriteString(t.printIptableRuleTarget(v.Target)) } return ret.String() } func (t *Table) printIptableRuleModules(mList []*Module) string { var ret strings.Builder ret.WriteString("\t\t\tRULE'S MODULES\n") for i, v := range mList { ret.WriteString(fmt.Sprintf("\t\t\t\tModule %v\n", i)) ret.WriteString(fmt.Sprintf("\t\t\t\t\tVerb - %v\n", v.Verb)) ret.WriteString(fmt.Sprintf("\t\t\t\t\tOptionValueMap - %+v\n", v.OptionValueMap)) } return ret.String() } func (t *Table) printIptableRuleTarget(target *Target) string { var ret strings.Builder ret.WriteString("\t\t\tRULE'S TARGET\n") ret.WriteString(fmt.Sprintf("\t\t\t\tNAME - %v\n", target.Name)) ret.WriteString(fmt.Sprintf("\t\t\t\tOptionValueMap - %+v\n", target.OptionValueMap)) return ret.String() }