Skip to content

Commit 6d6f28a

Browse files
authored
Merge pull request #2576 from thaJeztah/skip_kernel_version_checks
Skip redundant kernel version checks
2 parents e9ff51b + 25df08e commit 6d6f28a

4 files changed

Lines changed: 11 additions & 40 deletions

File tree

drivers/bridge/netlink_deprecated_linux.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import (
77
"syscall"
88
"time"
99
"unsafe"
10-
11-
"github.com/docker/libnetwork/netutils"
1210
)
1311

1412
const (
@@ -106,7 +104,7 @@ func ioctlSetMacAddress(name, addr string) error {
106104
return nil
107105
}
108106

109-
func ioctlCreateBridge(name string, setMacAddr bool) error {
107+
func ioctlCreateBridge(name, macAddr string) error {
110108
if len(name) >= ifNameSize {
111109
return fmt.Errorf("Interface name %s too long", name)
112110
}
@@ -124,8 +122,5 @@ func ioctlCreateBridge(name string, setMacAddr bool) error {
124122
if _, _, err := syscall.Syscall(syscall.SYS_IOCTL, uintptr(s), ioctlBrAdd, uintptr(unsafe.Pointer(nameBytePtr))); err != 0 {
125123
return err
126124
}
127-
if setMacAddr {
128-
return ioctlSetMacAddress(name, netutils.GenerateRandomMAC().String())
129-
}
130-
return nil
125+
return ioctlSetMacAddress(name, macAddr)
131126
}

drivers/bridge/setup_device.go

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,13 @@ import (
66
"os"
77
"path/filepath"
88

9-
"github.com/docker/docker/pkg/parsers/kernel"
109
"github.com/docker/libnetwork/netutils"
1110
"github.com/sirupsen/logrus"
1211
"github.com/vishvananda/netlink"
1312
)
1413

1514
// SetupDevice create a new bridge interface/
1615
func setupDevice(config *networkConfiguration, i *bridgeInterface) error {
17-
var setMac bool
18-
1916
// We only attempt to create the bridge when the requested device name is
2017
// the default one.
2118
if config.BridgeName != DefaultBridgeName && config.DefaultBridge {
@@ -29,27 +26,17 @@ func setupDevice(config *networkConfiguration, i *bridgeInterface) error {
2926
},
3027
}
3128

32-
// Only set the bridge's MAC address if the kernel version is > 3.3, as it
33-
// was not supported before that.
34-
kv, err := kernel.GetKernelVersion()
35-
if err != nil {
36-
logrus.Errorf("Failed to check kernel versions: %v. Will not assign a MAC address to the bridge interface", err)
37-
} else {
38-
setMac = kv.Kernel > 3 || (kv.Kernel == 3 && kv.Major >= 3)
39-
}
29+
// Set the bridge's MAC address. Requires kernel version 3.3 or up.
30+
hwAddr := netutils.GenerateRandomMAC()
31+
i.Link.Attrs().HardwareAddr = hwAddr
32+
logrus.Debugf("Setting bridge mac address to %s", hwAddr)
4033

41-
if setMac {
42-
hwAddr := netutils.GenerateRandomMAC()
43-
i.Link.Attrs().HardwareAddr = hwAddr
44-
logrus.Debugf("Setting bridge mac address to %s", hwAddr)
45-
}
46-
47-
if err = i.nlh.LinkAdd(i.Link); err != nil {
34+
if err := i.nlh.LinkAdd(i.Link); err != nil {
4835
logrus.Debugf("Failed to create bridge %s via netlink. Trying ioctl", config.BridgeName)
49-
return ioctlCreateBridge(config.BridgeName, setMac)
36+
return ioctlCreateBridge(config.BridgeName, hwAddr.String())
5037
}
5138

52-
return err
39+
return nil
5340
}
5441

5542
func setupDefaultSysctl(config *networkConfiguration, i *bridgeInterface) error {

drivers/macvlan/macvlan_network.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package macvlan
33
import (
44
"fmt"
55

6-
"github.com/docker/docker/pkg/parsers/kernel"
76
"github.com/docker/docker/pkg/stringid"
87
"github.com/docker/libnetwork/driverapi"
98
"github.com/docker/libnetwork/netlabel"
@@ -17,15 +16,7 @@ import (
1716
// CreateNetwork the network for the specified driver type
1817
func (d *driver) CreateNetwork(nid string, option map[string]interface{}, nInfo driverapi.NetworkInfo, ipV4Data, ipV6Data []driverapi.IPAMData) error {
1918
defer osl.InitOSContext()()
20-
kv, err := kernel.GetKernelVersion()
21-
if err != nil {
22-
return fmt.Errorf("failed to check kernel version for %s driver support: %v", macvlanType, err)
23-
}
24-
// ensure Kernel version is >= v3.9 for macvlan support
25-
if kv.Kernel < macvlanKernelVer || (kv.Kernel == macvlanKernelVer && kv.Major < macvlanMajorVer) {
26-
return fmt.Errorf("kernel version failed to meet the minimum macvlan kernel requirement of %d.%d, found %d.%d.%d",
27-
macvlanKernelVer, macvlanMajorVer, kv.Kernel, kv.Major, kv.Minor)
28-
}
19+
2920
// reject a null v4 network
3021
if len(ipV4Data) == 0 || ipV4Data[0].Pool.String() == "0.0.0.0/0" {
3122
return fmt.Errorf("ipv4 pool is empty")

drivers/macvlan/macvlan_setup.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ import (
1111
)
1212

1313
const (
14-
dummyPrefix = "dm-" // macvlan prefix for dummy parent interface
15-
macvlanKernelVer = 3 // minimum macvlan kernel support
16-
macvlanMajorVer = 9 // minimum macvlan major kernel support
14+
dummyPrefix = "dm-" // macvlan prefix for dummy parent interface
1715
)
1816

1917
// Create the macvlan slave specifying the source name

0 commit comments

Comments
 (0)