Change in vdsm[master]: net: Report correct (guest) pci address fot hostdev interfaces.

ibarkan at redhat.com ibarkan at redhat.com
Sun Oct 25 11:10:11 UTC 2015


Ido Barkan has uploaded a new change for review.

Change subject: net: Report correct (guest) pci address fot hostdev interfaces.
......................................................................

net: Report correct (guest) pci address fot hostdev interfaces.

For network interfaces, the address is a direct child of the
interface node. For host device interfaces, the host address may
appear before the guest address and be reported instead.

Change-Id: I4542dd9e0a70db4b9a6526442118d610c1b2c615
Signed-off-by: Ido Barkan <ibarkan at redhat.com>
---
A tests/devices/data/testSRiovVm.xml
M tests/devices/parsing/complex_vm_tests.py
M vdsm/virt/vm.py
3 files changed, 146 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/96/47696/1

diff --git a/tests/devices/data/testSRiovVm.xml b/tests/devices/data/testSRiovVm.xml
new file mode 100644
index 0000000..457a40c
--- /dev/null
+++ b/tests/devices/data/testSRiovVm.xml
@@ -0,0 +1,94 @@
+<domain type='kvm' id='5'>
+  <name>SRiovVm</name>
+  <uuid>77777777-ffff-3333-bbbb-222222222222</uuid>
+  <memory unit='KiB'>262144</memory>
+  <currentMemory unit='KiB'>262144</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <cputune>
+    <shares>1020</shares>
+    <period>25000</period>
+    <quota>100000</quota>
+  </cputune>
+  <resource>
+    <partition>/machine</partition>
+  </resource>
+  <sysinfo type='smbios'>
+    <system>
+      <entry name='manufacturer'>oVirt</entry>
+      <entry name='product'>oVirt Node</entry>
+      <entry name='version'>7.1-1.el7</entry>
+      <entry name='serial'>0121A278-8EFE-D511-9C82-80C16E726398</entry>
+      <entry name='uuid'>77777777-ffff-3333-bbbb-222222222222</entry>
+    </system>
+  </sysinfo>
+  <os>
+    <type arch='x86_64' machine='pc-i440fx-rhel7.1.0'>hvm</type>
+    <kernel>/boot/vmlinuz-3.10.0-229.el7.x86_64</kernel>
+    <initrd>/boot/initramfs-3.10.0-229.el7.x86_64.img</initrd>
+    <cmdline>rd.break=cmdline rd.shell rd.skipfsck</cmdline>
+    <boot dev='hd'/>
+    <smbios mode='sysinfo'/>
+  </os>
+  <features>
+    <acpi/>
+  </features>
+  <cpu mode='custom' match='exact'>
+    <model fallback='allow'>qemu64</model>
+    <feature policy='disable' name='svm'/>
+  </cpu>
+  <clock offset='variable' adjustment='0' basis='utc'>
+    <timer name='rtc' tickpolicy='catchup'/>
+    <timer name='pit' tickpolicy='delay'/>
+    <timer name='hpet' present='no'/>
+  </clock>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/libexec/qemu-kvm</emulator>
+    <controller type='virtio-serial' index='0' ports='16'>
+      <alias name='virtio-serial0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
+    </controller>
+    <controller type='pci' index='0' model='pci-root'>
+      <alias name='pci.0'/>
+    </controller>
+    <interface type='bridge'>
+      <mac address='52:54:00:59:ff:ff'/>
+      <source bridge=';vdsmdummy;'/>
+      <target dev='vnet2'/>
+      <model type='virtio'/>
+      <alias name='net1'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+    </interface>
+    <interface type='hostdev'>
+      <mac address='00:00:00:00:00:43'/>
+      <driver name='vfio'/>
+      <source>
+        <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x1'/>
+      </source>
+      <alias name='hostdev2'/>
+      <address type='pci' domain='0x0000' bus='0x99' slot='0x07' function='0x0'/>
+    </interface>
+    <channel type='unix'>
+      <source mode='bind' path='/var/lib/libvirt/qemu/channels/77777777-ffff-3333-bbbb-222222222222.com.redhat.rhevm.vdsm'/>
+      <target type='virtio' name='com.redhat.rhevm.vdsm' state='disconnected'/>
+      <alias name='channel0'/>
+      <address type='virtio-serial' controller='0' bus='0' port='1'/>
+    </channel>
+    <channel type='unix'>
+      <source mode='bind' path='/var/lib/libvirt/qemu/channels/77777777-ffff-3333-bbbb-222222222222.org.qemu.guest_agent.0'/>
+      <target type='virtio' name='org.qemu.guest_agent.0' state='disconnected'/>
+      <alias name='channel1'/>
+      <address type='virtio-serial' controller='0' bus='0' port='2'/>
+    </channel>
+    <memballoon model='virtio'>
+      <alias name='balloon0'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
+    </memballoon>
+  </devices>
+  <seclabel type='dynamic' model='selinux' relabel='yes'>
+    <label>system_u:system_r:svirt_t:s0:c117,c189</label>
+    <imagelabel>system_u:object_r:svirt_image_t:s0:c117,c189</imagelabel>
+  </seclabel>
+</domain>
\ No newline at end of file
diff --git a/tests/devices/parsing/complex_vm_tests.py b/tests/devices/parsing/complex_vm_tests.py
index 8eeb404..91afa7e 100644
--- a/tests/devices/parsing/complex_vm_tests.py
+++ b/tests/devices/parsing/complex_vm_tests.py
@@ -3,6 +3,7 @@
 from testlib import XMLTestCase
 
 from virt import domain_descriptor
+from virt.vmdevices import hwclass
 import vmfakelib as fake
 
 import verify
@@ -55,3 +56,45 @@
             vm._domain = domain_descriptor.DomainDescriptor(domain)
             vm._getUnderlyingVmDevicesInfo()
             self.verifyDevicesConf(vm.conf['devices'])
+
+
+class TestSRiovXmlParsing(XMLTestCase, verify.DeviceMixin):
+
+    def test_sriov_vm(self):
+        params = {
+            'nicModel': 'rtl8139,pv', 'name': 'SRiovVm',
+            'displaySecurePort': '-1', 'memSize': '256', 'displayPort': '-1',
+            'display': 'qxl'}
+
+        devices = [{'device': 'virtio-serial', 'type': 'controller'},
+                   {'device': 'memballoon', 'specParams': {'model': 'virtio'},
+                    'type': 'balloon'},
+                   {'device': 'bridge', 'nicModel': 'virtio',
+                    'macAddr': '52:54:00:59:FF:FF', 'type': 'interface',
+                    'network': ''},
+                   {'device': 'hostdev', 'type': hwclass.NIC,
+                    'alias': 'hostdev2', 'hostdev': 'pci_0000_05_00_1',
+                    'deviceId': '6940d5e7-9814-4ae0-94ef-f78e68229e76',
+                    'macAddr': '00:00:00:00:00:43',
+                    'specParams': {'vlanid': 12}},
+                   ]
+
+        test_path = os.path.realpath(__file__)
+        dir_name = os.path.split(test_path)[0]
+        api_path = os.path.join(
+            dir_name, '..', 'data', 'testSRiovVm.xml')
+
+        domain = None
+        with open(api_path, 'r') as domxml:
+            domain = domxml.read()
+        with fake.VM(params=params, devices=devices,
+                     create_device_objects=True) as vm:
+            vm._domain = domain_descriptor.DomainDescriptor(domain)
+            vm._getUnderlyingVmDevicesInfo()
+            self.verifyDevicesConf(vm.conf['devices'])
+            for dev in vm.conf['devices']:
+                if dev['device'] == 'hostdev':
+                    self.assertEqual(
+                        dev['address'],
+                        {'slot': '0x07', 'bus': '0x99', 'domain': '0x0000',
+                         'type': 'pci', 'function': '0x0'})
diff --git a/vdsm/virt/vm.py b/vdsm/virt/vm.py
index 134f951..f4d118d 100644
--- a/vdsm/virt/vm.py
+++ b/vdsm/virt/vm.py
@@ -22,6 +22,7 @@
 # stdlib imports
 from collections import namedtuple
 from contextlib import contextmanager
+from xml.dom import Node
 from xml.dom.minidom import parseString as _domParseStr
 import logging
 import os
@@ -4423,7 +4424,14 @@
                     network = network[len(netinfo.LIBVIRT_NET_PREFIX):]
 
             # Get nic address
-            address = self._getUnderlyingDeviceAddress(x)
+            address = {}
+            for child in x.childNodes:
+                if (child.nodeType != Node.TEXT_NODE and
+                        child.tagName == 'address'):
+                    address = dict((k.strip(), child.getAttribute(k).strip())
+                                   for k in child.attributes.keys())
+                    break
+
             for nic in self._devices[hwclass.NIC]:
                 if nic.macAddr.lower() == mac.lower():
                     nic.name = name


-- 
To view, visit https://gerrit.ovirt.org/47696
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4542dd9e0a70db4b9a6526442118d610c1b2c615
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Ido Barkan <ibarkan at redhat.com>


More information about the vdsm-patches mailing list