mirror of
https://github.com/qdm12/gluetun.git
synced 2026-05-07 20:40:13 +02:00
52 lines
970 B
Go
52 lines
970 B
Go
package iptables
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"github.com/qdm12/gluetun/internal/mod"
|
|
)
|
|
|
|
type Config struct {
|
|
runner CmdRunner
|
|
logger Logger
|
|
iptablesMutex sync.Mutex
|
|
ip6tablesMutex sync.Mutex
|
|
|
|
// Fixed state
|
|
ipTables string
|
|
ip6Tables string
|
|
nftables bool
|
|
xtMark bool
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
modules := map[string]bool{
|
|
"xt_mark": false,
|
|
"nf_tables": false,
|
|
}
|
|
for module := range modules {
|
|
err := mod.Probe(module)
|
|
modules[module] = err == nil
|
|
}
|
|
|
|
return &Config{
|
|
runner: runner,
|
|
logger: logger,
|
|
ipTables: iptables,
|
|
ip6Tables: ip6tables,
|
|
nftables: modules["nf_tables"],
|
|
xtMark: modules["xt_mark"],
|
|
}, nil
|
|
}
|