Disable IPv6 on bridge devices in LinuxBridgeManager

We don't want to create a bridge device with an IPv6 address because
it will see the Router Advertisement from Neutron.

Change-Id: If59a823804d3477c5d8877f46fcc4c018af57a5a
Closes-bug: 1302080
This commit is contained in:
Brian Haley 2015-11-02 22:04:11 -05:00
parent 87ce4868ca
commit 404eaead79
4 changed files with 16 additions and 0 deletions

View File

@ -44,6 +44,11 @@ class BridgeDevice(ip_lib.IPDevice):
ip_wrapper = ip_lib.IPWrapper(self.namespace)
return ip_wrapper.netns.execute(cmd, run_as_root=True)
def _sysctl(self, cmd):
cmd = ['sysctl', '-w'] + cmd
ip_wrapper = ip_lib.IPWrapper(self.namespace)
return ip_wrapper.netns.execute(cmd, run_as_root=True)
@classmethod
def addbr(cls, name, namespace=None):
bridge = cls(name, namespace)
@ -75,6 +80,10 @@ class BridgeDevice(ip_lib.IPDevice):
def disable_stp(self):
return self._brctl(['stp', self.name, 'off'])
def disable_ipv6(self):
cmd = 'net.ipv6.conf.%s.disable_ipv6=1' % self.name
return self._sysctl([cmd])
def owns_interface(self, interface):
return os.path.exists(
BRIDGE_INTERFACE_FS % {'bridge': self.name,

View File

@ -350,6 +350,8 @@ class LinuxBridgeManager(object):
return
if bridge_device.disable_stp():
return
if bridge_device.disable_ipv6():
return
if bridge_device.link.set_up():
return
LOG.debug("Done starting bridge %(bridge_name)s for "

View File

@ -62,6 +62,10 @@ class BridgeLibTest(base.BaseTestCase):
br.disable_stp()
self._verify_bridge_mock(['brctl', 'stp', self._BR_NAME, 'off'])
br.disable_ipv6()
cmd = 'net.ipv6.conf.%s.disable_ipv6=1' % self._BR_NAME
self._verify_bridge_mock(['sysctl', '-w', cmd])
br.addif(self._IF_NAME)
self._verify_bridge_mock(
['brctl', 'addif', self._BR_NAME, self._IF_NAME])

View File

@ -651,6 +651,7 @@ class TestLinuxBridgeManager(base.BaseTestCase):
br_fn.addbr.return_value = bridge_device
bridge_device.setfd.return_value = False
bridge_device.disable_stp.return_value = False
bridge_device.disable_ipv6.return_value = False
bridge_device.link.set_up.return_value = False
self.assertEqual(self.lbm.ensure_bridge("br0", None), "br0")