# HG changeset patch
# User Richard Maciel <rmaciel(a)linux.vnet.ibm.com>
# Date 1251476195 10800
# Node ID d6a1619f9b188b25dbabb7e58d1b83946aaa4fd8
# Parent 483311e0e542c9882a81e00d77511a4b23334304
Adds state information to the instance created in ComputerSystemDeletedIndication
Had to export the state enumerations in ComputerSystem.c to use in the indication code
#2:
- Changed OtherEnabledState value to 'Guest destroyed'
- Moved state enums to svpc_types.h
#3:
Added info on the newly-created function header
Signed-off-by: Richard Maciel <rmaciel(a)linux.vnet.ibm.com>
diff -r 483311e0e542 -r d6a1619f9b18 src/Virt_ComputerSystem.c
--- a/src/Virt_ComputerSystem.c Fri Aug 28 13:11:04 2009 -0300
+++ b/src/Virt_ComputerSystem.c Fri Aug 28 13:16:35 2009 -0300
@@ -47,18 +47,6 @@
const static CMPIBroker *_BROKER;
-enum CIM_state {
- CIM_STATE_UNKNOWN = 0,
- CIM_STATE_ENABLED = 2,
- CIM_STATE_DISABLED = 3,
- CIM_STATE_SHUTDOWN = 4,
- CIM_STATE_NOCHANGE = 5,
- CIM_STATE_SUSPENDED = 6,
- CIM_STATE_PAUSED = 9,
- CIM_STATE_REBOOT = 10,
- CIM_STATE_RESET = 11,
-};
-
/* Set the "Name" property of an instance from a domain */
static int set_name_from_dom(virDomainPtr dom, CMPIInstance *instance)
{
@@ -159,15 +147,6 @@
static uint16_t state_lv_to_cim_health(const char lv_state)
{
- enum CIM_health_state {
- CIM_HEALTH_UNKNOWN = 0,
- CIM_HEALTH_OK = 5,
- CIM_HEALTH_MINOR_FAILURE = 15,
- CIM_HEALTH_MAJOR_FAILURE = 20,
- CIM_HEALTH_CRITICAL_FAILURE = 25,
- CIM_HEALTH_NON_RECOVERABLE = 30,
- };
-
switch (lv_state) {
case VIR_DOMAIN_NOSTATE:
case VIR_DOMAIN_SHUTDOWN:
@@ -189,28 +168,6 @@
static uint16_t state_lv_to_cim_oings(const char lv_state, const bool migrating)
{
- enum CIM_oping_status {
- CIM_OPING_STATUS_UNKNOWN = 0,
- CIM_OPING_STATUS_NOT_AVAILABLE = 1,
- CIM_OPING_STATUS_SERVICING = 2,
- CIM_OPING_STATUS_STARTING = 3,
- CIM_OPING_STATUS_STOPPING = 4,
- CIM_OPING_STATUS_STOPPED = 5,
- CIM_OPING_STATUS_ABORTED = 6,
- CIM_OPING_STATUS_DORMANT = 7,
- CIM_OPING_STATUS_COMPLETED = 8,
- CIM_OPING_STATUS_MIGRATING = 9,
- CIM_OPING_STATUS_EMIGRATING = 10,
- CIM_OPING_STATUS_IMMIGRATING = 11,
- CIM_OPING_STATUS_SNAPSHOTTING = 12,
- CIM_OPING_STATUS_SHUTTING_DOWN = 13,
- CIM_OPING_STATUS_IN_TEST = 14,
- CIM_OPING_STATUS_TRANSITIONING = 15,
- CIM_OPING_STATUS_IN_SERVICE = 16,
- CIM_OPING_STATUS_STARTED = 32768,
- };
-
-
if (migrating)
return CIM_OPING_STATUS_MIGRATING;
@@ -237,27 +194,6 @@
static uint16_t state_lv_to_cim_os(const char lv_state)
{
- enum CIM_op_status {
- CIM_OP_STATUS_UNKNOWN = 0,
- CIM_OP_STATUS_OTHER = 1,
- CIM_OP_STATUS_OK = 2,
- CIM_OP_STATUS_DEGRADED = 3,
- CIM_OP_STATUS_STRESSED = 4,
- CIM_OP_STATUS_PREDICTIVE_FAILURE = 5,
- CIM_OP_STATUS_ERROR = 6,
- CIM_OP_STATUS_NON_RECOVERABLE = 7,
- CIM_OP_STATUS_STARTING = 8,
- CIM_OP_STATUS_STOPPING = 9,
- CIM_OP_STATUS_STOPPED = 10,
- CIM_OP_STATUS_IN_SERVICE = 11,
- CIM_OP_STATUS_NO_CONTACT = 12,
- CIM_OP_STATUS_LOST_COMMS = 13,
- CIM_OP_STATUS_ABORTED = 14,
- CIM_OP_STATUS_DORMANT = 15,
- CIM_OP_STATUS_COMPLETED = 17,
- CIM_OP_STATUS_POWER_MODE = 18,
- };
-
switch (lv_state) {
case VIR_DOMAIN_NOSTATE:
case VIR_DOMAIN_SHUTDOWN:
diff -r 483311e0e542 -r d6a1619f9b18 src/Virt_ComputerSystem.h
--- a/src/Virt_ComputerSystem.h Fri Aug 28 13:11:04 2009 -0300
+++ b/src/Virt_ComputerSystem.h Fri Aug 28 13:16:35 2009 -0300
@@ -66,7 +66,9 @@
/**
* Create a domain instance from the domain structure. Note that the instance
* doesn't necessarily represents an existing domain (can represent a deleted
- * one, for instance)
+ * one, for instance).
+ * Also, the states of the instance created are not set (i.e. HealthState,
+ * EnableState and others)
*
* @param broker A pointer to the current broker
* @param namespace The namespace to used by the domain instance
diff -r 483311e0e542 -r d6a1619f9b18 src/Virt_ComputerSystemIndication.c
--- a/src/Virt_ComputerSystemIndication.c Fri Aug 28 13:11:04 2009 -0300
+++ b/src/Virt_ComputerSystemIndication.c Fri Aug 28 13:16:35 2009 -0300
@@ -330,6 +330,51 @@
return false;
}
+static bool set_instance_state(CMPIInstance *instance)
+{
+ CMPIStatus s = {CMPI_RC_OK, NULL};
+ CMPIUint16 cim_state;
+ CMPIString *cim_state_other = NULL;
+ CMPIUint16 health_state;
+ CMPIUint16 req_state;
+ CMPIUint16 oping_status;
+ CMPIUint16 op_status;
+ CMPIArray *array;
+
+ cim_state = CIM_STATE_OTHER;
+ cim_state_other = CMNewString(_BROKER, "Guest destroyed", &s);
+ CMSetProperty(instance, "EnabledState",
+ (CMPIValue *)&cim_state, CMPI_uint16);
+ CMSetProperty(instance, "OtherEnabledState",
+ (CMPIValue *)&cim_state_other, CMPI_string);
+
+ health_state = CIM_HEALTH_UNKNOWN;
+ CMSetProperty(instance, "HealthState",
+ (CMPIValue *)&health_state, CMPI_uint16);
+
+ array = CMNewArray(_BROKER, 2, CMPI_uint16, &s);
+ if ((s.rc != CMPI_RC_OK) || (CMIsNullObject(array)))
+ return false;
+
+ op_status = CIM_OP_STATUS_COMPLETED;
+ CMSetArrayElementAt(array, 0, &op_status, CMPI_uint16);
+ op_status = CIM_OP_STATUS_OK;
+ CMSetArrayElementAt(array, 1, &op_status, CMPI_uint16);
+
+ CMSetProperty(instance, "OperationalStatus",
+ (CMPIValue *)&array, CMPI_uint16A);
+
+ oping_status = CIM_OPING_STATUS_COMPLETED;
+ CMSetProperty(instance, "OperatingStatus",
+ (CMPIValue *)&oping_status, CMPI_uint16);
+
+ req_state = CIM_STATE_UNKNOWN;
+ CMSetProperty(instance, "RequestedState",
+ (CMPIValue *)&req_state, CMPI_uint16);
+
+ return true;
+}
+
static bool create_deleted_guest_inst(char *xml,
char *namespace,
char *prefix,
@@ -355,9 +400,10 @@
CU_DEBUG("instance from domain info error: %s", s.msg);
goto out;
}
- /* Must set guest state */
- rc = true;
+ rc = set_instance_state(*inst);
+ if (!rc)
+ CU_DEBUG("Error setting instance state");
out:
cleanup_dominfo(&dominfo);
diff -r 483311e0e542 -r d6a1619f9b18 src/svpc_types.h
--- a/src/svpc_types.h Fri Aug 28 13:11:04 2009 -0300
+++ b/src/svpc_types.h Fri Aug 28 13:16:35 2009 -0300
@@ -102,4 +102,70 @@
return CIM_VSSD_RECOVERY_NONE;
}
+/* State enums used by ComputerSystem */
+enum CIM_state {
+ CIM_STATE_UNKNOWN = 0,
+ CIM_STATE_OTHER = 1,
+ CIM_STATE_ENABLED = 2,
+ CIM_STATE_DISABLED = 3,
+ CIM_STATE_SHUTDOWN = 4,
+ CIM_STATE_NOCHANGE = 5,
+ CIM_STATE_SUSPENDED = 6,
+ CIM_STATE_PAUSED = 9,
+ CIM_STATE_REBOOT = 10,
+ CIM_STATE_RESET = 11,
+};
+
+enum CIM_health_state {
+ CIM_HEALTH_UNKNOWN = 0,
+ CIM_HEALTH_OK = 5,
+ CIM_HEALTH_MINOR_FAILURE = 15,
+ CIM_HEALTH_MAJOR_FAILURE = 20,
+ CIM_HEALTH_CRITICAL_FAILURE = 25,
+ CIM_HEALTH_NON_RECOVERABLE = 30,
+};
+
+enum CIM_oping_status {
+ CIM_OPING_STATUS_UNKNOWN = 0,
+ CIM_OPING_STATUS_NOT_AVAILABLE = 1,
+ CIM_OPING_STATUS_SERVICING = 2,
+ CIM_OPING_STATUS_STARTING = 3,
+ CIM_OPING_STATUS_STOPPING = 4,
+ CIM_OPING_STATUS_STOPPED = 5,
+ CIM_OPING_STATUS_ABORTED = 6,
+ CIM_OPING_STATUS_DORMANT = 7,
+ CIM_OPING_STATUS_COMPLETED = 8,
+ CIM_OPING_STATUS_MIGRATING = 9,
+ CIM_OPING_STATUS_EMIGRATING = 10,
+ CIM_OPING_STATUS_IMMIGRATING = 11,
+ CIM_OPING_STATUS_SNAPSHOTTING = 12,
+ CIM_OPING_STATUS_SHUTTING_DOWN = 13,
+ CIM_OPING_STATUS_IN_TEST = 14,
+ CIM_OPING_STATUS_TRANSITIONING = 15,
+ CIM_OPING_STATUS_IN_SERVICE = 16,
+ CIM_OPING_STATUS_STARTED = 32768,
+};
+
+enum CIM_op_status {
+ CIM_OP_STATUS_UNKNOWN = 0,
+ CIM_OP_STATUS_OTHER = 1,
+ CIM_OP_STATUS_OK = 2,
+ CIM_OP_STATUS_DEGRADED = 3,
+ CIM_OP_STATUS_STRESSED = 4,
+ CIM_OP_STATUS_PREDICTIVE_FAILURE = 5,
+ CIM_OP_STATUS_ERROR = 6,
+ CIM_OP_STATUS_NON_RECOVERABLE = 7,
+ CIM_OP_STATUS_STARTING = 8,
+ CIM_OP_STATUS_STOPPING = 9,
+ CIM_OP_STATUS_STOPPED = 10,
+ CIM_OP_STATUS_IN_SERVICE = 11,
+ CIM_OP_STATUS_NO_CONTACT = 12,
+ CIM_OP_STATUS_LOST_COMMS = 13,
+ CIM_OP_STATUS_ABORTED = 14,
+ CIM_OP_STATUS_DORMANT = 15,
+ CIM_OP_STATUS_COMPLETED = 17,
+ CIM_OP_STATUS_POWER_MODE = 18,
+};
+
+
#endif