func New(isIpv6 bool) (Interface, error) {
	ipSetPath, err := getIPSetPath()
	if err != nil {
		return nil, err
	}
	runner := newInternal(isIpv6, *ipSetPath)
	return runner, nil
}
New returns a new Interface which will exec iptables.
package ipset
import (
	"bytes"
	"errors"
	"os/exec"
	"strings"
	"sync"
)
var (
	errIpsetNotFound = errors.New("ipset utility not found")
)
const (
	FamillyInet = "inet"
	FamillyInet6 = "inet6"
	DefaultMaxElem = "65536"
	DefaultHasSize = "1024"
	TypeBitmapPort = "bitmap:port"
	TypeHashIP = "hash:ip"
	TypeHashMac = "hash:mac"
	TypeHashNet = "hash:net"
	TypeHashNetNet = "hash:net,net"
	TypeHashIPPort = "hash:ip,port"
	TypeHashNetPort = "hash:net,port"
	TypeHashIPPortIP = "hash:ip,port,ip"
	TypeHashIPPortNet = "hash:ip,port,net"
	TypeHashIPMark = "hash:ip,mark"
	TypeHashIPNetPortNet = "hash:net,port,net"
	TypeHashNetIface = "hash:net,iface"
	TypeListSet = "list:set"
	OptionTimeout = "timeout"
	OptionCounters = "counters"
	OptionPackets = "packets"
	OptionBytes = "bytes"
	OptionComment = "comment"
	OptionSkbinfo = "skbinfo"
	OptionSkbmark = "skbmark"
	OptionSkbprio = "skbprio"
	OptionSkbqueue = "skbqueue"
	OptionHashSize = "hashsize"
	OptionMaxElem = "maxelem"
	OptionFamilly = "family"
	OptionNoMatch = "nomatch"
	OptionForceAdd = "forceadd"
)
type Interface interface {
	AddOrReplaceIPSet(setName string, members []string, createOptions ...string)
	AddOrReplaceIPSetWithBuiltinOptions(setName string, members [][]string, createOptions ...string)
	RemoveIPSet(setName string)
	ListIPSets() []string
	LoadData() error
	SyncOperations() error
}
type Set struct {
	Name    string
	Entries []*Entry
	Options []string
}
type Entry struct {
	Options []string
}
type runner struct {
	mu        sync.Mutex
	ipSetPath string
	Sets     map[string]*Set
	commands *bytes.Buffer
	isIpv6 bool
}