Introduce support for 802.1qbg and 802.1qbh to Nova VIF model
Define the nova network VIF model properties for supporting 802.1qbg / 802.1qbh networking in hypervisor drivers. Also wire up support to the libvirt driver for these new modes Blueprint: libvirt-vif-driver Change-Id: I91039790900170bfd698ea484d5f8a22445806ae Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
		| @@ -111,6 +111,41 @@ class LibvirtVifTestCase(test.TestCase): | ||||
|         'vif_uuid': 'vif-xxx-yyy-zzz', | ||||
|     } | ||||
|  | ||||
|     net_8021 = { | ||||
|              'cidr': '101.168.1.0/24', | ||||
|              'cidr_v6': '101:1db9::/64', | ||||
|              'gateway_v6': '101:1db9::1', | ||||
|              'netmask_v6': '64', | ||||
|              'netmask': '255.255.255.0', | ||||
|              '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_8021qbh = { | ||||
|         'mac': 'ca:fe:de:ad:be:ef', | ||||
|         'vif_uuid': 'vif-xxx-yyy-zzz', | ||||
|         'vif_devname': 'tap-xxx-yyy-zzz', | ||||
|         'vif_type': network_model.VIF_TYPE_802_QBH, | ||||
|         'qbh_params': network_model.VIF8021QbhParams( | ||||
|             profileid="xxx-yyy-zzz"), | ||||
|     } | ||||
|  | ||||
|     mapping_8021qbg = { | ||||
|         'mac': 'ca:fe:de:ad:be:ef', | ||||
|         'vif_uuid': 'vif-xxx-yyy-zzz', | ||||
|         'vif_devname': 'tap-xxx-yyy-zzz', | ||||
|         'vif_type': network_model.VIF_TYPE_802_QBG, | ||||
|         'qbg_params': network_model.VIF8021QbgParams( | ||||
|             managerid="xxx-yyy-zzz", | ||||
|             typeid="aaa-bbb-ccc", | ||||
|             typeidversion="1", | ||||
|             instanceid="ddd-eee-fff") | ||||
|     } | ||||
|  | ||||
|     mapping_none = { | ||||
|         'mac': 'ca:fe:de:ad:be:ef', | ||||
|         'gateway_v6': net_bridge['gateway_v6'], | ||||
| @@ -457,3 +492,89 @@ class LibvirtVifTestCase(test.TestCase): | ||||
|                                           self.net_ovs, | ||||
|                                           self.mapping_ovs, | ||||
|                                           br_want) | ||||
|  | ||||
|     def test_generic_8021qbh_driver(self): | ||||
|         def get_connection(): | ||||
|             return fakelibvirt.Connection("qemu:///session", | ||||
|                                           False) | ||||
|         d = vif.LibvirtGenericVIFDriver(get_connection) | ||||
|         xml = self._get_instance_xml(d, | ||||
|                                      self.net_8021, | ||||
|                                      self.mapping_8021qbh) | ||||
|  | ||||
|         doc = etree.fromstring(xml) | ||||
|         ret = doc.findall('./devices/interface') | ||||
|         self.assertEqual(len(ret), 1) | ||||
|         node = ret[0] | ||||
|         self.assertEqual(node.get("type"), "direct") | ||||
|  | ||||
|         br_name = node.find("source").get("dev") | ||||
|         self.assertEqual(br_name, "eth0") | ||||
|         mac = node.find("mac").get("address") | ||||
|         self.assertEqual(mac, self.mapping_8021qbh['mac']) | ||||
|         vp = node.find("virtualport") | ||||
|         self.assertEqual(vp.get("type"), "802.1Qbh") | ||||
|         profile_id_found = False | ||||
|         for p_elem in vp.findall("parameters"): | ||||
|             wantparams = self.mapping_8021qbh['qbh_params'] | ||||
|             profile_id = p_elem.get("profileid", None) | ||||
|             if profile_id: | ||||
|                 self.assertEqual(profile_id, | ||||
|                                  wantparams['profileid']) | ||||
|                 profile_id_found = True | ||||
|  | ||||
|         self.assertTrue(profile_id_found) | ||||
|  | ||||
|     def test_generic_8021qbg_driver(self): | ||||
|         def get_connection(): | ||||
|             return fakelibvirt.Connection("qemu:///session", | ||||
|                                           False) | ||||
|         d = vif.LibvirtGenericVIFDriver(get_connection) | ||||
|         xml = self._get_instance_xml(d, | ||||
|                                      self.net_8021, | ||||
|                                      self.mapping_8021qbg) | ||||
|  | ||||
|         doc = etree.fromstring(xml) | ||||
|         print xml | ||||
|         ret = doc.findall('./devices/interface') | ||||
|         self.assertEqual(len(ret), 1) | ||||
|         node = ret[0] | ||||
|         self.assertEqual(node.get("type"), "direct") | ||||
|  | ||||
|         br_name = node.find("source").get("dev") | ||||
|         self.assertEqual(br_name, "eth0") | ||||
|         mac = node.find("mac").get("address") | ||||
|         self.assertEqual(mac, self.mapping_8021qbg['mac']) | ||||
|         vp = node.find("virtualport") | ||||
|         self.assertEqual(vp.get("type"), "802.1Qbg") | ||||
|         manager_id_found = False | ||||
|         type_id_found = False | ||||
|         typeversion_id_found = False | ||||
|         instance_id_found = False | ||||
|         for p_elem in vp.findall("parameters"): | ||||
|             wantparams = self.mapping_8021qbg['qbg_params'] | ||||
|             manager_id = p_elem.get("managerid", None) | ||||
|             type_id = p_elem.get("typeid", None) | ||||
|             typeversion_id = p_elem.get("typeidversion", None) | ||||
|             instance_id = p_elem.get("instanceid", None) | ||||
|             if manager_id: | ||||
|                 self.assertEqual(manager_id, | ||||
|                                  wantparams['managerid']) | ||||
|                 manager_id_found = True | ||||
|             if type_id: | ||||
|                 self.assertEqual(type_id, | ||||
|                                  wantparams['typeid']) | ||||
|                 type_id_found = True | ||||
|             if typeversion_id: | ||||
|                 self.assertEqual(typeversion_id, | ||||
|                                  wantparams['typeidversion']) | ||||
|                 typeversion_id_found = True | ||||
|             if instance_id: | ||||
|                 self.assertEqual(instance_id, | ||||
|                                  wantparams['instanceid']) | ||||
|                 instance_id_found = True | ||||
|  | ||||
|         self.assertTrue(manager_id_found) | ||||
|         self.assertTrue(type_id_found) | ||||
|         self.assertTrue(typeversion_id_found) | ||||
|         self.assertTrue(instance_id_found) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Daniel P. Berrange
					Daniel P. Berrange