From 5940d2c8abdf8872b779319fc1f85f066e37c2de Mon Sep 17 00:00:00 2001
From: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Date: Mon, 14 Oct 2013 17:29:40 +0200
Subject: [PATCH 25/60] RASD/schema: Add properties for device address
 representation

Certain device types are only identifiable uniquely via a device
address from the guest's perspective. Adding or removing devices
has the potential to change the address of other unrelated devices
and impact the guest's operation. Therefore it is less desirable
to rely on implicit device address allocation but rather to use
persistent device addresses.

Depending on the device's bus type (PCI, SCSI, USB, CCW ...) the
address specification format can vary, see also the libvirt
domain XML documentation. To account for the various formats
device addresses are specified with two array properties in the
respective RASD classes: AddressProperties and AddressValues.
The former contains a list of address property names and the latter
the values.

E.g., a PCI address is specified by the properties domain, bus,
slot and function. Therefore, for a PCI device RASD we could
have:

AddressProperties = ['type', 'domain','bus', 'slot', 'function']
AddressValues = ['pci', '0x0000', '0x00', '0x01', '0x2']

resulting in a libvirt address element:

<address type='pci' domain='0x0000' bus='0x00' slot='0x01'
 function='0x2'/>

Initially, we support only disk and network devices for KVM guests.

Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
Signed-off-by: John Ferlan <jferlan@redhat.com>
---
 schema/ResourceAllocationSettingData.mof | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/schema/ResourceAllocationSettingData.mof b/schema/ResourceAllocationSettingData.mof
index ebc4806..bf1fbb6 100644
--- a/schema/ResourceAllocationSettingData.mof
+++ b/schema/ResourceAllocationSettingData.mof
@@ -67,6 +67,12 @@ class KVM_DiskResourceAllocationSettingData : KVM_ResourceAllocationSettingData

       [Description ("if device is shareable")]
       boolean shareable;
+
+      [Description ("Device address property names")]
+      string AddressProperties[];
+
+      [Description ("Device address property values")]
+      string AddressValues[];
 };

 [Description ("LXC virtual disk configuration"),
@@ -167,6 +173,12 @@ class KVM_NetResourceAllocationSettingData : KVM_ResourceAllocationSettingData

       [Description ("Filter REF")]
       string FilterRef;
+
+      [Description ("Device address property names")]
+      string AddressProperties[];
+
+      [Description ("Device address property values")]
+      string AddressValues[];
 };

 [Description ("LXC virtual network configuration"),
--
2.1.0
