diff --git a/net/arp.go b/net/arp.go index 7d9418f8..3cba28d2 100644 --- a/net/arp.go +++ b/net/arp.go @@ -41,3 +41,11 @@ func sysctl(procPath, variable, value string) error { return nil } + +func sysctlIfExists(procPath, variable, value string) error { + err := sysctl(procPath, variable, value) + if err != nil && os.IsNotExist(err) { + err = nil // ignore 'not found' errors + } + return err +} diff --git a/net/bridge.go b/net/bridge.go index 8283e645..f882ebb1 100644 --- a/net/bridge.go +++ b/net/bridge.go @@ -281,7 +281,7 @@ func EnsureBridge(procPath string, config *BridgeConfig, log *logrus.Logger, ips } } // No ipv6 router advertisments please - if err := sysctl(procPath, "net/ipv6/conf/"+config.WeaveBridgeName+"/accept_ra", "0"); err != nil { + if err := sysctlIfExists(procPath, "net/ipv6/conf/"+config.WeaveBridgeName+"/accept_ra", "0"); err != nil { return bridgeType, errors.Wrap(err, "setting accept_ra to 0") } diff --git a/net/veth.go b/net/veth.go index dc2f776a..984566dc 100644 --- a/net/veth.go +++ b/net/veth.go @@ -50,10 +50,10 @@ func CreateAndAttachVeth(procPath, name, peerName, bridgeName string, mtu int, k return cleanup("attaching veth %q to %q: %s", name, bridgeName, err) } // No ipv6 router advertisments please - if err := sysctl(procPath, "net/ipv6/conf/"+name+"/accept_ra", "0"); err != nil { + if err := sysctlIfExists(procPath, "net/ipv6/conf/"+name+"/accept_ra", "0"); err != nil { return cleanup("setting accept_ra to 0: %s", err) } - if err := sysctl(procPath, "net/ipv6/conf/"+peerName+"/accept_ra", "0"); err != nil { + if err := sysctlIfExists(procPath, "net/ipv6/conf/"+peerName+"/accept_ra", "0"); err != nil { return cleanup("setting accept_ra to 0: %s", err) } if !bridgeType.IsFastdp() && !keepTXOn {