[Libvirt-cim] [PATCH 6/7] VSMS: Support for domains with controller devices

John Ferlan jferlan at redhat.com
Thu Mar 13 22:27:05 UTC 2014


From: Xu Wang <gesaint at linux.vnet.ibm.com>

Signed-off-by: Xu Wang <gesaint at linux.vnet.ibm.com>
Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/Virt_VirtualSystemManagementService.c | 44 +++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/src/Virt_VirtualSystemManagementService.c b/src/Virt_VirtualSystemManagementService.c
index 3e7785e..9634481 100644
--- a/src/Virt_VirtualSystemManagementService.c
+++ b/src/Virt_VirtualSystemManagementService.c
@@ -1838,6 +1838,28 @@ static const char *input_rasd_to_vdev(CMPIInstance *inst,
         return NULL;
 }
 
+static const char *controller_rasd_to_vdev(CMPIInstance *inst,
+                                           struct virt_device *dev)
+{
+        const char *val;
+
+        if (cu_get_str_prop(inst, "Type", &val) != CMPI_RC_OK) {
+                CU_DEBUG("ControllerRASD Type field not valid");
+                goto out;
+        }
+        dev->dev.controller.type = strdup(val);
+
+        if (cu_get_str_prop(inst, "Model", &val) != CMPI_RC_OK) {
+                CU_DEBUG("Invalid value for Model in ControllerRASD");
+                goto out;
+        }
+        dev->dev.controller.model = strdup(val);
+
+ out:
+
+        return NULL;
+}
+
 static const char *_sysvirt_rasd_to_vdev(CMPIInstance *inst,
                                          struct virt_device *dev,
                                          uint16_t type,
@@ -1858,6 +1880,8 @@ static const char *_sysvirt_rasd_to_vdev(CMPIInstance *inst,
                 return console_rasd_to_vdev(inst, dev);
         } else if (type == CIM_RES_TYPE_INPUT) {
                 return input_rasd_to_vdev(inst, dev);
+        } else if (type == CIM_RES_TYPE_CONTROLLER) {
+                return controller_rasd_to_vdev(inst, dev);
         }
 
         return "Resource type not supported on this platform";
@@ -1878,6 +1902,8 @@ static const char *_container_rasd_to_vdev(CMPIInstance *inst,
                 return lxc_proc_rasd_to_vdev(inst, dev);
         } else if (type == CIM_RES_TYPE_INPUT) {
                 return input_rasd_to_vdev(inst, dev);
+        } else if (type == CIM_RES_TYPE_CONTROLLER) {
+                return controller_rasd_to_vdev(inst, dev);
         }
 
         return "Resource type not supported on this platform";
@@ -1987,6 +2013,9 @@ static const char *classify_resources(CMPIArray *resources,
         if (!make_space(&domain->dev_input, domain->dev_input_ct, count))
                 return "Failed to alloc input list";
 
+        if (!make_space(&domain->dev_controller, domain->dev_controller_ct, count))
+                return "Failed to alloc controller list";
+
         for (i = 0; i < count; i++) {
                 CMPIObjectPath *op;
                 CMPIData item;
@@ -2101,7 +2130,16 @@ static const char *classify_resources(CMPIArray *resources,
                                            &domain->dev_input[0],
                                            ns,
                                            p_error);
+                } else if (type == CIM_RES_TYPE_CONTROLLER) {
+                        msg = rasd_to_vdev(inst,
+                                           domain,
+                                           &domain->dev_controller[domain->dev_controller_ct],
+                                           ns,
+                                           p_error);
+                        if (msg == NULL)
+                                domain->dev_controller_ct += 1;
                 }
+
                 if (msg != NULL)
                         return msg;
 
@@ -2908,6 +2946,9 @@ static struct virt_device **find_list(struct domain *dominfo,
         } else if (type == CIM_RES_TYPE_INPUT) {
                 list = &dominfo->dev_input;
                 *count = &dominfo->dev_input_ct;
+        } else if (type == CIM_RES_TYPE_CONTROLLER) {
+                list = &dominfo->dev_controller;
+                *count = &dominfo->dev_controller_ct;
         }
 
         return list;
@@ -3029,6 +3070,7 @@ static CMPIStatus resource_del(struct domain *dominfo,
                 if (STREQ(dev->id, devid)) {
                         if ((type == CIM_RES_TYPE_GRAPHICS) ||
                             (type == CIM_RES_TYPE_CONSOLE)  ||
+                            (type == CIM_RES_TYPE_CONTROLLER) ||
                             (type == CIM_RES_TYPE_INPUT))
                                 cu_statusf(_BROKER, &s, CMPI_RC_OK, "");
                         else {
@@ -3111,6 +3153,7 @@ static CMPIStatus resource_add(struct domain *dominfo,
 
         if ((type == CIM_RES_TYPE_GRAPHICS) ||
             (type == CIM_RES_TYPE_INPUT) ||
+            (type == CIM_RES_TYPE_CONTROLLER) ||
             (type == CIM_RES_TYPE_CONSOLE)) {
                 (*count)++;
                 cu_statusf(_BROKER, &s, CMPI_RC_OK, "");
@@ -3188,6 +3231,7 @@ static CMPIStatus resource_mod(struct domain *dominfo,
 
                         if ((type == CIM_RES_TYPE_GRAPHICS) ||
                             (type == CIM_RES_TYPE_INPUT)    ||
+                            (type == CIM_RES_TYPE_CONTROLLER) ||
                             (type == CIM_RES_TYPE_CONSOLE))
                                 cu_statusf(_BROKER, &s, CMPI_RC_OK, "");
                         else {
-- 
1.8.5.3




More information about the Libvirt-cim mailing list