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',
|
'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 = {
|
mapping_none = {
|
||||||
'mac': 'ca:fe:de:ad:be:ef',
|
'mac': 'ca:fe:de:ad:be:ef',
|
||||||
'gateway_v6': net_bridge['gateway_v6'],
|
'gateway_v6': net_bridge['gateway_v6'],
|
||||||
@@ -457,3 +492,89 @@ class LibvirtVifTestCase(test.TestCase):
|
|||||||
self.net_ovs,
|
self.net_ovs,
|
||||||
self.mapping_ovs,
|
self.mapping_ovs,
|
||||||
br_want)
|
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