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.
115 lines
4.1 KiB
115 lines
4.1 KiB
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
|
|
|