summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/tests/test_libvirt_vif.py68
-rw-r--r--nova/virt/libvirt/vif.py27
2 files changed, 50 insertions, 45 deletions
diff --git a/nova/tests/test_libvirt_vif.py b/nova/tests/test_libvirt_vif.py
index 7ce81cc09..58504dcd8 100644
--- a/nova/tests/test_libvirt_vif.py
+++ b/nova/tests/test_libvirt_vif.py
@@ -44,6 +44,20 @@ class LibvirtVifTestCase(test.TestCase):
'id': 'network-id-xxx-yyy-zzz'
}
+ net_bridge_quantum = {
+ 'cidr': '101.168.1.0/24',
+ 'cidr_v6': '101:1db9::/64',
+ 'gateway_v6': '101:1db9::1',
+ 'netmask_v6': '64',
+ 'netmask': '255.255.255.0',
+ 'bridge_interface': 'eth0',
+ 'vlan': 99,
+ 'gateway': '101.168.1.1',
+ 'broadcast': '101.168.1.255',
+ 'dns1': '8.8.8.8',
+ 'id': 'network-id-xxx-yyy-zzz'
+ }
+
mapping_bridge = {
'mac': 'ca:fe:de:ad:be:ef',
'gateway_v6': net_bridge['gateway_v6'],
@@ -54,6 +68,15 @@ class LibvirtVifTestCase(test.TestCase):
'vif_type': network_model.VIF_TYPE_BRIDGE,
}
+ mapping_bridge_quantum = {
+ 'mac': 'ca:fe:de:ad:be:ef',
+ 'gateway_v6': net_bridge['gateway_v6'],
+ 'ips': [{'ip': '101.168.1.9'}],
+ 'dhcp_server': '191.168.1.1',
+ 'vif_uuid': 'vif-xxx-yyy-zzz',
+ 'vif_devname': 'tap-xxx-yyy-zzz',
+ }
+
net_ovs = {
'cidr': '101.168.1.0/24',
'cidr_v6': '101:1db9::/64',
@@ -241,10 +264,8 @@ class LibvirtVifTestCase(test.TestCase):
self.net_bridge,
self.mapping_none)
- def _check_bridge_driver(self, d):
- xml = self._get_instance_xml(d,
- self.net_bridge,
- self.mapping_bridge)
+ def _check_bridge_driver(self, d, net, mapping, br_want):
+ xml = self._get_instance_xml(d, net, mapping)
doc = etree.fromstring(xml)
ret = doc.findall('./devices/interface')
@@ -252,17 +273,32 @@ class LibvirtVifTestCase(test.TestCase):
node = ret[0]
self.assertEqual(node.get("type"), "bridge")
br_name = node.find("source").get("bridge")
- self.assertEqual(br_name, self.net_bridge['bridge'])
+ self.assertEqual(br_name, br_want)
mac = node.find("mac").get("address")
self.assertEqual(mac, self.mapping_bridge['mac'])
def test_bridge_driver(self):
d = vif.LibvirtBridgeDriver()
- self._check_bridge_driver(d)
+ self._check_bridge_driver(d,
+ self.net_bridge,
+ self.mapping_bridge,
+ self.net_bridge['bridge'])
def test_generic_driver_bridge(self):
d = vif.LibvirtGenericVIFDriver()
- self._check_bridge_driver(d)
+ self._check_bridge_driver(d,
+ self.net_bridge,
+ self.mapping_bridge,
+ self.net_bridge['bridge'])
+
+ def test_quantum_bridge_driver(self):
+ br_want = 'brq' + self.net_bridge_quantum['id']
+ br_want = br_want[:network_model.NIC_NAME_LEN]
+ d = vif.QuantumLinuxBridgeVIFDriver()
+ self._check_bridge_driver(d,
+ self.net_bridge_quantum,
+ self.mapping_bridge_quantum,
+ br_want)
def test_ovs_ethernet_driver(self):
d = vif.LibvirtOpenVswitchDriver()
@@ -310,24 +346,6 @@ class LibvirtVifTestCase(test.TestCase):
self.assertTrue(iface_id_found)
- def test_quantum_bridge_ethernet_driver(self):
- d = vif.QuantumLinuxBridgeVIFDriver()
- xml = self._get_instance_xml(d,
- self.net_bridge,
- self.mapping_bridge)
-
- doc = etree.fromstring(xml)
- ret = doc.findall('./devices/interface')
- self.assertEqual(len(ret), 1)
- node = ret[0]
- self.assertEqual(node.get("type"), "bridge")
- dev_name = node.find("target").get("dev")
- self.assertTrue(dev_name.startswith("tap"))
- mac = node.find("mac").get("address")
- self.assertEqual(mac, self.mapping_ovs['mac'])
- br_name = node.find("source").get("bridge")
- self.assertEqual(br_name, "br0")
-
def test_quantum_hybrid_driver(self):
d = vif.LibvirtHybridOVSBridgeDriver()
xml = self._get_instance_xml(d,
diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py
index 78ed848a2..3ffdfd0ac 100644
--- a/nova/virt/libvirt/vif.py
+++ b/nova/virt/libvirt/vif.py
@@ -372,33 +372,20 @@ class LibvirtOpenVswitchVirtualPortDriver(LibvirtBaseVIFDriver):
pass
-class QuantumLinuxBridgeVIFDriver(LibvirtBaseVIFDriver):
- """VIF driver for Linux Bridge when running Quantum."""
+class QuantumLinuxBridgeVIFDriver(LibvirtGenericVIFDriver):
+ """Retained in Grizzly for compatibility with Quantum
+ drivers which do not yet report 'vif_type' port binding.
+ Will be deprecated in Havana, and removed in Ixxxx."""
def get_bridge_name(self, network):
def_bridge = ("brq" + network['id'])[:network_model.NIC_NAME_LEN]
return network.get('bridge') or def_bridge
def get_config(self, instance, network, mapping):
- linux_net.LinuxBridgeInterfaceDriver.ensure_bridge(
- self.get_bridge_name(network),
- None,
- filtering=False)
-
- conf = super(QuantumLinuxBridgeVIFDriver,
- self).get_config(instance,
- network,
- mapping)
-
- designer.set_vif_host_backend_bridge_config(
- conf, self.get_bridge_name(network),
- self.get_vif_devname(mapping))
-
- return conf
+ return self.get_config_bridge(instance, network, mapping)
def plug(self, instance, vif):
- pass
+ self.plug_bridge(instance, vif)
def unplug(self, instance, vif):
- """No action needed. Libvirt takes care of cleanup."""
- pass
+ self.unplug_bridge(instance, vif)