wip: migrate to mono-repo. SPN has already been moved to spn/
This commit is contained in:
60
service/compat/iptables.go
Normal file
60
service/compat/iptables.go
Normal file
@@ -0,0 +1,60 @@
|
||||
//go:build linux
|
||||
|
||||
package compat
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/coreos/go-iptables/iptables"
|
||||
)
|
||||
|
||||
var (
|
||||
iptProtocols = []iptables.Protocol{
|
||||
iptables.ProtocolIPv4,
|
||||
iptables.ProtocolIPv6,
|
||||
}
|
||||
iptTables = []string{
|
||||
"filter",
|
||||
"nat",
|
||||
"mangle",
|
||||
"raw",
|
||||
}
|
||||
)
|
||||
|
||||
// GetIPTablesChains returns the chain names currently in ip(6)tables.
|
||||
func GetIPTablesChains() ([]string, error) {
|
||||
chains := make([]string, 0, 100)
|
||||
|
||||
// Iterate over protocols.
|
||||
for _, protocol := range iptProtocols {
|
||||
if protocol == iptables.ProtocolIPv4 {
|
||||
chains = append(chains, "v4")
|
||||
} else {
|
||||
chains = append(chains, "v6")
|
||||
}
|
||||
|
||||
// Get iptables access for protocol.
|
||||
tbls, err := iptables.NewWithProtocol(protocol)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Iterate over tables.
|
||||
for _, table := range iptTables {
|
||||
chains = append(chains, " "+table)
|
||||
|
||||
// Get chain names
|
||||
chainNames, err := tbls.ListChains(table)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get chains of table %s: %w", table, err)
|
||||
}
|
||||
|
||||
// Add chain names to list.
|
||||
for _, name := range chainNames {
|
||||
chains = append(chains, " "+name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return chains, nil
|
||||
}
|
||||
Reference in New Issue
Block a user