From 36bcacd1c6fdb22495e1d370e68b2fbcd938d4f3 Mon Sep 17 00:00:00 2001 From: Jana Radhakrishnan Date: Thu, 18 Jun 2015 15:59:49 -0700 Subject: [PATCH] Use ioctls to create bridge The netlink way of creating bridge has problems in older kernels like the one used on RHEL 6 (which is a supported one). So trying to use ioctl method to create bridge so that it works on any version. Signed-off-by: Jana Radhakrishnan --- drivers/bridge/setup_device.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/bridge/setup_device.go b/drivers/bridge/setup_device.go index 1e0e168..c1be428 100644 --- a/drivers/bridge/setup_device.go +++ b/drivers/bridge/setup_device.go @@ -1,14 +1,15 @@ package bridge import ( - log "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/parsers/kernel" - "github.com/docker/libnetwork/netutils" + bri "github.com/docker/libcontainer/netlink" "github.com/vishvananda/netlink" ) // SetupDevice create a new bridge interface/ func setupDevice(config *NetworkConfiguration, i *bridgeInterface) error { + var setMac bool + // We only attempt to create the bridge when the requested device name is // the default one. if config.BridgeName != DefaultBridgeName && !config.AllowNonDefaultBridge { @@ -26,12 +27,10 @@ func setupDevice(config *NetworkConfiguration, i *bridgeInterface) error { // was not supported before that. kv, err := kernel.GetKernelVersion() if err == nil && (kv.Kernel >= 3 && kv.Major >= 3) { - i.Link.Attrs().HardwareAddr = netutils.GenerateRandomMAC() - log.Debugf("Setting bridge mac address to %s", i.Link.Attrs().HardwareAddr) + setMac = true } - // Call out to netlink to create the device. - return netlink.LinkAdd(i.Link) + return bri.CreateBridge(config.BridgeName, setMac) } // SetupDeviceUp ups the given bridge interface.