From 58d6e30844573de15aa597ab184e5720a08528ba Mon Sep 17 00:00:00 2001
From: John Ferlan <jferlan@redhat.com>
Date: Thu, 27 Mar 2014 16:39:47 -0400
Subject: [PATCH 57/60] Add code and associations for ControllerPool

Add the code and make adjustments to have ControllerPool support

Signed-off-by: John Ferlan <jferlan@redhat.com>
---
 src/Virt_DevicePool.c                            | 55 +++++++++++++++++++++++-
 src/Virt_ElementAllocatedFromPool.c              |  2 +
 src/Virt_ElementCapabilities.c                   |  4 +-
 src/Virt_HostedResourcePool.c                    |  3 +-
 src/Virt_ResourceAllocationFromPool.c            |  2 +
 src/Virt_ResourcePoolConfigurationCapabilities.c |  2 +-
 src/Virt_ResourcePoolConfigurationService.c      |  2 +
 7 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/src/Virt_DevicePool.c b/src/Virt_DevicePool.c
index aae7ed4..6c61b64 100644
--- a/src/Virt_DevicePool.c
+++ b/src/Virt_DevicePool.c
@@ -1,5 +1,5 @@
 /*
- * Copyright IBM Corp. 2007
+ * Copyright IBM Corp. 2007-2014
  *
  * Authors:
  *  Dan Smith <danms@us.ibm.com>
@@ -797,6 +797,8 @@ char *pool_member_of(const CMPIBroker *broker,
                 poolid = strdup("GraphicsPool/0");
         else if (type == CIM_RES_TYPE_INPUT)
                 poolid = strdup("InputPool/0");
+        else if (type == CIM_RES_TYPE_CONTROLLER)
+                poolid = strdup("ControllerPool/0");
         else
                 return NULL;

@@ -817,6 +819,8 @@ uint16_t res_type_from_pool_classname(const char *classname)
                 return CIM_RES_TYPE_GRAPHICS;
         else if (strstr(classname, "InputPool"))
                 return CIM_RES_TYPE_INPUT;
+        else if (strstr(classname, "ControllerPool"))
+                return CIM_RES_TYPE_CONTROLLER;
         else
                 return CIM_RES_TYPE_UNKNOWN;
 }
@@ -835,6 +839,8 @@ uint16_t res_type_from_pool_id(const char *id)
                 return CIM_RES_TYPE_GRAPHICS;
         else if (strstr(id, "InputPool"))
                 return CIM_RES_TYPE_INPUT;
+        else if (strstr(id, "ControllerPool"))
+                return CIM_RES_TYPE_CONTROLLER;
         else
                 return CIM_RES_TYPE_UNKNOWN;
 }
@@ -1502,6 +1508,43 @@ static CMPIStatus inputpool_instance(virConnectPtr conn,
         return s;
 }

+static CMPIStatus controllerpool_instance(virConnectPtr conn,
+                                          struct inst_list *list,
+                                          const char *ns,
+                                          const char *_id,
+                                          const CMPIBroker *broker)
+{
+        const char *id = "ControllerPool/0";
+        CMPIInstance *inst;
+        CMPIStatus s = {CMPI_RC_OK, NULL};
+
+        if ((_id != NULL) && (!STREQC(_id, "0"))) {
+                cu_statusf(broker, &s,
+                           CMPI_RC_ERR_FAILED,
+                           "No such controller pool `%s'", id);
+                return s;
+        }
+
+        inst = get_typed_instance(broker,
+                                  pfx_from_conn(conn),
+                                  "ControllerPool",
+                                  ns,
+                                  false);
+        if (inst == NULL) {
+                cu_statusf(broker, &s,
+                           CMPI_RC_ERR_FAILED,
+                           "Failed to get instance of %s_ControllerPool",
+                           pfx_from_conn(conn));
+                return s;
+        }
+
+        set_params(inst, CIM_RES_TYPE_CONTROLLER, id, NULL, NULL, true);
+
+        inst_list_add(list, inst);
+
+        return s;
+}
+
 static CMPIStatus _get_pools(const CMPIBroker *broker,
                              const CMPIObjectPath *reference,
                              const uint16_t type,
@@ -1563,6 +1606,14 @@ static CMPIStatus _get_pools(const CMPIBroker *broker,
                                        id,
                                        broker);

+        if ((type == CIM_RES_TYPE_CONTROLLER) ||
+            (type == CIM_RES_TYPE_ALL))
+                s = controllerpool_instance(conn,
+                                            list,
+                                            NAMESPACE(reference),
+                                            id,
+                                            broker);
+
         if (type == CIM_RES_TYPE_UNKNOWN)
                 cu_statusf(broker, &s,
                            CMPI_RC_ERR_NOT_FOUND,
@@ -1712,6 +1763,8 @@ CMPIInstance *parent_device_pool(const CMPIBroker *broker,
                 id = "GraphicsPool/0";
         } else if (type == CIM_RES_TYPE_INPUT) {
                 id = "InputPool/0";
+        } else if (type == CIM_RES_TYPE_CONTROLLER) {
+                id = "ControllerPool/0";
         } else {
                 cu_statusf(broker, s,
                            CMPI_RC_ERR_INVALID_PARAMETER,
diff --git a/src/Virt_ElementAllocatedFromPool.c b/src/Virt_ElementAllocatedFromPool.c
index 262c9b9..a5fef12 100644
--- a/src/Virt_ElementAllocatedFromPool.c
+++ b/src/Virt_ElementAllocatedFromPool.c
@@ -253,6 +253,7 @@ static char* pool[] = {
         "KVM_DiskPool",
         "KVM_GraphicsPool",
         "KVM_InputPool",
+        "KVM_ControllerPool",
         "LXC_ProcessorPool",
         "LXC_MemoryPool",
         "LXC_NetworkPool",
@@ -317,6 +318,7 @@ static char* device_or_pool[] = {
         "KVM_DiskPool",
         "KVM_GraphicsPool",
         "KVM_InputPool",
+        "KVM_ControllerPool",
         "LXC_ProcessorPool",
         "LXC_MemoryPool",
         "LXC_NetworkPool",
diff --git a/src/Virt_ElementCapabilities.c b/src/Virt_ElementCapabilities.c
index 77aad9a..0cb3e1e 100644
--- a/src/Virt_ElementCapabilities.c
+++ b/src/Virt_ElementCapabilities.c
@@ -1,5 +1,5 @@
 /*
- * Copyright IBM Corp. 2007
+ * Copyright IBM Corp. 2007-2014
  *
  * Authors:
  *  Dan Smith <danms@us.ibm.com>
@@ -416,6 +416,7 @@ static char* host_sys_and_service_and_rp[] = {
         "KVM_DiskPool",
         "KVM_GraphicsPool",
         "KVM_InputPool",
+        "KVM_ControllerPool",
         "LXC_ProcessorPool",
         "LXC_MemoryPool",
         "LXC_NetworkPool",
@@ -553,6 +554,7 @@ static char* resource_pool[] = {
         "KVM_DiskPool",
         "KVM_GraphicsPool",
         "KVM_InputPool",
+        "KVM_ControllerPool",
         "LXC_ProcessorPool",
         "LXC_MemoryPool",
         "LXC_NetworkPool",
diff --git a/src/Virt_HostedResourcePool.c b/src/Virt_HostedResourcePool.c
index 0863853..e0459c5 100644
--- a/src/Virt_HostedResourcePool.c
+++ b/src/Virt_HostedResourcePool.c
@@ -1,5 +1,5 @@
 /*
- * Copyright IBM Corp. 2007
+ * Copyright IBM Corp. 2007-2014
  *
  * Authors:
  *  Dan Smith <danms@us.ibm.com>
@@ -113,6 +113,7 @@ static char* part_component[] = {
         "KVM_DiskPool",
         "KVM_GraphicsPool",
         "KVM_InputPool",
+        "KVM_ControllerPool",
         "LXC_ProcessorPool",
         "LXC_MemoryPool",
         "LXC_NetworkPool",
diff --git a/src/Virt_ResourceAllocationFromPool.c b/src/Virt_ResourceAllocationFromPool.c
index 7bee729..98bd24e 100644
--- a/src/Virt_ResourceAllocationFromPool.c
+++ b/src/Virt_ResourceAllocationFromPool.c
@@ -194,6 +194,7 @@ static char* antecedent[] = {
         "KVM_DiskPool",
         "KVM_GraphicsPool",
         "KVM_InputPool",
+        "KVM_ControllerPool",
         "LXC_ProcessorPool",
         "LXC_MemoryPool",
         "LXC_NetworkPool",
@@ -216,6 +217,7 @@ static char* dependent[] = {
         "KVM_ProcResourceAllocationSettingData",
         "KVM_GraphicsResourceAllocationSettingData",
         "KVM_InputResourceAllocationSettingData",
+        "KVM_ControllerResourceAllocationSettingData",
         "LXC_DiskResourceAllocationSettingData",
         "LXC_MemResourceAllocationSettingData",
         "LXC_NetResourceAllocationSettingData",
diff --git a/src/Virt_ResourcePoolConfigurationCapabilities.c b/src/Virt_ResourcePoolConfigurationCapabilities.c
index 63045bf..28a5de2 100644
--- a/src/Virt_ResourcePoolConfigurationCapabilities.c
+++ b/src/Virt_ResourcePoolConfigurationCapabilities.c
@@ -1,5 +1,5 @@
 /*
- * Copyright IBM Corp. 2007
+ * Copyright IBM Corp. 2007-2014
  *
  * Authors:
  *  Dan Smith <danms@us.ibm.com>
diff --git a/src/Virt_ResourcePoolConfigurationService.c b/src/Virt_ResourcePoolConfigurationService.c
index 02de834..ab83beb 100644
--- a/src/Virt_ResourcePoolConfigurationService.c
+++ b/src/Virt_ResourcePoolConfigurationService.c
@@ -431,6 +431,8 @@ static char *get_pool_id(int res_type,
                 pool = "GraphicsPool";
         else if (res_type == CIM_RES_TYPE_INPUT)
                 pool = "InputPool";
+        else if (res_type == CIM_RES_TYPE_CONTROLLER)
+                pool = "ControllerPool";
         else
                 pool = "Unknown";

--
2.1.0
