You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
4.1 KiB
116 lines
4.1 KiB
7 years ago
|
From a72ab39ba75702676af64af30d9412f5d7730cd9 Mon Sep 17 00:00:00 2001
|
||
|
From: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||
|
Date: Mon, 14 Oct 2013 17:29:42 +0200
|
||
|
Subject: [PATCH 27/60] RASD: Support for device address properties
|
||
|
|
||
|
This change allows to enumerate KVM disk and network RASDs containing
|
||
|
device addresses. A new function set_rasd_device_address fills the
|
||
|
CIM instance properties from a device_address structure.
|
||
|
|
||
|
Signed-off-by: Viktor Mihajlovski <mihajlov@linux.vnet.ibm.com>
|
||
|
Signed-off-by: John Ferlan <jferlan@redhat.com>
|
||
|
---
|
||
|
src/Virt_RASD.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||
|
1 file changed, 73 insertions(+)
|
||
|
|
||
|
diff --git a/src/Virt_RASD.c b/src/Virt_RASD.c
|
||
|
index e28d4e6..df1e921 100644
|
||
|
--- a/src/Virt_RASD.c
|
||
|
+++ b/src/Virt_RASD.c
|
||
|
@@ -289,6 +289,67 @@ static bool get_vol_size(const CMPIBroker *broker,
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
+static CMPIStatus set_rasd_device_address(const CMPIBroker *broker,
|
||
|
+ const CMPIObjectPath *ref,
|
||
|
+ const struct device_address *addr,
|
||
|
+ CMPIInstance *inst)
|
||
|
+{
|
||
|
+ int i;
|
||
|
+ CMPIArray *arr_key;
|
||
|
+ CMPIArray *arr_value;
|
||
|
+ CMPIString *string;
|
||
|
+ CMPIStatus s = {CMPI_RC_OK, NULL};
|
||
|
+
|
||
|
+ arr_key = CMNewArray(broker,
|
||
|
+ addr->ct,
|
||
|
+ CMPI_string,
|
||
|
+ &s);
|
||
|
+ if (s.rc != CMPI_RC_OK)
|
||
|
+ goto out;
|
||
|
+
|
||
|
+ arr_value = CMNewArray(broker,
|
||
|
+ addr->ct,
|
||
|
+ CMPI_string,
|
||
|
+ &s);
|
||
|
+ if (s.rc != CMPI_RC_OK)
|
||
|
+ goto out;
|
||
|
+
|
||
|
+ for (i = 0; i < addr->ct; i++) {
|
||
|
+ string = CMNewString(broker,
|
||
|
+ addr->key[i],
|
||
|
+ &s);
|
||
|
+ if (s.rc != CMPI_RC_OK)
|
||
|
+ goto out;
|
||
|
+
|
||
|
+ CMSetArrayElementAt(arr_key,
|
||
|
+ i,
|
||
|
+ (CMPIValue *)&string,
|
||
|
+ CMPI_string);
|
||
|
+
|
||
|
+ string = CMNewString(broker,
|
||
|
+ addr->value[i],
|
||
|
+ &s);
|
||
|
+ if (s.rc != CMPI_RC_OK)
|
||
|
+ goto out;
|
||
|
+
|
||
|
+ CMSetArrayElementAt(arr_value,
|
||
|
+ i,
|
||
|
+ (CMPIValue *)&string,
|
||
|
+ CMPI_string);
|
||
|
+ }
|
||
|
+
|
||
|
+ CMSetProperty(inst, "AddressProperties",
|
||
|
+ (CMPIValue *)&arr_key,
|
||
|
+ CMPI_stringA);
|
||
|
+
|
||
|
+ CMSetProperty(inst, "AddressValues",
|
||
|
+ (CMPIValue *)&arr_value,
|
||
|
+ CMPI_stringA);
|
||
|
+
|
||
|
+ out:
|
||
|
+ return s;
|
||
|
+}
|
||
|
+
|
||
|
static CMPIStatus set_disk_rasd_params(const CMPIBroker *broker,
|
||
|
const CMPIObjectPath *ref,
|
||
|
const struct virt_device *dev,
|
||
|
@@ -427,6 +488,12 @@ static CMPIStatus set_disk_rasd_params(const CMPIBroker *broker,
|
||
|
(CMPIValue *)&(dev->dev.disk.shareable),
|
||
|
CMPI_boolean);
|
||
|
|
||
|
+ if (dev->dev.disk.address.ct > 0)
|
||
|
+ set_rasd_device_address(broker,
|
||
|
+ ref,
|
||
|
+ &dev->dev.disk.address,
|
||
|
+ inst);
|
||
|
+
|
||
|
virStoragePoolFree(pool);
|
||
|
virStorageVolFree(vol);
|
||
|
virConnectClose(conn);
|
||
|
@@ -590,6 +657,12 @@ static CMPIStatus set_net_rasd_params(const CMPIBroker *broker,
|
||
|
(CMPIValue *)dev->dev.net.poolid,
|
||
|
CMPI_chars);
|
||
|
|
||
|
+ if (dev->dev.net.address.ct > 0)
|
||
|
+ set_rasd_device_address(broker,
|
||
|
+ ref,
|
||
|
+ &dev->dev.net.address,
|
||
|
+ inst);
|
||
|
+
|
||
|
#if LIBVIR_VERSION_NUMBER < 9000
|
||
|
out:
|
||
|
#endif
|
||
|
--
|
||
|
2.1.0
|