os-cmpi-xen
annotate src/Xen_ProcessorPool.c @ 14:d086bab6deb9
Reworked Xen_ProcessorPool and its associations to conform to latest profiles and schema from SVPC.
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
Signed-off-by: Jim Fehlig <jfehlig@novell.com>
author | jfehlig@jfehlig3.provo.novell.com |
---|---|
date | Wed Jul 26 16:58:58 2006 -0600 (2006-07-26) |
parents | bdf24cd56bed |
children | 94fc22b52c5d |
rev | line source |
---|---|
jbulpin@0 | 1 // Copyright (C) 2006 IBM Corporation |
jbulpin@0 | 2 // |
jbulpin@0 | 3 // This library is free software; you can redistribute it and/or |
jbulpin@0 | 4 // modify it under the terms of the GNU Lesser General Public |
jbulpin@0 | 5 // License as published by the Free Software Foundation; either |
jbulpin@0 | 6 // version 2.1 of the License, or (at your option) any later version. |
jbulpin@0 | 7 // |
jbulpin@0 | 8 // This library is distributed in the hope that it will be useful, |
jbulpin@0 | 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of |
jbulpin@0 | 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
jbulpin@0 | 11 // Lesser General Public License for more details. |
jbulpin@0 | 12 // |
jbulpin@0 | 13 // You should have received a copy of the GNU Lesser General Public |
jbulpin@0 | 14 // License along with this library; if not, write to the Free Software |
jbulpin@0 | 15 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
jbulpin@0 | 16 // ============================================================================ |
jbulpin@0 | 17 // Authors: Dr. Gareth S. Bestor, <bestor@us.ibm.com> |
jbulpin@0 | 18 // Contributors: |
jbulpin@0 | 19 // Description: |
jbulpin@0 | 20 // ============================================================================ |
jbulpin@0 | 21 |
jbulpin@0 | 22 /* Include the required CMPI data types, function headers, and macros */ |
jbulpin@0 | 23 #include "cmpidt.h" |
jbulpin@0 | 24 #include "cmpift.h" |
jbulpin@0 | 25 #include "cmpimacs.h" |
jbulpin@0 | 26 |
jbulpin@0 | 27 |
jbulpin@0 | 28 // ---------------------------------------------------------------------------- |
jbulpin@0 | 29 // COMMON GLOBAL VARIABLES |
jbulpin@0 | 30 // ---------------------------------------------------------------------------- |
jbulpin@0 | 31 |
jbulpin@0 | 32 /* Handle to the CIM broker. Initialized when the provider lib is loaded. */ |
jbulpin@0 | 33 static CMPIBroker *_BROKER; |
jbulpin@0 | 34 |
jbulpin@0 | 35 /* Include utility functions */ |
jbulpin@0 | 36 #include "cmpiutil.h" |
jbulpin@0 | 37 |
jbulpin@0 | 38 /* Include _SBLIM_TRACE() logging support */ |
jbulpin@0 | 39 #include "cmpitrace.h" |
jbulpin@0 | 40 |
jbulpin@0 | 41 /* Include the abstract resource access functions and abstracted _RESOURCES and _RESOURCE data types. */ |
jbulpin@0 | 42 #include "Xen_ProcessorPool_Resource.h" |
jbulpin@0 | 43 |
jbulpin@0 | 44 |
jbulpin@0 | 45 // ============================================================================ |
jbulpin@0 | 46 // CMPI INSTANCE PROVIDER FUNCTION TABLE |
jbulpin@0 | 47 // ============================================================================ |
jbulpin@0 | 48 |
jbulpin@0 | 49 // ---------------------------------------------------------------------------- |
jbulpin@0 | 50 // Info for the class supported by the instance provider |
jbulpin@0 | 51 // ---------------------------------------------------------------------------- |
jbulpin@0 | 52 |
jbulpin@0 | 53 /* Name of the class implemented by this instance provider. */ |
jbulpin@0 | 54 /*** CUSTOMIZE FOR EACH PROVIDER ***/ |
jbulpin@0 | 55 static char * _CLASSNAME = "Xen_ProcessorPool"; |
jbulpin@0 | 56 |
jbulpin@0 | 57 /* NULL terminated list of key properties of this class. */ |
jbulpin@0 | 58 /*** CUSTOMIZE FOR EACH PROVIDER ***/ |
jfehlig@14 | 59 const static char * _KEYNAMES[] = {"InstanceID", NULL}; |
jbulpin@0 | 60 |
jbulpin@0 | 61 // ---------------------------------------------------------------------------- |
jbulpin@0 | 62 // Cleanup() |
jbulpin@0 | 63 // Perform any necessary cleanup immediately before this provider is unloaded. |
jbulpin@0 | 64 // ---------------------------------------------------------------------------- |
jbulpin@0 | 65 static CMPIStatus Cleanup( |
jbulpin@0 | 66 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 67 CMPIContext * context) /* [in] Additional context info, if any. */ |
jbulpin@0 | 68 { |
jbulpin@0 | 69 CMPIStatus status = { CMPI_RC_OK, NULL }; /* Return status of CIM operations. */ |
jbulpin@0 | 70 |
jbulpin@0 | 71 _SBLIM_ENTER("Cleanup"); |
jbulpin@0 | 72 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 73 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 74 |
jbulpin@0 | 75 /* Nothing needs to be done for cleanup. */ |
jbulpin@0 | 76 |
jbulpin@0 | 77 exit: |
jbulpin@0 | 78 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 79 } |
jbulpin@0 | 80 |
jbulpin@0 | 81 // ---------------------------------------------------------------------------- |
jbulpin@0 | 82 // EnumInstanceNames() |
jbulpin@0 | 83 // Return a list of all the instances names (return their object paths only). |
jbulpin@0 | 84 // ---------------------------------------------------------------------------- |
jbulpin@0 | 85 static CMPIStatus EnumInstanceNames( |
jbulpin@0 | 86 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 87 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 88 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 89 CMPIObjectPath * reference) /* [in] Contains target namespace and classname. */ |
jbulpin@0 | 90 { |
jbulpin@0 | 91 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 92 _RESOURCES * resources; /* Handle to the list of system resources. */ |
jbulpin@0 | 93 _RESOURCE * resource; /* Handle to each system resource. */ |
jbulpin@0 | 94 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 95 int found = 0; /* Found any instances? */ |
jbulpin@0 | 96 |
jbulpin@0 | 97 _SBLIM_ENTER("EnumInstanceNames"); |
jbulpin@0 | 98 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 99 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 100 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 101 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 102 |
jbulpin@0 | 103 /* Get a handle to the list of system resources. */ |
jbulpin@0 | 104 if (!Xen_ProcessorPool_getResources(&resources)) { |
jbulpin@0 | 105 _SBLIM_TRACE(1,("--- _getResources() failed")); |
jbulpin@0 | 106 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to get list of system resources"); |
jbulpin@0 | 107 goto exit; |
jbulpin@0 | 108 } |
jbulpin@0 | 109 |
jbulpin@0 | 110 /* Enumerate thru the list of system resources and return a CMPIInstance for each. */ |
jbulpin@0 | 111 while (Xen_ProcessorPool_getNextResource(resources, &resource)) { |
jbulpin@0 | 112 /* Create a new CMPIInstance to store this resource. */ |
jbulpin@0 | 113 CMPIInstance * instance = _CMNewInstance(_BROKER, namespace, _CLASSNAME, &status); |
jbulpin@0 | 114 if ((status.rc != CMPI_RC_OK) || CMIsNullObject(instance)) { |
jbulpin@0 | 115 _SBLIM_TRACE(1,("--- CMNewInstance() failed - %s", CMGetCharPtr(status.msg))); |
jbulpin@0 | 116 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERROR, "Cannot create new CMPIInstance"); |
jbulpin@0 | 117 goto exit; |
jbulpin@0 | 118 } |
jbulpin@0 | 119 |
jbulpin@0 | 120 /* Set the instance property values from the resource data. */ |
jbulpin@0 | 121 if (!Xen_ProcessorPool_setInstanceFromResource(resource, instance, _BROKER)) { |
jbulpin@0 | 122 _SBLIM_TRACE(1,("--- _setInstanceFromResource() failed")); |
jbulpin@0 | 123 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to set property values from resource data"); |
jbulpin@0 | 124 goto exit; |
jbulpin@0 | 125 } |
jbulpin@0 | 126 |
jbulpin@0 | 127 /* Free the resource data. */ |
jbulpin@0 | 128 if (!Xen_ProcessorPool_freeResource(resource)) { |
jbulpin@0 | 129 _SBLIM_TRACE(1,("--- _freeResource() failed")); |
jbulpin@0 | 130 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free resource data"); |
jbulpin@0 | 131 goto exit; |
jbulpin@0 | 132 } |
jbulpin@0 | 133 |
jbulpin@0 | 134 /* Return the CMPIObjectPath for this instance. */ |
jbulpin@0 | 135 CMPIObjectPath * objectpath = CMGetObjectPath(instance, &status); |
jbulpin@0 | 136 if ((status.rc != CMPI_RC_OK) || CMIsNullObject(objectpath)) { |
jbulpin@0 | 137 _SBLIM_TRACE(1,("--- CMGetObjectPath() failed - %s", CMGetCharPtr(status.msg))); |
jbulpin@0 | 138 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERROR, "Cannot get CMPIObjectPath for instance"); |
jbulpin@0 | 139 goto exit; |
jbulpin@0 | 140 } |
jbulpin@0 | 141 CMSetNameSpace(objectpath, namespace); /* Note - CMGetObjectPath() does not preserve the namespace! */ |
jbulpin@0 | 142 |
jbulpin@0 | 143 _SBLIM_TRACE(3,("--- objectpath=\"%s\"", CMGetCharPtr(CDToString(_BROKER, objectpath, NULL)))); |
jbulpin@0 | 144 CMReturnObjectPath(results, objectpath); |
jbulpin@0 | 145 found++; |
jbulpin@0 | 146 } |
jbulpin@0 | 147 |
jbulpin@0 | 148 _SBLIM_TRACE(2,("--- %d object paths found", found)); |
jbulpin@0 | 149 CMReturnDone(results); |
jbulpin@0 | 150 |
jbulpin@0 | 151 exit: |
jbulpin@0 | 152 /* Free the list of system resources. */ |
jbulpin@0 | 153 if (!Xen_ProcessorPool_freeResources(resources)) { |
jbulpin@0 | 154 _SBLIM_TRACE(1,("--- _freeResources() failed")); |
jbulpin@0 | 155 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free list of system resources"); |
jbulpin@0 | 156 } |
jbulpin@0 | 157 |
jbulpin@0 | 158 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 159 } |
jbulpin@0 | 160 |
jbulpin@0 | 161 // ---------------------------------------------------------------------------- |
jbulpin@0 | 162 // EnumInstances() |
jbulpin@0 | 163 // Return a list of all the instances (return all the instance data). |
jbulpin@0 | 164 // ---------------------------------------------------------------------------- |
jbulpin@0 | 165 static CMPIStatus EnumInstances( |
jbulpin@0 | 166 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 167 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 168 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 169 CMPIObjectPath * reference, /* [in] Contains target namespace and classname. */ |
jbulpin@0 | 170 const char ** properties) /* [in] List of desired properties (NULL=all). */ |
jbulpin@0 | 171 { |
jbulpin@0 | 172 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 173 _RESOURCES * resources; /* Handle to the list of system resources. */ |
jbulpin@0 | 174 _RESOURCE * resource; /* Handle to each system resource. */ |
jbulpin@0 | 175 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 176 int found = 0; /* Found any resource instances? */ |
jbulpin@0 | 177 |
jbulpin@0 | 178 _SBLIM_ENTER("EnumInstances"); |
jbulpin@0 | 179 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 180 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 181 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 182 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 183 |
jbulpin@0 | 184 /* Get a handle to the list of system resources. */ |
jbulpin@0 | 185 if (!Xen_ProcessorPool_getResources(&resources)) { |
jbulpin@0 | 186 _SBLIM_TRACE(1,("--- _getResources() failed")); |
jbulpin@0 | 187 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to get list of system resources"); |
jbulpin@0 | 188 goto exit; |
jbulpin@0 | 189 } |
jbulpin@0 | 190 |
jbulpin@0 | 191 /* Enumerate thru the list of system resources and return a CMPIInstance for each. */ |
jbulpin@0 | 192 while (Xen_ProcessorPool_getNextResource(resources, &resource)) { |
jbulpin@0 | 193 /* Create a new CMPIInstance to store this resource. */ |
jbulpin@0 | 194 CMPIInstance * instance = _CMNewInstance(_BROKER, namespace, _CLASSNAME, &status); |
jbulpin@0 | 195 if ((status.rc != CMPI_RC_OK) || CMIsNullObject(instance)) { |
jbulpin@0 | 196 _SBLIM_TRACE(1,("--- CMNewInstance() failed - %s", CMGetCharPtr(status.msg))); |
jbulpin@0 | 197 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERROR, "Cannot create new CMPIInstance"); |
jbulpin@0 | 198 goto exit; |
jbulpin@0 | 199 } |
jbulpin@0 | 200 |
jbulpin@0 | 201 /* Setup a filter to only return the desired properties. */ |
jbulpin@0 | 202 status = CMSetPropertyFilter(instance, properties, _KEYNAMES); |
jbulpin@0 | 203 if (status.rc != CMPI_RC_OK) { |
jbulpin@0 | 204 _SBLIM_TRACE(1, ("--- CMSetPropertyFilter() failed - %s", CMGetCharPtr(status.msg))); |
jbulpin@0 | 205 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Cannot set property filter"); |
jbulpin@0 | 206 goto exit; |
jbulpin@0 | 207 } |
jbulpin@0 | 208 |
jbulpin@0 | 209 /* Set the instance property values from the resource data. */ |
jbulpin@0 | 210 if (!Xen_ProcessorPool_setInstanceFromResource(resource, instance, _BROKER)) { |
jbulpin@0 | 211 _SBLIM_TRACE(1,("--- _setInstanceFromResource() failed")); |
jbulpin@0 | 212 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to set property values from resource data"); |
jbulpin@0 | 213 goto exit; |
jbulpin@0 | 214 } |
jbulpin@0 | 215 |
jbulpin@0 | 216 /* Free the resource data. */ |
jbulpin@0 | 217 if (!Xen_ProcessorPool_freeResource(resource)) { |
jbulpin@0 | 218 _SBLIM_TRACE(1,("--- _freeResource() failed")); |
jbulpin@0 | 219 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free resource data"); |
jbulpin@0 | 220 goto exit; |
jbulpin@0 | 221 } |
jbulpin@0 | 222 |
jbulpin@0 | 223 /* Return the CMPIInstance for this instance. */ |
jbulpin@0 | 224 _SBLIM_TRACE(3,("--- instance=\"%s\"", CMGetCharPtr(CDToString(_BROKER, instance, NULL)))); |
jbulpin@0 | 225 CMReturnInstance(results, instance); |
jbulpin@0 | 226 found++; |
jbulpin@0 | 227 } |
jbulpin@0 | 228 |
jbulpin@0 | 229 _SBLIM_TRACE(2,("--- %d instances found", found)); |
jbulpin@0 | 230 CMReturnDone(results); |
jbulpin@0 | 231 |
jbulpin@0 | 232 exit: |
jbulpin@0 | 233 /* Free the list of system resources. */ |
jbulpin@0 | 234 if (!Xen_ProcessorPool_freeResources(resources)) { |
jbulpin@0 | 235 _SBLIM_TRACE(1,("--- _freeResources() failed")); |
jbulpin@0 | 236 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free list of system resources"); |
jbulpin@0 | 237 } |
jbulpin@0 | 238 |
jbulpin@0 | 239 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 240 } |
jbulpin@0 | 241 |
jbulpin@0 | 242 // ---------------------------------------------------------------------------- |
jbulpin@0 | 243 // GetInstance() |
jbulpin@0 | 244 // Return the instance data for the specified instance only. |
jbulpin@0 | 245 // ---------------------------------------------------------------------------- |
jbulpin@0 | 246 static CMPIStatus GetInstance( |
jbulpin@0 | 247 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 248 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 249 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 250 CMPIObjectPath * reference, /* [in] Contains the target namespace, classname and object path. */ |
jbulpin@0 | 251 const char ** properties) /* [in] List of desired properties (NULL=all). */ |
jbulpin@0 | 252 { |
jbulpin@0 | 253 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 254 _RESOURCES * resources; /* Handle to the list of system resources. */ |
jbulpin@0 | 255 _RESOURCE * resource; /* Handle to the system resource. */ |
jbulpin@0 | 256 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 257 int found = 0; /* Found the target instance? */ |
jbulpin@0 | 258 |
jbulpin@0 | 259 _SBLIM_ENTER("GetInstance"); |
jbulpin@0 | 260 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 261 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 262 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 263 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 264 |
jbulpin@0 | 265 /* Get a handle to the list of system resources. */ |
jbulpin@0 | 266 if (!Xen_ProcessorPool_getResources(&resources)) { |
jbulpin@0 | 267 _SBLIM_TRACE(1,("--- _getResources() failed")); |
jbulpin@0 | 268 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to get list of system resources"); |
jbulpin@0 | 269 goto exit; |
jbulpin@0 | 270 } |
jbulpin@0 | 271 |
jbulpin@0 | 272 /* Get the target resource. */ |
jbulpin@0 | 273 found = Xen_ProcessorPool_getResourceForObjectPath(resources, &resource, reference); |
jbulpin@0 | 274 if (!found || (resource == NULL)) { |
jbulpin@0 | 275 _SBLIM_TRACE(1,("--- Target instance not found")); |
jbulpin@0 | 276 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_FOUND, "Target instance not found"); |
jbulpin@0 | 277 goto exit; |
jbulpin@0 | 278 } |
jbulpin@0 | 279 |
jbulpin@0 | 280 /* Create a new CMPIInstance to store this resource. */ |
jbulpin@0 | 281 CMPIInstance * instance = _CMNewInstance(_BROKER, namespace, _CLASSNAME, &status); |
jbulpin@0 | 282 if ((status.rc != CMPI_RC_OK) || CMIsNullObject(instance)) { |
jbulpin@0 | 283 _SBLIM_TRACE(1,("--- CMNewInstance() failed - %s", CMGetCharPtr(status.msg))); |
jbulpin@0 | 284 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERROR, "Cannot create new CMPIInstance"); |
jbulpin@0 | 285 goto exit; |
jbulpin@0 | 286 } |
jbulpin@0 | 287 |
jbulpin@0 | 288 /* Setup a filter to only return the desired properties. */ |
jbulpin@0 | 289 status = CMSetPropertyFilter(instance, properties, _KEYNAMES); |
jbulpin@0 | 290 if (status.rc != CMPI_RC_OK) { |
jbulpin@0 | 291 _SBLIM_TRACE(1, ("--- CMSetPropertyFilter() failed - %s", CMGetCharPtr(status.msg))); |
jbulpin@0 | 292 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Cannot set property filter"); |
jbulpin@0 | 293 goto exit; |
jbulpin@0 | 294 } |
jbulpin@0 | 295 |
jbulpin@0 | 296 /* Set the instance property values from the resource data. */ |
jbulpin@0 | 297 if (!Xen_ProcessorPool_setInstanceFromResource(resource, instance, _BROKER)) { |
jbulpin@0 | 298 _SBLIM_TRACE(1,("--- _setInstanceFromResource() failed")); |
jbulpin@0 | 299 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to set property values from resource data"); |
jbulpin@0 | 300 goto exit; |
jbulpin@0 | 301 } |
jbulpin@0 | 302 |
jbulpin@0 | 303 /* Free the resource data. */ |
jbulpin@0 | 304 if (!Xen_ProcessorPool_freeResource(resource)) { |
jbulpin@0 | 305 _SBLIM_TRACE(1,("--- _freeResource() failed")); |
jbulpin@0 | 306 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free resource data"); |
jbulpin@0 | 307 goto exit; |
jbulpin@0 | 308 } |
jbulpin@0 | 309 |
jbulpin@0 | 310 /* Return the CMPIInstance for this instance. */ |
jbulpin@0 | 311 _SBLIM_TRACE(3,("--- instance=\"%s\"", CMGetCharPtr(CDToString(_BROKER, instance, NULL)))); |
jbulpin@0 | 312 CMReturnInstance(results, instance); |
jbulpin@0 | 313 |
jbulpin@0 | 314 _SBLIM_TRACE(2,("--- instance found")); |
jbulpin@0 | 315 CMReturnDone(results); |
jbulpin@0 | 316 |
jbulpin@0 | 317 exit: |
jbulpin@0 | 318 /* Free the list of system resources. */ |
jbulpin@0 | 319 if (!Xen_ProcessorPool_freeResources(resources)) { |
jbulpin@0 | 320 _SBLIM_TRACE(1,("--- _freeResources() failed")); |
jbulpin@0 | 321 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free list of system resources"); |
jbulpin@0 | 322 } |
jbulpin@0 | 323 |
jbulpin@0 | 324 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 325 } |
jbulpin@0 | 326 |
jbulpin@0 | 327 // ---------------------------------------------------------------------------- |
jbulpin@0 | 328 // SetInstance() |
jbulpin@0 | 329 // Save modified instance data for the specified instance. |
jbulpin@0 | 330 // ---------------------------------------------------------------------------- |
jbulpin@0 | 331 static CMPIStatus SetInstance( |
jbulpin@0 | 332 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 333 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 334 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 335 CMPIObjectPath * reference, /* [in] Contains the target namespace, classname and object path. */ |
jbulpin@0 | 336 CMPIInstance * newinstance) /* [in] Contains the new instance data. */ |
jbulpin@0 | 337 { |
jbulpin@0 | 338 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 339 _RESOURCES * resources; /* Handle to the list of system resources. */ |
jbulpin@0 | 340 _RESOURCE * resource; /* Handle to the system resource. */ |
jbulpin@0 | 341 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 342 int found = 0; /* Found the target instance? */ |
jbulpin@0 | 343 |
jbulpin@0 | 344 _SBLIM_ENTER("SetInstance"); |
jbulpin@0 | 345 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 346 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 347 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 348 _SBLIM_TRACE(2, ("--- newinstance=\"%s\"", CMGetCharPtr(CDToString(_BROKER, newinstance, NULL)))); |
jbulpin@0 | 349 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 350 |
jbulpin@0 | 351 /* Get a handle to the list of system resources. */ |
jbulpin@0 | 352 if (!Xen_ProcessorPool_getResources(&resources)) { |
jbulpin@0 | 353 _SBLIM_TRACE(1,("--- _getResources() failed")); |
jbulpin@0 | 354 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to get list of system resources"); |
jbulpin@0 | 355 goto exit; |
jbulpin@0 | 356 } |
jbulpin@0 | 357 |
jbulpin@0 | 358 /* Get the target resource. */ |
jbulpin@0 | 359 found = Xen_ProcessorPool_getResourceForObjectPath(resources, &resource, reference); |
jbulpin@0 | 360 if (!found || (resource == NULL)) { |
jbulpin@0 | 361 _SBLIM_TRACE(1,("--- Target instance not found")); |
jbulpin@0 | 362 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_FOUND, "Target instance not found"); |
jbulpin@0 | 363 goto exit; |
jbulpin@0 | 364 } |
jbulpin@0 | 365 |
jbulpin@0 | 366 _SBLIM_TRACE(2,("--- instance found", found)); |
jbulpin@0 | 367 |
jbulpin@0 | 368 /* Update the target resource data with the new instance property values. */ |
jbulpin@0 | 369 int rc = Xen_ProcessorPool_setResourceFromInstance(resource, newinstance, _BROKER); |
jbulpin@0 | 370 |
jbulpin@0 | 371 /* Free the resource data. */ |
jbulpin@0 | 372 if (!Xen_ProcessorPool_freeResource(resource)) { |
jbulpin@0 | 373 _SBLIM_TRACE(1,("--- _freeResource() failed")); |
jbulpin@0 | 374 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free resource data"); |
jbulpin@0 | 375 goto exit; |
jbulpin@0 | 376 } |
jbulpin@0 | 377 |
jbulpin@0 | 378 if (rc != 1) { |
jbulpin@0 | 379 if (rc == -1) { |
jbulpin@0 | 380 _SBLIM_TRACE(1,("--- _setResourceFromInstance() unsupported")); |
jbulpin@0 | 381 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_SUPPORTED, NULL); |
jbulpin@0 | 382 } else { |
jbulpin@0 | 383 _SBLIM_TRACE(1,("--- _setResourceFromInstance() failed")); |
jbulpin@0 | 384 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to set resource data from instance properties"); |
jbulpin@0 | 385 } |
jbulpin@0 | 386 goto exit; |
jbulpin@0 | 387 } |
jbulpin@0 | 388 |
jbulpin@0 | 389 exit: |
jbulpin@0 | 390 /* Free the list of system resources. */ |
jbulpin@0 | 391 if (!Xen_ProcessorPool_freeResources(resources)) { |
jbulpin@0 | 392 _SBLIM_TRACE(1,("--- _freeResources() failed")); |
jbulpin@0 | 393 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free list of system resources"); |
jbulpin@0 | 394 } |
jbulpin@0 | 395 |
jbulpin@0 | 396 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 397 } |
jbulpin@0 | 398 |
jbulpin@0 | 399 // ---------------------------------------------------------------------------- |
jbulpin@0 | 400 // CreateInstance() |
jbulpin@0 | 401 // Create a new instance from the specified instance data. |
jbulpin@0 | 402 // ---------------------------------------------------------------------------- |
jbulpin@0 | 403 static CMPIStatus CreateInstance( |
jbulpin@0 | 404 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 405 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 406 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 407 CMPIObjectPath * reference, /* [in] Contains the target namespace, classname and object path. */ |
jbulpin@0 | 408 CMPIInstance * newinstance) /* [in] Contains the new instance data. */ |
jbulpin@0 | 409 { |
jbulpin@0 | 410 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 411 _RESOURCES * resources; /* Handle to the list of system resources. */ |
jbulpin@0 | 412 _RESOURCE * resource; /* Handle to the system resource. */ |
jbulpin@0 | 413 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 414 int found = 0; /* Found the target instance? */ |
jbulpin@0 | 415 |
jbulpin@0 | 416 _SBLIM_ENTER("CreateInstance"); |
jbulpin@0 | 417 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 418 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 419 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 420 _SBLIM_TRACE(2, ("--- newinstance=\"%s\"", CMGetCharPtr(CDToString(_BROKER, newinstance, NULL)))); |
jbulpin@0 | 421 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 422 |
jbulpin@0 | 423 /* WORKAROUND FOR PEGASUS BUG?! reference does not contain object path, only namespace & classname. */ |
jbulpin@0 | 424 reference = CMGetObjectPath(newinstance, NULL); |
jbulpin@0 | 425 |
jbulpin@0 | 426 /* Get a handle to the list of system resources. */ |
jbulpin@0 | 427 if (!Xen_ProcessorPool_getResources(&resources)) { |
jbulpin@0 | 428 _SBLIM_TRACE(1,("--- _getResources() failed")); |
jbulpin@0 | 429 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to get list of system resources"); |
jbulpin@0 | 430 goto exit; |
jbulpin@0 | 431 } |
jbulpin@0 | 432 |
jbulpin@0 | 433 /* Get the target resource. */ |
jbulpin@0 | 434 found = Xen_ProcessorPool_getResourceForObjectPath(resources, &resource, reference); |
jbulpin@0 | 435 |
jbulpin@0 | 436 /* Free the resource data. */ |
jbulpin@0 | 437 if (!Xen_ProcessorPool_freeResource(resource)) { |
jbulpin@0 | 438 _SBLIM_TRACE(1,("--- _freeResource() failed")); |
jbulpin@0 | 439 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free resource data"); |
jbulpin@0 | 440 goto exit; |
jbulpin@0 | 441 } |
jbulpin@0 | 442 |
jbulpin@0 | 443 if (found) { |
jbulpin@0 | 444 _SBLIM_TRACE(1,("--- Target instance already exists")); |
jbulpin@0 | 445 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_ALREADY_EXISTS, "Target instance already exists"); |
jbulpin@0 | 446 goto exit; |
jbulpin@0 | 447 } |
jbulpin@0 | 448 |
jbulpin@0 | 449 /* Create a new resource with the new instance property values. */ |
jbulpin@0 | 450 int rc = Xen_ProcessorPool_createResourceFromInstance(resources, &resource, newinstance, _BROKER); |
jbulpin@0 | 451 if (rc != 1) { |
jbulpin@0 | 452 if (rc == -1) { |
jbulpin@0 | 453 _SBLIM_TRACE(1,("--- _createResourceFromInstance() unsupported")); |
jbulpin@0 | 454 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_SUPPORTED, NULL); |
jbulpin@0 | 455 } else { |
jbulpin@0 | 456 _SBLIM_TRACE(1,("--- _createResourceFromInstance() failed")); |
jbulpin@0 | 457 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to create resource data from instance properties"); |
jbulpin@0 | 458 } |
jbulpin@0 | 459 goto exit; |
jbulpin@0 | 460 } |
jbulpin@0 | 461 |
jbulpin@0 | 462 /* Return the object path for the newly created instance. */ |
jbulpin@0 | 463 CMPIObjectPath * objectpath = CMGetObjectPath(newinstance, NULL); |
jbulpin@0 | 464 CMSetNameSpace(objectpath, namespace); |
jbulpin@0 | 465 CMReturnObjectPath(results, objectpath); |
jbulpin@0 | 466 CMReturnDone(results); |
jbulpin@0 | 467 |
jbulpin@0 | 468 exit: |
jbulpin@0 | 469 /* Free the list of system resources. */ |
jbulpin@0 | 470 if (!Xen_ProcessorPool_freeResources(resources)) { |
jbulpin@0 | 471 _SBLIM_TRACE(1,("--- _freeResources() failed")); |
jbulpin@0 | 472 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free list of system resources"); |
jbulpin@0 | 473 } |
jbulpin@0 | 474 |
jbulpin@0 | 475 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 476 } |
jbulpin@0 | 477 |
jbulpin@0 | 478 // ---------------------------------------------------------------------------- |
jbulpin@0 | 479 // DeleteInstance() |
jbulpin@0 | 480 // Delete or remove the specified instance from the system. |
jbulpin@0 | 481 // ---------------------------------------------------------------------------- |
jbulpin@0 | 482 static CMPIStatus DeleteInstance( |
jbulpin@0 | 483 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 484 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 485 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 486 CMPIObjectPath * reference) /* [in] Contains the target namespace, classname and object path. */ |
jbulpin@0 | 487 { |
jbulpin@0 | 488 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 489 _RESOURCES * resources; /* Handle to the list of system resources. */ |
jbulpin@0 | 490 _RESOURCE * resource; /* Handle to the system resource. */ |
jbulpin@0 | 491 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 492 int found = 0; /* Found the target instance? */ |
jbulpin@0 | 493 |
jbulpin@0 | 494 _SBLIM_ENTER("DeleteInstance"); |
jbulpin@0 | 495 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 496 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 497 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 498 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 499 |
jbulpin@0 | 500 /* Get a handle to the list of system resources. */ |
jbulpin@0 | 501 if (!Xen_ProcessorPool_getResources(&resources)) { |
jbulpin@0 | 502 _SBLIM_TRACE(1,("--- _getResources() failed")); |
jbulpin@0 | 503 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to get list of system resources"); |
jbulpin@0 | 504 goto exit; |
jbulpin@0 | 505 } |
jbulpin@0 | 506 |
jbulpin@0 | 507 /* Get the target resource. */ |
jbulpin@0 | 508 found = Xen_ProcessorPool_getResourceForObjectPath(resources, &resource, reference); |
jbulpin@0 | 509 if (!found || (resource == NULL)) { |
jbulpin@0 | 510 _SBLIM_TRACE(1,("--- Target instance not found")); |
jbulpin@0 | 511 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_FOUND, "Target instance not found"); |
jbulpin@0 | 512 goto exit; |
jbulpin@0 | 513 } |
jbulpin@0 | 514 |
jbulpin@0 | 515 _SBLIM_TRACE(2,("--- instance found", found)); |
jbulpin@0 | 516 |
jbulpin@0 | 517 /* Delete the target resource. */ |
jbulpin@0 | 518 int rc = Xen_ProcessorPool_deleteResource(resources, resource); |
jbulpin@0 | 519 |
jbulpin@0 | 520 /* Free the resource data. */ |
jbulpin@0 | 521 if (!Xen_ProcessorPool_freeResource(resource)) { |
jbulpin@0 | 522 _SBLIM_TRACE(1,("--- _freeResource() failed")); |
jbulpin@0 | 523 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free resource data"); |
jbulpin@0 | 524 goto exit; |
jbulpin@0 | 525 } |
jbulpin@0 | 526 |
jbulpin@0 | 527 if (rc != 1) { |
jbulpin@0 | 528 if (rc == -1) { |
jbulpin@0 | 529 _SBLIM_TRACE(1,("--- __deleteResource() unsupported")); |
jbulpin@0 | 530 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_SUPPORTED, NULL); |
jbulpin@0 | 531 } else { |
jbulpin@0 | 532 _SBLIM_TRACE(1,("--- _deleteResource() failed")); |
jbulpin@0 | 533 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to delete resource"); |
jbulpin@0 | 534 } |
jbulpin@0 | 535 goto exit; |
jbulpin@0 | 536 } |
jbulpin@0 | 537 |
jbulpin@0 | 538 exit: |
jbulpin@0 | 539 /* Free the list of system resources. */ |
jbulpin@0 | 540 if (!Xen_ProcessorPool_freeResources(resources)) { |
jbulpin@0 | 541 _SBLIM_TRACE(1,("--- _freeResources() failed")); |
jbulpin@0 | 542 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_FAILED, "Failed to free list of system resources"); |
jbulpin@0 | 543 } |
jbulpin@0 | 544 |
jbulpin@0 | 545 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 546 } |
jbulpin@0 | 547 |
jbulpin@0 | 548 |
jbulpin@0 | 549 // ---------------------------------------------------------------------------- |
jbulpin@0 | 550 // ExecQuery() |
jbulpin@0 | 551 // Return a list of all the instances that satisfy the specified query filter. |
jbulpin@0 | 552 // ---------------------------------------------------------------------------- |
jbulpin@0 | 553 static CMPIStatus ExecQuery( |
jbulpin@0 | 554 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 555 CMPIContext * context, /* [in] Additional context info, if any. */ |
jbulpin@0 | 556 CMPIResult * results, /* [out] Results of this operation. */ |
jbulpin@0 | 557 CMPIObjectPath * reference, /* [in] Contains the target namespace and classname. */ |
jbulpin@0 | 558 char * language, /* [in] Name of the query language. */ |
jbulpin@0 | 559 char * query) /* [in] Text of the query written in the query language. */ |
jbulpin@0 | 560 { |
jbulpin@0 | 561 CMPIStatus status = {CMPI_RC_OK, NULL}; /* Return status of CIM operations. */ |
jbulpin@0 | 562 char * namespace = CMGetCharPtr(CMGetNameSpace(reference, NULL)); /* Target namespace. */ |
jbulpin@0 | 563 |
jbulpin@0 | 564 _SBLIM_ENTER("ExecQuery"); |
jbulpin@0 | 565 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jbulpin@0 | 566 _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 567 _SBLIM_TRACE(2, ("--- reference=\"%s\"", CMGetCharPtr(CDToString(_BROKER, reference, NULL)))); |
jbulpin@0 | 568 _SBLIM_TRACE(2, ("--- language=\"%s\"", language)); |
jbulpin@0 | 569 _SBLIM_TRACE(2, ("--- query=\"%s\"", query)); |
jbulpin@0 | 570 _SBLIM_TRACE(2, ("--- namespace=\"%s\"", namespace)); |
jbulpin@0 | 571 |
jbulpin@0 | 572 /* EXECQUERY() IS NOT YET SUPPORTED FOR THIS CLASS */ |
jbulpin@0 | 573 CMSetStatusWithChars(_BROKER, &status, CMPI_RC_ERR_NOT_SUPPORTED, NULL); |
jbulpin@0 | 574 |
jbulpin@0 | 575 CMReturnDone(results); |
jbulpin@0 | 576 |
jbulpin@0 | 577 exit: |
jbulpin@0 | 578 _SBLIM_RETURNSTATUS(status); |
jbulpin@0 | 579 } |
jbulpin@0 | 580 |
jbulpin@0 | 581 // ---------------------------------------------------------------------------- |
jbulpin@0 | 582 // Initialize() |
jbulpin@0 | 583 // Perform any necessary initialization immediately after this provider is |
jbulpin@0 | 584 // first loaded. |
jbulpin@0 | 585 // ---------------------------------------------------------------------------- |
jbulpin@0 | 586 static void Initialize( |
jbulpin@0 | 587 CMPIInstanceMI * self, /* [in] Handle to this provider (i.e. 'self'). */ |
jbulpin@0 | 588 CMPIContext * context) /* [in] Additional context info, if any. */ |
jbulpin@0 | 589 { |
jbulpin@0 | 590 _SBLIM_ENTER("Initialize"); |
jbulpin@0 | 591 _SBLIM_TRACE(2, ("--- self=\"%s\"", self->ft->miName)); |
jfehlig@1 | 592 // _SBLIM_TRACE(2, ("--- context=\"%s\"", CMGetCharPtr(CDToString(_BROKER, context, NULL)))); |
jbulpin@0 | 593 |
jbulpin@0 | 594 /* Nothing needs to be done to initialize this provider */ |
jbulpin@0 | 595 |
jbulpin@0 | 596 exit: |
jbulpin@0 | 597 _SBLIM_RETURN(); |
jbulpin@0 | 598 } |
jbulpin@0 | 599 |
jbulpin@0 | 600 // ============================================================================ |
jbulpin@0 | 601 // CMPI INSTANCE PROVIDER FUNCTION TABLE SETUP |
jbulpin@0 | 602 // ============================================================================ |
jfehlig@1 | 603 CMInstanceMIStub( , Xen_ProcessorPool, _BROKER, Initialize(&mi, ctx)); |