Skip to content

Commit 998f3ce

Browse files
committed
modprobe when needed
- in bridge driver modprobe for br_netfilter only if EnableIPTables==true - move FirewalldInit() to iptables pakcage Init() - move modprobe for nf_nat and xt_conntrack in iptables.initCheck() Signed-off-by: Alessandro Boch <aboch@docker.com>
1 parent 4d070f4 commit 998f3ce

2 files changed

Lines changed: 24 additions & 16 deletions

File tree

drivers/bridge/bridge.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"os/exec"
1010
"path/filepath"
1111
"strconv"
12-
"strings"
1312
"sync"
1413
"syscall"
1514

@@ -130,21 +129,6 @@ func newDriver() *driver {
130129

131130
// Init registers a new instance of bridge driver
132131
func Init(dc driverapi.DriverCallback, config map[string]interface{}) error {
133-
if _, err := os.Stat("/proc/sys/net/bridge"); err != nil {
134-
if out, err := exec.Command("modprobe", "-va", "bridge", "br_netfilter").CombinedOutput(); err != nil {
135-
logrus.Warnf("Running modprobe bridge br_netfilter failed with message: %s, error: %v", out, err)
136-
}
137-
}
138-
if out, err := exec.Command("modprobe", "-va", "nf_nat").CombinedOutput(); err != nil {
139-
logrus.Warnf("Running modprobe nf_nat failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
140-
}
141-
if out, err := exec.Command("modprobe", "-va", "xt_conntrack").CombinedOutput(); err != nil {
142-
logrus.Warnf("Running modprobe xt_conntrack failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
143-
}
144-
if err := iptables.FirewalldInit(); err != nil {
145-
logrus.Debugf("Fail to initialize firewalld: %v, using raw iptables instead", err)
146-
}
147-
148132
d := newDriver()
149133
if err := d.configure(config); err != nil {
150134
return err
@@ -387,6 +371,11 @@ func (d *driver) configure(option map[string]interface{}) error {
387371
}
388372

389373
if config.EnableIPTables {
374+
if _, err := os.Stat("/proc/sys/net/bridge"); err != nil {
375+
if out, err := exec.Command("modprobe", "-va", "bridge", "br_netfilter").CombinedOutput(); err != nil {
376+
logrus.Warnf("Running modprobe bridge br_netfilter failed with message: %s, error: %v", out, err)
377+
}
378+
}
390379
removeIPChains()
391380
natChain, filterChain, isolationChain, err = setupIPChains(config)
392381
if err != nil {

iptables/iptables.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ var (
4242
bestEffortLock sync.Mutex
4343
// ErrIptablesNotFound is returned when the rule is not found.
4444
ErrIptablesNotFound = errors.New("Iptables not found")
45+
probeOnce sync.Once
46+
firewalldOnce sync.Once
4547
)
4648

4749
// ChainInfo defines the iptables chain.
@@ -61,8 +63,25 @@ func (e ChainError) Error() string {
6163
return fmt.Sprintf("Error iptables %s: %s", e.Chain, string(e.Output))
6264
}
6365

66+
func probe() {
67+
if out, err := exec.Command("modprobe", "-va", "nf_nat").CombinedOutput(); err != nil {
68+
logrus.Warnf("Running modprobe nf_nat failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
69+
}
70+
if out, err := exec.Command("modprobe", "-va", "xt_conntrack").CombinedOutput(); err != nil {
71+
logrus.Warnf("Running modprobe xt_conntrack failed with message: `%s`, error: %v", strings.TrimSpace(string(out)), err)
72+
}
73+
}
74+
75+
func initFirewalld() {
76+
if err := FirewalldInit(); err != nil {
77+
logrus.Debugf("Fail to initialize firewalld: %v, using raw iptables instead", err)
78+
}
79+
}
80+
6481
func initCheck() error {
6582
if iptablesPath == "" {
83+
probeOnce.Do(probe)
84+
firewalldOnce.Do(initFirewalld)
6685
path, err := exec.LookPath("iptables")
6786
if err != nil {
6887
return ErrIptablesNotFound

0 commit comments

Comments
 (0)