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.

Conflicts:
	neutron/agent/linux/bridge_lib.py

Change-Id: If59a823804d3477c5d8877f46fcc4c018af57a5a
Closes-bug: 1302080
(cherry picked from commit 404eaead79)
This commit is contained in:
Brian Haley 2015-11-02 22:04:11 -05:00 committed by Hynek Mlnarik
parent 0a4eedd912
commit a381aa07d9
4 changed files with 16 additions and 0 deletions

View File

@ -25,6 +25,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)
@ -45,3 +50,7 @@ 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])

View File

@ -394,6 +394,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

@ -47,6 +47,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

@ -759,6 +759,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")
ie_fn.return_Value = False