From 885056b2439a1a978be2b7df02c6c04c82694d94 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 --- libnetwork/drivers/bridge/setup_device.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/libnetwork/drivers/bridge/setup_device.go b/libnetwork/drivers/bridge/setup_device.go index 1234f0bf42..66d55897f9 100644 --- a/libnetwork/drivers/bridge/setup_device.go +++ b/libnetwork/drivers/bridge/setup_device.go @@ -1,15 +1,15 @@ package bridge import ( - log "github.com/Sirupsen/logrus" "github.com/docker/docker/pkg/parsers/kernel" - "github.com/docker/libnetwork/netutils" - "github.com/docker/libnetwork/types" + 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 { @@ -27,15 +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. - if err = netlink.LinkAdd(i.Link); err != nil { - return types.InternalErrorf("Failed to program bridge link: %s", err.Error()) - } - return nil + return bri.CreateBridge(config.BridgeName, setMac) } // SetupDeviceUp ups the given bridge interface.