pkg/ipam: use slash as sysctl separator so interface name can have dot

A dot is a valid character in interface names and is often used in the
names of VLAN interfaces. The sysctl net.ipv6.conf.<ifname>.disable_ipv6
key path cannot use dots both in the ifname and as path separator.
We switch to using / as key path separator so dots are allowed in the
ifname.

This works because sysctl.Sysctl() accepts key paths with either dots
or slashes as separators.

Also, print error message to stderr in case sysctl cannot be read
instead of silently hiding the error.

Signed-off-by: David Verbeiren <david.verbeiren@tessares.net>
This commit is contained in:
David Verbeiren 2021-02-18 18:32:05 +01:00
parent fa48f7515b
commit 9b09f167bb

View File

@ -27,7 +27,8 @@ import (
) )
const ( const (
DisableIPv6SysctlTemplate = "net.ipv6.conf.%s.disable_ipv6" // Note: use slash as separator so we can have dots in interface name (VLANs)
DisableIPv6SysctlTemplate = "net/ipv6/conf/%s/disable_ipv6"
) )
// ConfigureIface takes the result of IPAM plugin and // ConfigureIface takes the result of IPAM plugin and
@ -68,8 +69,11 @@ func ConfigureIface(ifName string, res *current.Result) error {
// Read current sysctl value // Read current sysctl value
value, err := sysctl.Sysctl(ipv6SysctlValueName) value, err := sysctl.Sysctl(ipv6SysctlValueName)
if err != nil || value == "0" { if err != nil {
// FIXME: log warning if unable to read sysctl value fmt.Fprintf(os.Stderr, "ipam_linux: failed to read sysctl %q: %v\n", ipv6SysctlValueName, err)
continue
}
if value == "0" {
continue continue
} }