From: <dr_...@us...> - 2011-05-17 21:20:32
|
Revision: 7308 http://openhpi.svn.sourceforge.net/openhpi/?rev=7308&view=rev Author: dr_mohan Date: 2011-05-17 21:20:25 +0000 (Tue, 17 May 2011) Log Message: ----------- Fix for bug 3117730 - Export per blade status and configuration errors. Only enclosure information is taken into account using DC/AC power supplies. Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c openhpi/trunk/plugins/oa_soap/oa_soap_calls.h openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2011-05-10 22:33:25 UTC (rev 7307) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2011-05-17 21:20:25 UTC (rev 7308) @@ -1154,6 +1154,11 @@ if ((node = soap_walk_tree(events, "enclosureInfo"))) { result->enum_eventInfo = ENCLOSUREINFO; parse_enclosureInfo(node, &(result->eventData.enclosureInfo)); + if ((node = soap_walk_tree(events, "powerSubsystemInfo"))) { + result->eventData.enclosureInfo.powerType = + soap_enum(powerSystemType_S, + soap_tree_value(node, "subsystemType")); + } return; } @@ -1417,7 +1422,19 @@ int soap_getEnclosureInfo(SOAP_CON *con, struct enclosureInfo *response) { + xmlNode *node=NULL; SOAP_PARM_CHECK_NRQ + if (! (ret = soap_request(con, GET_POWER_SUBSYSTEM_INFO))) { + node = soap_walk_doc(con->doc, + "Body:" + "getPowerSubsystemInfoResponse:" + "powerSubsystemInfo"); + response->powerType = soap_enum(powerSystemType_S, + soap_tree_value(node, + "subsystemType")); + + } + if (! (ret = soap_request(con, GET_ENCLOSURE_INFO))) { parse_enclosureInfo(soap_walk_doc(con->doc, "Body:" Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2011-05-10 22:33:25 UTC (rev 7307) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2011-05-17 21:20:25 UTC (rev 7308) @@ -1069,6 +1069,7 @@ char *pduPartNumber; char *pduSparePartNumber; xmlNode *extraData; /* Items are struct extraDataInfo */ + int powerType; }; struct oaStatus Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2011-05-10 22:33:25 UTC (rev 7307) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2011-05-17 21:20:25 UTC (rev 7308) @@ -1314,6 +1314,8 @@ struct oa_soap_handler *oa_handler = NULL; SaHpiResourceIdT resource_id; SaHpiRptEntryT *rpt = NULL; + char *telco_status = NULL; + char *power_type = NULL; if (oh_handler == NULL || response == NULL || rdr == NULL || inventory == NULL) { @@ -1455,6 +1457,73 @@ local_inventory->info.area_list->idr_area_head. NumFields++; } + + switch(response->powerType){ + case 0: telco_status = "Telco_Status: UNKNOWN"; + power_type = "Power_Type: NO_OP"; + break; + case 1: telco_status = "Telco_Status: UNKNOWN"; + power_type = "Power_Type: UNKNOWN"; + break; + case 2: telco_status = "Telco_Status: FALSE"; + power_type = "Power_Type: INTERNAL_AC"; + break; + case 3: telco_status = "Telco_Status: FALSE"; + power_type = "Power_Type: INTERNAL_DC"; + break; + case 4: telco_status = "Telco_Status: TRUE"; + power_type = "Power_Type: EXTERNAL_DC"; + break; + default : telco_status = "Telco_Status: UNKNOWN"; + power_type = "Power_Type: UNKNOWN"; + break; + } + + /* Add the telco status field if the enclosure hardware info + * is available + */ + if (telco_status != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + strcpy ((char *)hpi_field.Field.Data, telco_status); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + } + + /* Add the power type field if the enclosure hardware info + * is available + */ + if (power_type != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + strcpy ((char *)hpi_field.Field.Data, power_type); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + } } return SA_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2011-07-18 14:00:32
|
Revision: 7340 http://openhpi.svn.sourceforge.net/openhpi/?rev=7340&view=rev Author: dr_mohan Date: 2011-07-18 14:00:25 +0000 (Mon, 18 Jul 2011) Log Message: ----------- Handling the BLADE_INFO event to get the serial number. This resolves 2791727 and 2967121 serial number goes unknown after extraction and re-insertion and Incorrect serial number reported Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2011-07-11 12:17:47 UTC (rev 7339) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2011-07-18 14:00:25 UTC (rev 7340) @@ -856,7 +856,9 @@ &(event.eventData.bladeStatus)); break; case EVENT_BLADE_INFO: - dbg("EVENT_BLADE_INFO -- Not processed"); + dbg("EVENT_BLADE_INFO"); + rv = process_server_info_event(oh_handler, + oa->event_con2, &event); break; case EVENT_BLADE_MP_INFO: dbg("EVENT_BLADE_MP_INFO -- Not processed"); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2011-07-11 12:17:47 UTC (rev 7339) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2011-07-18 14:00:25 UTC (rev 7340) @@ -539,6 +539,85 @@ } /** + * process_server_info_event + * @oh_handler: Pointer to openhpi handler structure + * @con: Pointer to the SOAP_CON structure + * @oa_event: Pointer to OA event structure + * + * Purpose: + * Check if the serial number is there, if so insert. + * This is bad as the query does not get the complete details + * We need to make OA do the right stuff. + * This is created only as an additional mechanism to get the + * part/serial number of the already inserted blade server. + * So not much error handling + * + * Detailed Description: NA + * + * Return values: + * SA_OK - success. + * SA_ERR_HPI_INVALID_PARAMS - Invalid parameters + * SA_ERR_HPI_OUT_OF_MEMORY - Out of memory + **/ +SaErrorT process_server_info_event(struct oh_handler_state + *oh_handler, + SOAP_CON *con, + struct eventInfo *oa_event) +{ + SaErrorT rv = SA_OK; + struct oa_soap_handler *oa_handler = NULL; + SaHpiInt32T bay_number, len; + char *serial_number = NULL; + char *name = NULL; + struct bladeInfo *response; + SaHpiResourceIdT resource_id; + + if (oh_handler == NULL || oa_event == NULL) { + err("Invalid oh_handler and/or oa_event parameters"); + return SA_ERR_HPI_INVALID_PARAMS; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + bay_number = oa_event->eventData.bladeInfo.bayNumber; + /* Null ponter check for serialNumber,if Null return immediately*/ + if(oa_event->eventData.bladeInfo.serialNumber == 0) { + return rv; + } + len = strlen(oa_event->eventData.bladeInfo.serialNumber); + serial_number = (char *)g_malloc0(sizeof(char) * len + 1); + if(serial_number == 0){ + g_free(serial_number); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + strcpy(serial_number, oa_event->eventData.bladeInfo.serialNumber); + serial_number[len]='\0'; + if (strcmp(serial_number,"[Unknown]") == 0 ) { + g_free(serial_number); + return rv; + } + name = oa_event->eventData.bladeInfo.name; + response = (struct bladeInfo *)&oa_event->eventData.bladeInfo; + resource_id = oa_handler-> + oa_soap_resources.server.resource_id[bay_number - 1]; + + /* Update resource_status structure with resource_id, + * serial_number, and presence status + */ + oa_soap_update_resource_status( + &oa_handler->oa_soap_resources.server, bay_number, + serial_number, resource_id, RES_PRESENT); + + /* The RDR already exist, but the relevant data is available only now + * So just go ahead and correct it. When building the RDR the code does + * take care of already existing RDR. + */ + rv = build_server_rdr(oh_handler, con, + bay_number, resource_id, name); + g_free(serial_number); + return SA_OK; +} + +/** * process_server_extraction_event * @oh_handler: Pointer to openhpi handler structure * @oa_event: Pointer to the OA event structure Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h 2011-07-11 12:17:47 UTC (rev 7339) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h 2011-07-18 14:00:25 UTC (rev 7340) @@ -57,6 +57,11 @@ struct eventInfo *oa_event, SaHpiInt32T loc); +SaErrorT process_server_info_event(struct oh_handler_state + *oh_handler, + SOAP_CON *con, + struct eventInfo *oa_event); + SaErrorT process_server_extraction_event(struct oh_handler_state *oh_handler, struct eventInfo *oa_event); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2011-08-12 23:43:39
|
Revision: 7342 http://openhpi.svn.sourceforge.net/openhpi/?rev=7342&view=rev Author: dr_mohan Date: 2011-08-12 23:43:31 +0000 (Fri, 12 Aug 2011) Log Message: ----------- General enclosure status is added to address feature request #3196244 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c openhpi/trunk/plugins/oa_soap/oa_soap_calls.h openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2011-07-29 23:12:37 UTC (rev 7341) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2011-08-12 23:43:31 UTC (rev 7342) @@ -1159,6 +1159,11 @@ soap_enum(powerSystemType_S, soap_tree_value(node, "subsystemType")); } + if ((node = soap_walk_tree(events, "enclosureStatus"))) { + result->eventData.enclosureInfo.enclosureStatus = + soap_enum(opStatus_S, + soap_tree_value(node, "operationalStatus")); + } return; } @@ -1434,6 +1439,16 @@ "subsystemType")); } + if (! (ret = soap_request(con, GET_ENCLOSURE_STATUS))) { + node = soap_walk_doc(con->doc, + "Body:" + "getEnclosureStatusResponse:" + "enclosureStatus"); + response->enclosureStatus = soap_enum(opStatus_S, + soap_tree_value(node, + "operationalStatus")); + + } if (! (ret = soap_request(con, GET_ENCLOSURE_INFO))) { parse_enclosureInfo(soap_walk_doc(con->doc, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2011-07-29 23:12:37 UTC (rev 7341) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2011-08-12 23:43:31 UTC (rev 7342) @@ -1070,6 +1070,7 @@ char *pduSparePartNumber; xmlNode *extraData; /* Items are struct extraDataInfo */ int powerType; + int enclosureStatus; }; struct oaStatus Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2011-07-29 23:12:37 UTC (rev 7341) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2011-08-12 23:43:31 UTC (rev 7342) @@ -1316,6 +1316,7 @@ SaHpiRptEntryT *rpt = NULL; char *telco_status = NULL; char *power_type = NULL; + char *es = NULL; if (oh_handler == NULL || response == NULL || rdr == NULL || inventory == NULL) { @@ -1524,6 +1525,72 @@ local_inventory->info.area_list->idr_area_head. NumFields++; } + switch(response->enclosureStatus){ + case 1: es = "ENCLOSURE STATUS: OTHER"; + break; + case 2: es = "ENCLOSURE STATUS: OK"; + break; + case 3: es = "ENCLOSURE STATUS: DEGRADED"; + break; + case 4: es = "ENCLOSURE STATUS: STRESSED"; + break; + case 5: es = "ENCLOSURE STATUS: PREDICTIVE_FAILURE"; + break; + case 6: es = "ENCLOSURE STATUS: ERROR"; + break; + case 7: es = "ENCLOSURE STATUS: NON_RECOVERABLE_ERROR"; + break; + case 8: es = "ENCLOSURE STATUS: STARTING"; + break; + case 9: es = "ENCLOSURE STATUS: STOPPING"; + break; + case 10: es = "ENCLOSURE STATUS: STOPPED"; + break; + case 11: es = "ENCLOSURE STATUS: IN_SERVICE"; + break; + case 12: es = "ENCLOSURE STATUS: NO_CONTACT"; + break; + case 13: es = "ENCLOSURE STATUS: LOST_COMMUNICATION"; + break; + case 14: es = "ENCLOSURE STATUS: ABORTED"; + break; + case 15: es = "ENCLOSURE STATUS: DORMANT"; + break; + case 16: es = "ENCLOSURE STATUS: SUPPORTING_ENTITY_IN_ERROR"; + break; + case 17: es = "ENCLOSURE STATUS: COMPLETED"; + break; + case 18: es = "ENCLOSURE STATUS: POWER_MODE"; + break; + case 19: es = "ENCLOSURE STATUS: DMTF_RESERVED"; + break; + case 20: es = "ENCLOSURE STATUS: VENDER_RESERVED"; + break; + default : es = "ENCLOSURE STATUS: UNKNOWN"; + break; + } + /* Add the enclosure status field if the enclosure status info + * is available + */ + if (es != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + strcpy ((char *)hpi_field.Field.Data, es); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + } } return SA_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2011-09-01 22:27:47
|
Revision: 7347 http://openhpi.svn.sourceforge.net/openhpi/?rev=7347&view=rev Author: dr_mohan Date: 2011-09-01 22:27:41 +0000 (Thu, 01 Sep 2011) Log Message: ----------- Resolving 3400203 - OA Redundancy is not set properly when standy OA is pulled. Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2011-09-01 17:24:30 UTC (rev 7346) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2011-09-01 22:27:41 UTC (rev 7347) @@ -965,7 +965,9 @@ break; case EVENT_OA_INSERTED: - dbg("EVENT_OA_INSERTED -- Not processed"); + dbg("EVENT_OA_INSERTED"); + oa_soap_proc_oa_inserted(oh_handler, + &event); break; case EVENT_OA_REMOVED: Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2011-09-01 17:24:30 UTC (rev 7346) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2011-09-01 22:27:41 UTC (rev 7347) @@ -77,12 +77,23 @@ { SaErrorT rv = SA_OK; SaHpiInt32T bay_number; + struct oa_soap_handler *oa_handler = NULL; + SaHpiResourceIdT resource_id; if (oh_handler == NULL || oa_event == NULL) { err("Invalid parameters"); return SA_ERR_HPI_INVALID_PARAMS; } - + oa_handler = (struct oa_soap_handler *) oh_handler->data; + bay_number = oa_event->eventData.oaStatus.bayNumber; + resource_id = oa_handler->oa_soap_resources.oa.resource_id[bay_number - 1]; + rv = oa_soap_proc_sen_evt(oh_handler, resource_id, OA_SOAP_SEN_OA_REDUND, + oa_event->eventData.oaStatus.oaRedundancy, 0, 0); + if (rv != SA_OK) { + err("processing the sensor event for sensor %x has failed", + OA_SOAP_SEN_OA_REDUND); + return rv; + } /* The OA is sending the wrong bay_number for the removed OA * Hence if the bay number in the oa_event is 1, * process the event for bay number 2, or vice versa @@ -502,4 +513,48 @@ nw_info->linkActive, 0, 0) return; -} +} /* oa_soap_proc_oa_network_info */ + +/** + * oa_soap_proc_oa_inserted + * @oh_handler : Pointer to openhpi handler structure + * @oa_event : Pointer to the OA inserted event + * + * Purpose: + * Processes the OA inserted event and generates the HPI sensor event. + * + * Detailed Description: + * NA + * + * Return values: + * NONE + **/ +void oa_soap_proc_oa_inserted(struct oh_handler_state *oh_handler, + struct eventInfo *oa_event) +{ + SaErrorT rv = SA_OK; + SaHpiInt32T bay_number; + struct oa_soap_handler *oa_handler = NULL; + SaHpiResourceIdT resource_id; + enum diagnosticStatus diag_ex_status[OA_SOAP_MAX_DIAG_EX]; + + if (oh_handler == NULL || oa_event == NULL) { + err("Invalid parameters"); + return; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + bay_number = oa_event->eventData.oaStatus.bayNumber; + resource_id = oa_handler->oa_soap_resources.oa.resource_id[bay_number - 1]; + + /* Process the operational status sensor */ + rv = oa_soap_proc_sen_evt(oh_handler, resource_id, OA_SOAP_SEN_OA_REDUND, + oa_event->eventData.oaStatus.oaRedundancy, 0, 0); + if (rv != SA_OK) { + err("processing the sensor event for sensor %x has failed", + OA_SOAP_SEN_OA_REDUND); + return; + } + return; +} /* oa_soap_proc_oa_inserted */ + Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h 2011-09-01 17:24:30 UTC (rev 7346) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h 2011-09-01 22:27:41 UTC (rev 7347) @@ -54,4 +54,7 @@ void oa_soap_proc_oa_network_info(struct oh_handler_state *oh_handler, struct oaNetworkInfo *nw_info); +void oa_soap_proc_oa_inserted(struct oh_handler_state *oh_handler, + struct eventInfo *oa_event); + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2011-10-06 00:01:35
|
Revision: 7363 http://openhpi.svn.sourceforge.net/openhpi/?rev=7363&view=rev Author: elangoc Date: 2011-10-06 00:01:28 +0000 (Thu, 06 Oct 2011) Log Message: ----------- This patch fixes bug ID: 3025936 - SWITCH_BLADE generates too many events Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2011-10-04 21:29:25 UTC (rev 7362) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2011-10-06 00:01:28 UTC (rev 7363) @@ -2064,7 +2064,22 @@ return SA_ERR_HPI_OUT_OF_MEMORY; } - if (inserted == TRUE) { + /* Get the power state of the interconnect blade to determine + * the hotswap state. The hotswap state of the interconnect + * shall be maintained in a private data area of the + * interconnect RPT. + */ + rv = get_interconnect_power_state(con, bay_number, &state); + if (rv != SA_OK) { + err("Unable to get power status"); + return rv; + } + + if (inserted == TRUE && state == SAHPI_POWER_ON) { + hotswap_state->currentHsState = + SAHPI_HS_STATE_ACTIVE; + + } else if (inserted == TRUE) { /* The interconnect takes nearly 3 seconds to power on after * insertion. Intialize the current hotswap state as * change is handled as part of interconnect status events. @@ -2073,18 +2088,6 @@ SAHPI_HS_STATE_INSERTION_PENDING; } else { - /* Get the power state of the interconnect blade to determine - * the hotswap state. The hotswap state of the interconnect - * shall be maintained in a private data area of the - * interconnect RPT. - */ - rv = get_interconnect_power_state(con, bay_number, &state); - if (rv != SA_OK) { - err("Unable to get power status"); - return rv; - } - - switch (state) { case SAHPI_POWER_ON: hotswap_state->currentHsState = Modified: openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c 2011-10-04 21:29:25 UTC (rev 7362) +++ openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c 2011-10-06 00:01:28 UTC (rev 7363) @@ -377,7 +377,8 @@ SaHpiInt32T bay_number; SaHpiResourceIdT resource_id; GSList *asserted_sensors = NULL; - SaHpiRptEntryT *rpt; + SaHpiRptEntryT *rpt = NULL; + struct oa_soap_hotswap_state *hotswap_state = NULL; if (oh_handler == NULL || oa_event == NULL || con == NULL) { err("Invalid parameters"); @@ -443,6 +444,36 @@ SAHPI_HS_CAUSE_OPERATOR_INIT; oh_evt_queue_push(oh_handler->eventq, copy_oa_soap_event(&event)); + /* Get the rpt entry of the server */ + rpt = oh_get_resource_by_id(oh_handler->rptcache, resource_id); + if (rpt == NULL) { + err("resource RPT is NULL"); + return 0; + } + + hotswap_state = (struct oa_soap_hotswap_state *) + oh_get_resource_data(oh_handler->rptcache, resource_id); + if (hotswap_state == NULL) { + err("Failed to get hotswap state of server blade"); + return 0; + } + + hotswap_state->currentHsState = SAHPI_HS_STATE_ACTIVE; + + update_hotswap_event(oh_handler, &event); + memcpy(&(event.resource), rpt, sizeof(SaHpiRptEntryT)); + event.event.Source = event.resource.ResourceId; + event.event.EventDataUnion.HotSwapEvent.PreviousHotSwapState = + SAHPI_HS_STATE_INSERTION_PENDING; + event.event.EventDataUnion.HotSwapEvent.HotSwapState = + SAHPI_HS_STATE_ACTIVE; + /* INSERTION_PENDING to ACTIVE state change happened de + * to Auto policy of server blade + */ + event.event.EventDataUnion.HotSwapEvent.CauseOfStateChange = + SAHPI_HS_CAUSE_AUTO_POLICY; + oh_evt_queue_push(oh_handler->eventq, copy_oa_soap_event(&event)); + /* Raise the assert sensor events */ if (asserted_sensors) { rpt = oh_get_resource_by_id(oh_handler->rptcache, resource_id); @@ -505,7 +536,6 @@ resource_id = oa_handler-> oa_soap_resources.interconnect.resource_id[bay_number - 1]; - /* Build the inserted interconnect RPT entry */ rv = build_interconnect_rpt(oh_handler, con, name, bay_number, &resource_id, TRUE); @@ -627,29 +657,6 @@ return; } - /* Check whether blade is in the insertion pending state and it is - * powered on - */ - if (hotswap_state->currentHsState == SAHPI_HS_STATE_INSERTION_PENDING && - status->powered == POWER_ON) { - hotswap_state->currentHsState = SAHPI_HS_STATE_ACTIVE; - - update_hotswap_event(oh_handler, &event); - memcpy(&(event.resource), rpt, sizeof(SaHpiRptEntryT)); - event.event.Source = event.resource.ResourceId; - event.event.EventDataUnion.HotSwapEvent.PreviousHotSwapState = - SAHPI_HS_STATE_INSERTION_PENDING; - event.event.EventDataUnion.HotSwapEvent.HotSwapState = - SAHPI_HS_STATE_ACTIVE; - /* INSERTION_PENDING to ACTIVE state change happened de - * to Auto policy of server blade - */ - event.event.EventDataUnion.HotSwapEvent.CauseOfStateChange = - SAHPI_HS_CAUSE_AUTO_POLICY; - oh_evt_queue_push(oh_handler->eventq, - copy_oa_soap_event(&event)); - } - /* Build operational status sensor rdr */ OA_SOAP_PROCESS_SENSOR_EVENT(OA_SOAP_SEN_OPER_STATUS, status->operationalStatus, 0, 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2011-11-11 18:13:59
|
Revision: 7379 http://openhpi.svn.sourceforge.net/openhpi/?rev=7379&view=rev Author: elangoc Date: 2011-11-11 18:13:52 +0000 (Fri, 11 Nov 2011) Log Message: ----------- Fixes bug ID: 3285693 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2011-11-07 19:26:18 UTC (rev 7378) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2011-11-11 18:13:52 UTC (rev 7379) @@ -937,6 +937,7 @@ } /* Build thermal sensor rdr for the enclosure */ + event_support = SAHPI_TRUE; OA_SOAP_BUILD_THRESHOLD_SENSOR_RDR(OA_SOAP_SEN_TEMP_STATUS, thermal_response) @@ -1684,6 +1685,7 @@ struct getBladeStatus status_request; struct bladeStatus status_response; SaHpiInt32T sensor_status; + SaHpiBoolT event_support = SAHPI_FALSE; enum diagnosticStatus diag_ex_status[OA_SOAP_MAX_DIAG_EX]; if (oh_handler == NULL || con == NULL) { @@ -1728,6 +1730,7 @@ err("Failed to build thermal rdr"); return SA_ERR_HPI_INTERNAL_ERROR; } + event_support = SAHPI_TRUE; /* Build power sensor rdr for server */ OA_SOAP_BUILD_SENSOR_RDR(OA_SOAP_SEN_PWR_STATUS) Modified: openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c 2011-11-07 19:26:18 UTC (rev 7378) +++ openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c 2011-11-11 18:13:52 UTC (rev 7379) @@ -105,3 +105,94 @@ return; } + +/** + * process_enc_thermal_event + * @oh_handler: Pointer to openhpi handler structure + * @con: Pointer to the SOAP_CON structure + * @response: Pointer to the Enclosure thermal Info structure + * + * Purpose: + * Processes and creates enclosure / chassis sensor thermal events + * + * Detailed Description: NA + * + * Return values: + * NONE + **/ +void oa_soap_proc_enc_thermal(struct oh_handler_state *oh_handler, + SOAP_CON *con, + struct thermalInfo *response) +{ + SaErrorT rv = SA_OK; + SaHpiResourceIdT resource_id; + struct oa_soap_handler *oa_handler = NULL; + SaHpiFloat64T trigger_reading; + SaHpiFloat64T trigger_threshold; + struct getThermalInfo thermal_request; + struct thermalInfo thermal_response; + struct oa_soap_sensor_info *sensor_info = NULL; + SaHpiRdrT *rdr = NULL; + + if (oh_handler == NULL || con== NULL || response == NULL) { + err("Invalid parameters"); + return; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + resource_id = oa_handler-> + oa_soap_resources.enclosure_rid; + + rdr = oh_get_rdr_by_type(oh_handler->rptcache, resource_id, + SAHPI_SENSOR_RDR, OA_SOAP_SEN_TEMP_STATUS); + sensor_info = (struct oa_soap_sensor_info *) + oh_get_rdr_data(oh_handler->rptcache, resource_id, + rdr->RecordId); + + + /* Based on the sensor status, + * determine the threshold which triggered the thermal event from + * Enclosure. + * Event with SENSOR_STATUS_CAUTION or SENSOR_STATUS_OK is + * generated only if CAUTION threshold is crossed. + * Event with SENSOR_STATUS_CRITICAL is generated only when CRITICAL + * threshold is crossed. + * Sensor current reading and trigger threshold are required for event + * generation. Sensor current reading is not provided by the event, + * hence make soap call to get the reading + */ + thermal_request.bayNumber = 1; + thermal_request.sensorType = SENSOR_TYPE_ENC; + + rv = soap_getThermalInfo(con, &thermal_request, &thermal_response); + if (rv != SOAP_OK) { + err("soap_getThermalInfo soap call returns error"); + return; + } + + trigger_reading = (SaHpiInt32T)thermal_response.temperatureC; + + if ((response->sensorStatus == SENSOR_STATUS_CAUTION && + sensor_info->current_state != SAHPI_ES_UPPER_MAJOR) || + (response->sensorStatus == SENSOR_STATUS_OK && + sensor_info->current_state != SAHPI_ES_UNSPECIFIED)) { + /* Trigger for this event is caution threshold */ + trigger_threshold = thermal_response.cautionThreshold; + } else if (response->sensorStatus == SENSOR_STATUS_CRITICAL && + sensor_info->current_state != SAHPI_ES_UPPER_CRIT) { + /* Trigger for this event is critical threshold */ + trigger_threshold = thermal_response.criticalThreshold; + } else { + dbg("Ignore the event. There is no change in the sensor state"); + return; + } + + /* Process the thermal event from Enclosure and generate appropriate + * HPI event + */ + OA_SOAP_PROCESS_SENSOR_EVENT(OA_SOAP_SEN_TEMP_STATUS, + response->sensorStatus, + trigger_reading,trigger_threshold) + + return; +} Modified: openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h 2011-11-07 19:26:18 UTC (rev 7378) +++ openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h 2011-11-11 18:13:52 UTC (rev 7379) @@ -43,4 +43,7 @@ void oa_soap_proc_enc_status(struct oh_handler_state *oh_handler, struct enclosureStatus *status); +void oa_soap_proc_enc_thermal(struct oh_handler_state *oh_handler, + SOAP_CON *con, + struct thermalInfo *response); #endif Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2011-11-07 19:26:18 UTC (rev 7378) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2011-11-11 18:13:52 UTC (rev 7379) @@ -689,7 +689,10 @@ dbg("EVENT_FAN_GROUP_STATUS -- Not processed"); break; case EVENT_THERMAL_STATUS: - dbg("EVENT_THERMAL_STATUS -- Not processed"); + dbg("EVENT_THERMAL_STATUS"); + oa_soap_proc_enc_thermal(oh_handler, + oa->event_con2, + &(event.eventData.thermalInfo)); break; case EVENT_COOLING_STATUS: dbg("EVENT_COOLING_STATUS"); @@ -855,6 +858,12 @@ oa->event_con2, &(event.eventData.bladeStatus)); break; + case EVENT_BLADE_THERMAL: + dbg("EVENT_BLADE_THERMAL"); + oa_soap_proc_server_thermal(oh_handler, + oa->event_con2, + &(event.eventData.bladeStatus)); + break; case EVENT_BLADE_INFO: dbg("EVENT_BLADE_INFO"); rv = process_server_info_event(oh_handler, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2011-11-07 19:26:18 UTC (rev 7378) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2011-11-11 18:13:52 UTC (rev 7379) @@ -1148,3 +1148,106 @@ } return SA_OK; } + + +/** + * process_server_thermal_event + * @oh_handler : Pointer to openhpi handler structure + * @con : Pointer to the SOAP_CON structure + * @status : Pointer to blade status structure + * + * Purpose: + * Processes and creates server / blade sensor thermal events + * + * Detailed Description: NA + * + * Return values: + * NONE + **/ +void oa_soap_proc_server_thermal(struct oh_handler_state *oh_handler, + SOAP_CON *con, + struct bladeStatus *status) +{ + SaErrorT rv = SA_OK; + SaHpiResourceIdT resource_id; + struct oa_soap_handler *oa_handler = NULL; + SaHpiFloat64T trigger_reading; + SaHpiFloat64T trigger_threshold; + struct getBladeThermalInfoArray thermal_request; + struct bladeThermalInfoArrayResponse thermal_response; + struct bladeThermalInfo *blade_thermal_response = NULL; + struct oa_soap_sensor_info *sensor_info = NULL; + SaHpiRdrT *rdr = NULL; + + if (oh_handler == NULL || con== NULL || status == NULL) { + err("Invalid parameters"); + return; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + resource_id = oa_handler->oa_soap_resources.server. + resource_id[status->bayNumber - 1]; + + + rdr = oh_get_rdr_by_type(oh_handler->rptcache, resource_id, + SAHPI_SENSOR_RDR, OA_SOAP_SEN_TEMP_STATUS); + sensor_info = (struct oa_soap_sensor_info *) + oh_get_rdr_data(oh_handler->rptcache, resource_id, + rdr->RecordId); + + + /* Based on the sensor status, + * determine the threshold which triggered the thermal event from + * Enclosure. + * Event with SENSOR_STATUS_CAUTION or SENSOR_STATUS_OK is + * generated only if CAUTION threshold is crossed. + * Event with SENSOR_STATUS_CRITICAL is generated only when CRITICAL + * threshold is crossed. + * Sensor current reading and trigger threshold are required for event + * generation. Sensor current reading is not provided by the event, + * hence make soap call to get the reading + */ + thermal_request.bayNumber = status->bayNumber; + + rv = soap_getBladeThermalInfoArray(con, &thermal_request, &thermal_response); + + /* In addition to verifying return value from the soap call, + * Check whether the thermal response is NULL, + * blade resource might have transitioned to POWER-OFF state + * during the processing of this event hence resulting in + * a NULL response + */ + if ((rv != SA_OK) || (thermal_response.bladeThermalInfoArray == NULL)) { + err("getBladeThermalInfo failed for blade or" + "the blade is not in stable state"); + return; + } + + blade_thermal_response = (struct bladeThermalInfo *)&thermal_response; + + trigger_reading = (SaHpiInt32T)blade_thermal_response->temperatureC; + + if ((status->thermal == SENSOR_STATUS_CAUTION && + sensor_info->current_state != SAHPI_ES_UPPER_MAJOR) || + (status->thermal == SENSOR_STATUS_OK && + sensor_info->current_state != SAHPI_ES_UNSPECIFIED)) { + /* Trigger for this event is caution threshold */ + trigger_threshold = blade_thermal_response->cautionThreshold; + } else if (status->thermal == SENSOR_STATUS_CRITICAL && + sensor_info->current_state != SAHPI_ES_UPPER_CRIT) { + /* Trigger for this event is critical threshold */ + trigger_threshold = blade_thermal_response->criticalThreshold; + } else { + dbg("Ignore the event. There is no change in the sensor state"); + return; + } + + /* Process the thermal event from Server / Blade and generate + * appropriate HPI event + */ + OA_SOAP_PROCESS_SENSOR_EVENT(OA_SOAP_SEN_TEMP_STATUS, + status->thermal, + trigger_reading,trigger_threshold) + + return; +} Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h 2011-11-07 19:26:18 UTC (rev 7378) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h 2011-11-11 18:13:52 UTC (rev 7379) @@ -83,4 +83,8 @@ *thermal_response, SaHpiBoolT enable_flag); +void oa_soap_proc_server_thermal(struct oh_handler_state *oh_handler, + SOAP_CON *con, + struct bladeStatus *status); + #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <el...@us...> - 2012-01-04 22:53:43
|
Revision: 7389 http://openhpi.svn.sourceforge.net/openhpi/?rev=7389&view=rev Author: elangoc Date: 2012-01-04 22:53:37 +0000 (Wed, 04 Jan 2012) Log Message: ----------- Fix for ID: 3025938 - clients hang during/after a OA switchover Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2012-01-04 00:50:12 UTC (rev 7388) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2012-01-04 22:53:37 UTC (rev 7389) @@ -1107,10 +1107,17 @@ char *str; xmlNode *node; + if(str = soap_tree_value(events, "event")) result->event = - soap_enum(eventType_S, soap_tree_value(events, "event")); - result->eventTimeStamp = - atoi(soap_tree_value(events, "eventTimeStamp")); + soap_enum(eventType_S, str); + else + result->event = -1; + + if((str = soap_tree_value(events, "eventTimeStamp"))) + result->eventTimeStamp = atoi(str); + else + result->eventTimeStamp = -1; + if ((str = soap_tree_value(events, "queueSize"))) result->queueSize = atoi(str); else Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-01-04 00:50:12 UTC (rev 7388) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-01-04 22:53:37 UTC (rev 7389) @@ -230,6 +230,7 @@ /* Listen for the events from OA */ while (listen_for_events == SAHPI_TRUE) { + request.pid = oa->event_pid; OA_SOAP_CHEK_SHUTDOWN_REQ(oa_handler, NULL, NULL, NULL); rv = soap_getAllEvents(oa->event_con, &request, &response); if (rv == SOAP_OK) { @@ -628,6 +629,8 @@ OA_SOAP_CHEK_SHUTDOWN_REQ(oa_handler, NULL, NULL, NULL); /* Get the event from eventInfoArray */ soap_getEventInfo(response->eventInfoArray, &event); + dbg("\nThread id=%p event %d received\n", + g_thread_self(), event.event); switch (event.event) { case EVENT_HEARTBEAT: dbg("HEART BEAT EVENT"); @@ -1078,7 +1081,8 @@ dbg("EVENT_GROUP_CHANGED -- Not processed"); break; case EVENT_OA_REBOOT: - dbg("EVENT_OA_REBOOT -- Not processed"); + dbg("EVENT_OA_REBOOT"); + rv = process_oa_reboot_event(oh_handler, oa); break; case EVENT_OA_LOGOFF_REQUEST: dbg("EVENT_OA_LOGOFF_REQUEST -- Not processed"); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2012-01-04 00:50:12 UTC (rev 7388) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2012-01-04 22:53:37 UTC (rev 7389) @@ -340,6 +340,50 @@ } /** + * process_oa_reboot_event + * @oh_handler: Pointer to openhpi handler structure + * @oa: Pointer to the OA structure + * + * Purpose: + * Gets the OA REBOOT event. + * perform the rediscovery for all the resources. + * + * Detailed Description: + * - OA needs some time to stabilize, after getting the OA REBOOT event, + * plug-in starts checking for events after 90 seconds + - Establish the new connection with OA. + * - Since there are high chances for missing the information of changes + * in the resources, re-discovery will be done before start listening + * for events. + * Return values: + * SA_OK - on success. + * SA_ERR_HPI_INVALID_PARAMS - on wrong parameters. + **/ +SaErrorT process_oa_reboot_event(struct oh_handler_state *oh_handler, + struct oa_info *oa) +{ + SaErrorT rv = SA_OK; + SaHpiInt32T sleep_time = 0; + dbg("\nThread id = %p \n",g_thread_self()); + + if (oh_handler == NULL || oa == NULL) { + err("Invalid parameters"); + return SA_ERR_HPI_INVALID_PARAMS; + } + sleep_time = OA_STABILIZE_MAX_TIME; + dbg("Sleeping for %d seconds", sleep_time); + if (sleep_time > 0) { + sleep(sleep_time); + } + /* Call the oa_soap error handling function to re establish the connection + * with OA and rediscover all the resources + */ + oa_soap_error_handling(oh_handler, oa); + + return SA_OK; +} + +/** * process_oa_info_event * @oh_handler: Pointer to openhpi handler structure * @con: Pointer to SOAP_CON structure Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h 2012-01-04 00:50:12 UTC (rev 7388) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.h 2012-01-04 22:53:37 UTC (rev 7389) @@ -44,6 +44,9 @@ SaErrorT process_oa_failover_event(struct oh_handler_state *oh_handler, struct oa_info *oa); +SaErrorT process_oa_reboot_event(struct oh_handler_state *oh_handler, + struct oa_info *oa); + SaErrorT process_oa_info_event(struct oh_handler_state *oh_handler, SOAP_CON *con, struct eventInfo *oa_event); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c 2012-01-04 00:50:12 UTC (rev 7388) +++ openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c 2012-01-04 22:53:37 UTC (rev 7389) @@ -295,14 +295,13 @@ /* Make a soap call to get the enclosure power cap config which */ /* may contain new dynamic power cap limits */ + dbg("\n Threadid=%p \n",g_thread_self()); - g_mutex_lock(oa_handler->mutex); rv = soap_getPowerCapConfig(oa_handler->active_con, power_cap_config, &(oa_handler->desired_dynamic_pwr_cap), &(oa_handler->desired_derated_circuit_cap), &(oa_handler->desired_rated_circuit_cap)); - g_mutex_unlock(oa_handler->mutex); if (rv != SOAP_OK) { err("Getting the power cap config failed"); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-01-04 00:50:12 UTC (rev 7388) +++ openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-01-04 22:53:37 UTC (rev 7389) @@ -1082,8 +1082,9 @@ convert_lower_to_upper(response.name, strlen(response.name), blade_name, MAX_NAME_LEN); - /* Build the server RPR entry */ - rv = build_discovered_server_rpt(oh_handler, con, info, &resource_id); + /* Build the server RPT entry */ + rv = build_discovered_server_rpt(oh_handler, con, &response, + &resource_id); if (rv != SA_OK) { err("build inserted server rpt failed"); return rv; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-04-19 23:51:30
|
Revision: 7411 http://openhpi.svn.sourceforge.net/openhpi/?rev=7411&view=rev Author: dr_mohan Date: 2012-04-19 23:51:23 +0000 (Thu, 19 Apr 2012) Log Message: ----------- Fix for #3324288 and #3519305 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-04-19 22:28:52 UTC (rev 7410) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-04-19 23:51:23 UTC (rev 7411) @@ -3478,7 +3478,7 @@ /* Set the fan zone location in RPT entry */ rpt.ResourceEntity.Entry[1].EntityLocation = - oa_soap_fz_map_arr[oa_handler->enc_type][bay_number].zone; + oa_soap_fz_map_arr[oa_handler->enc_type][bay_number-1].zone; /* Add the fan rpt to the plugin RPTable */ rv = oh_add_resource(oh_handler->rptcache, &rpt, NULL, 0); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-19 22:28:52 UTC (rev 7410) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-19 23:51:23 UTC (rev 7411) @@ -4067,6 +4067,11 @@ /* Traverse the fields till we get field_type */ while (field) { if (field->field.Type == field_type) { + if (field->field.Type > + SAHPI_IDR_FIELDTYPE_UNSPECIFIED) { + field->field.Type = + SAHPI_IDR_FIELDTYPE_CUSTOM; + } oa_soap_trim_whitespace(data); field->field.Field.DataLength = strlen(data); @@ -4263,7 +4268,9 @@ struct oa_soap_handler *oa_handler; struct oa_soap_inventory *inventory = NULL; char *temp, field_data[MAX_BUF_SIZE]; - SaHpiInt32T len, write_size = OA_SOAP_MAX_FZ_NUM_SIZE + 1; + char temp1[MAX_BUF_SIZE] = {'\0'}; + char temp2[MAX_BUF_SIZE] = {'\0'}; + SaHpiInt32T len, write_size = OA_SOAP_MAX_FZ_NUM_SIZE + 3; struct fanInfo info; byte bay; @@ -4306,6 +4313,11 @@ len = strlen(field_data); field_data[len - 1] = '\0'; + /* Adding the string "Device Bays =" in the starting of field_data */ + memcpy(temp1, field_data, len); + memcpy(field_data, "Device Bays = ", sizeof("Device Bays = ")); + memcpy(field_data + strlen(field_data), temp1, strlen(temp1)); + /* Set the device bays field data */ oa_soap_inv_set_field(inventory->info.area_list, SAHPI_IDR_AREATYPE_OEM, @@ -4336,6 +4348,11 @@ len = strlen(field_data); field_data[len - 1] = '\0'; + /* Adding the string "Fan Bays =" in the starting of field_data */ + memcpy(temp2, field_data, len); + memcpy(field_data, "Fan Bays = ", sizeof("Fan Bays = ")); + memcpy(field_data + strlen(field_data), temp2, strlen(temp2)); + /* Set the fan bays field data */ oa_soap_inv_set_field(inventory->info.area_list, SAHPI_IDR_AREATYPE_OEM, @@ -4409,7 +4426,7 @@ memset(field_data, 0, OA_SOAP_MAX_FZ_INV_SIZE); slot = fan_info->bayNumber; /* Construct the fan shared field data */ - if (oa_soap_fz_map_arr[oa_handler->enc_type][slot].shared == SAHPI_TRUE) + if (oa_soap_fz_map_arr[oa_handler->enc_type][slot-1].shared == SAHPI_TRUE) strcpy(field_data, "Shared=TRUE"); else strcpy(field_data, "Shared=FALSE"); @@ -4422,14 +4439,14 @@ /* Construct the fan zone number field data */ memset(field_data, 0, OA_SOAP_MAX_FZ_INV_SIZE); - if (oa_soap_fz_map_arr[oa_handler->enc_type][slot].secondary_zone) { + if (oa_soap_fz_map_arr[oa_handler->enc_type][slot-1].secondary_zone) { snprintf(field_data, 13, "Fan Zone=%d,%d", - oa_soap_fz_map_arr[oa_handler->enc_type][slot].zone, - oa_soap_fz_map_arr[oa_handler->enc_type][slot]. + oa_soap_fz_map_arr[oa_handler->enc_type][slot-1].zone, + oa_soap_fz_map_arr[oa_handler->enc_type][slot-1]. secondary_zone); } else { snprintf(field_data, 11, "Fan Zone=%d", - oa_soap_fz_map_arr[oa_handler->enc_type][slot].zone); + oa_soap_fz_map_arr[oa_handler->enc_type][slot-1].zone); } /* Set the shared field */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-04-21 00:57:59
|
Revision: 7413 http://openhpi.svn.sourceforge.net/openhpi/?rev=7413&view=rev Author: dr_mohan Date: 2012-04-21 00:57:53 +0000 (Sat, 21 Apr 2012) Log Message: ----------- c3000 feature request #3519995 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap.h openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_resources.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap.h 2012-04-19 23:59:37 UTC (rev 7412) +++ openhpi/trunk/plugins/oa_soap/oa_soap.h 2012-04-21 00:57:53 UTC (rev 7413) @@ -78,6 +78,8 @@ #define OA_SOAP_ENT_FAN 10 /* LCD */ #define OA_SOAP_ENT_LCD 11 +/* Fan for C3000 */ +#define OA_SOAP_ENT_FAN_C3000 12 /* The different enclosure types supported by OA SOAP * Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-04-19 23:59:37 UTC (rev 7412) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-04-21 00:57:53 UTC (rev 7413) @@ -364,12 +364,17 @@ SaErrorT discover_oa_soap_system(struct oh_handler_state *oh_handler) { SaErrorT rv = SA_OK; + struct oh_handler_state *handler = NULL; + struct oa_soap_handler *oa_handler = NULL; if (oh_handler == NULL) { err("Invalid parameters"); return SA_ERR_HPI_INVALID_PARAMS; } + handler = (struct oh_handler_state *) oh_handler; + oa_handler = (struct oa_soap_handler *) handler->data; + dbg("Discovering HP BladeSystem c-Class"); dbg(" Discovering Enclosure ......................"); rv = discover_enclosure(oh_handler); @@ -399,11 +404,13 @@ return rv; } - dbg(" Discovering Fan Zone ......................."); - rv = oa_soap_disc_fz(oh_handler); - if (rv != SA_OK) { - err("Failed to discover Fan Zone "); - return rv; + if(oa_handler->enc_type != OA_SOAP_ENC_C3000){ + dbg(" Discovering Fan Zone ......................."); + rv = oa_soap_disc_fz(oh_handler); + if (rv != SA_OK) { + err("Failed to discover Fan Zone "); + return rv; + } } dbg(" Discovering Fan ............................"); @@ -3469,8 +3476,16 @@ } oa_handler = (struct oa_soap_handler *) oh_handler->data; - - rv = oa_soap_build_rpt(oh_handler, OA_SOAP_ENT_FAN, bay_number, &rpt); + if(oa_handler->enc_type == OA_SOAP_ENC_C3000) + rv = oa_soap_build_rpt(oh_handler, + OA_SOAP_ENT_FAN_C3000, + bay_number, + &rpt); + else + rv = oa_soap_build_rpt(oh_handler, + OA_SOAP_ENT_FAN, + bay_number, + &rpt); if (rv != SA_OK) { err("Build fan rpt has failed"); return rv; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-19 23:59:37 UTC (rev 7412) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-21 00:57:53 UTC (rev 7413) @@ -1411,23 +1411,25 @@ /* Create and add internal area if all/atleast one of required * information of resource for internal is available */ - rv = add_internal_area(&local_inventory->info.area_list, - response->interposerManufacturer, - response->interposerName, - response->interposerPartNumber, - response->interposerSerialNumber, - &add_success_flag); - if (rv != SA_OK) { - err("Add internal area failed"); - return rv; - } + if(oa_handler->enc_type != OA_SOAP_ENC_C3000){ + rv = add_internal_area(&local_inventory->info.area_list, + response->interposerManufacturer, + response->interposerName, + response->interposerPartNumber, + response->interposerSerialNumber, + &add_success_flag); + if (rv != SA_OK) { + err("Add internal area failed"); + return rv; + } + } if (add_success_flag != SAHPI_FALSE) { - (local_inventory->info.idr_info.NumAreas)++; - if (area_count == 0) { - head_area = local_inventory->info.area_list; - } - ++area_count; - } + (local_inventory->info.idr_info.NumAreas)++; + if (area_count == 0) { + head_area = local_inventory->info.area_list; + } + ++area_count; + } local_inventory->info.area_list = head_area; *inventory = local_inventory; @@ -4398,9 +4400,20 @@ } oa_handler = (struct oa_soap_handler *) oh_handler->data; - - rv = oa_soap_build_inv(oh_handler, OA_SOAP_ENT_FAN, resource_id, - &inventory); + + if(oa_handler->enc_type == OA_SOAP_ENC_C3000){ + rv = oa_soap_build_inv(oh_handler, + OA_SOAP_ENT_FAN_C3000, + resource_id, + &inventory); + } + else + { + rv = oa_soap_build_inv(oh_handler, + OA_SOAP_ENT_FAN, + resource_id, + &inventory); + } if (rv != SA_OK) { err("Building inventory RDR for Fan failed"); return rv; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_resources.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_resources.c 2012-04-19 23:59:37 UTC (rev 7412) +++ openhpi/trunk/plugins/oa_soap/oa_soap_resources.c 2012-04-21 00:57:53 UTC (rev 7413) @@ -9346,6 +9346,39 @@ .ResourceTag.DataLength = 3, .ResourceTag.Data = "LCD", }, + /* OA_SOAP_ENT_FAN_C3000 */ + { + .ResourceInfo = { + .ManufacturerId = HP_MANUFACTURING_ID, + }, + .ResourceEntity = { + .Entry[0] = + { + .EntityType = SAHPI_ENT_FAN, + .EntityLocation = 0, + }, + { + .EntityType = SAHPI_ENT_COOLING_UNIT, + .EntityLocation = 1, + }, + { + .EntityType = SAHPI_ENT_ROOT, + .EntityLocation = 0, + }, + }, + .ResourceCapabilities = SAHPI_CAPABILITY_RDR | + SAHPI_CAPABILITY_RESOURCE | + SAHPI_CAPABILITY_SENSOR | + SAHPI_CAPABILITY_FRU | + SAHPI_CAPABILITY_INVENTORY_DATA, + .ResourceSeverity = SAHPI_OK, + .ResourceFailed = SAHPI_FALSE, + .HotSwapCapabilities = 0x0, + .ResourceTag.DataType = SAHPI_TL_TYPE_TEXT, + .ResourceTag.Language = SAHPI_LANG_ENGLISH, + .ResourceTag.DataLength = 3, + .ResourceTag.Data = "Fan", + }, /* NULL element to end the array */ {} }; @@ -9817,6 +9850,107 @@ }, }, }, + /* OA_SOAP_ENT_FAN_C3000 */ + { + .rdr = { + .RecordId = 0, + .RdrType = SAHPI_INVENTORY_RDR, + .RdrTypeUnion.InventoryRec.IdrId = + SAHPI_DEFAULT_INVENTORY_ID, + .IdString.DataType = SAHPI_TL_TYPE_TEXT, + .IdString.Language = SAHPI_LANG_ENGLISH, + .IdString.DataLength = 3, + .IdString.Data = "Fan", + }, + .inventory = { + .inv_rec = { + .IdrId = SAHPI_DEFAULT_INVENTORY_ID, + .Persistent = SAHPI_FALSE, + .Oem = 0, + }, + .info = { + .idr_info = { + .IdrId = SAHPI_DEFAULT_INVENTORY_ID, + .UpdateCount = 1, + .ReadOnly = SAHPI_FALSE, + .NumAreas = 2, + }, + .area_list = NULL, + }, + }, + .area_array = { + { + .area = { + .idr_area_head = { + .AreaId = 1, + .Type = + SAHPI_IDR_AREATYPE_PRODUCT_INFO, + .ReadOnly = SAHPI_FALSE, + .NumFields = 1, + }, + .next_area = NULL, + }, + .field_array = { + { + .field = { + .AreaId = 1, + .FieldId = 1, + .Type = + SAHPI_IDR_FIELDTYPE_PRODUCT_NAME, + .ReadOnly = SAHPI_FALSE, + .Field.DataType = + SAHPI_TL_TYPE_TEXT, + .Field.Language = + SAHPI_LANG_ENGLISH, + }, + .next_field = NULL, + }, + }, + }, + { + .area = { + .idr_area_head = { + .AreaId = 2, + .Type = + SAHPI_IDR_AREATYPE_BOARD_INFO, + .ReadOnly = SAHPI_FALSE, + .NumFields = 2, + }, + .next_area = NULL, + }, + .field_array = { + { + .field = { + .AreaId = 2, + .FieldId = 1, + .Type = + SAHPI_IDR_FIELDTYPE_PART_NUMBER, + .ReadOnly = SAHPI_FALSE, + .Field.DataType = + SAHPI_TL_TYPE_TEXT, + .Field.Language = + SAHPI_LANG_ENGLISH, + }, + .next_field = NULL, + }, + { + .field = { + .AreaId = 2, + .FieldId = 2, + .Type = + SAHPI_IDR_FIELDTYPE_SERIAL_NUMBER, + .ReadOnly = SAHPI_FALSE, + .Field.DataType = + SAHPI_TL_TYPE_TEXT, + .Field.Language = + SAHPI_LANG_ENGLISH, + }, + .next_field = NULL, + }, + }, + }, + }, + }, /* NULL element to end the array */ {} }; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-04-21 02:00:38
|
Revision: 7414 http://openhpi.svn.sourceforge.net/openhpi/?rev=7414&view=rev Author: dr_mohan Date: 2012-04-21 02:00:27 +0000 (Sat, 21 Apr 2012) Log Message: ----------- Fix for Feature Request 3117718 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c openhpi/trunk/plugins/oa_soap/oa_soap_calls.h openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.h openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2012-04-21 00:57:53 UTC (rev 7413) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2012-04-21 02:00:27 UTC (rev 7414) @@ -148,6 +148,20 @@ response->extraData = soap_walk_tree(node, "extraData"); } +/* parse_bladePortMap- Parses a bladePortMap response structure */ +static void parse_bladePortMap(xmlNode *node, struct bladePortMap *response) +{ + response->bladeBayNumber = soap_tree_value(node, "bladeBayNumber"); + response->status = + soap_enum(portMapStatus_S, soap_tree_value(node, "status")); + response->bladeSizeType = + soap_enum(bladeSizeType_S, + soap_tree_value(node, "bladeSizeType")); + response->numberOfMezzes = soap_tree_value(node, "numberOfMezzes"); + response->mezz = soap_walk_tree(node, "mezz"); + response->extraData = soap_walk_tree(node, "extraData"); +} + /* parse_bladeMpInfo - Parses a bladeMpInfo response structure */ static void parse_bladeMpInfo(xmlNode *node, struct bladeMpInfo *response) { @@ -508,6 +522,26 @@ response->powerOffWatts = atoi(soap_tree_value(node, "powerOffWatts")); response->extraData = soap_walk_tree(node, "extraData"); } +/* parse_interconnectTrayPortMap- parses an interconnectTrayPortMap response + * struture. + */ +static void parse_interconnectTrayPortMap(xmlNode *portmap, + struct interconnectTrayPortMap *result) +{ + result->interconnectTrayBayNumber = + atoi(soap_tree_value(portmap, "interconnectTrayBayNumber")); + result->status = soap_enum(portMapStatus_S, + soap_tree_value(portmap, "status")); + result->sizeType = soap_enum(interconnectTraySizeType_S, + soap_tree_value(portmap, "sizeType")); + result->passThroughModeEnabled = + soap_enum(interconnectTrayPassThroughEnabled_S, + soap_tree_value(portmap, + "passThroughModeEnabled")); + result->slot = soap_walk_tree(portmap, "slot:interconnectTrayPortMap"); + result->numberOfSlots = atoi(soap_tree_value(portmap, "numberOfSlots")); + result->extraData = soap_walk_tree(portmap, "extraData"); +} /* parse_powerSupplyInfo - Parses a powerSupplyInfo response structure */ static void parse_powerSupplyInfo(xmlNode *node, @@ -855,6 +889,150 @@ result->macAddress = soap_tree_value(nics, "macAddress"); } +/* soap_getBladeMezzInfo - Walks list of bladeMezzInfo nodes, providing details + * on each Mezz Card. + * + * Outputs: + * mezzNumber: Mezz number + * mezzSlots: Mezz slots node + * mezzDevices: Mezz devices node + */ +void soap_getBladeMezzInfo(xmlNode *mezz, struct bladeMezzInfo *result) +{ + result->mezzNumber = soap_tree_value(mezz, "mezzNumber"); + result->mezzSlots = soap_walk_tree(mezz, "mezzSlots"); + result->mezzDevices = soap_walk_tree(mezz, "mezzDevices"); + result->extraData = soap_walk_tree(mezz, "extraData"); + + +} +/* soap_getBladeMezzDevInfo- Walks list of mezzDevices nodes, providing details + * on each Mezz device Info. + * + * Outputs: + * name: String containing the mezz device name + * type: enum containing the mezz device type + * port: XML node containg mezz device port info + */ +void soap_getBladeMezzDevInfo(xmlNode *mezzDevices, + struct bladeMezzDevInfo *result) +{ + result->name = soap_tree_value(mezzDevices, "name"); + result->type = soap_enum(bladeMezzDevType_S, + soap_tree_value(mezzDevices, "type")); + result->port = soap_walk_tree(mezzDevices, "port"); + result->extraData = soap_walk_tree(mezzDevices, "extraData"); +} + +/* soap_getBladeMezzSlotInfo- Walks list of mezzSlots nodes, providing details + * on each Mezz Card slot. + * + * Outputs: + * type: enum containing the mezz slot type + * slot: XML node containing the mezz slot port info + */ +void soap_getBladeMezzSlotInfo(xmlNode *mezzSlots, + struct bladeMezzSlotInfo *result) +{ + result->type = soap_enum(bladeMezzSlotType_S, + soap_tree_value(mezzSlots, "type")); + result->slot = soap_walk_tree(mezzSlots, "slot"); + result->extraData = soap_walk_tree(mezzSlots, "extraData"); +} +/* soap_getBladeMezzSlotPort- Walks list of bladeMezzSlotPort nodes, providing + * details on each slot port. + * + * Outputs: + * slotNumber: String describing mezz slot number + * interconnectTrayBayNumber: String containing interconnectTrayBayNumber + * interconnectTrayPortNumber: String containing interconnectTrayPortNumber + */ +void soap_getBladeMezzSlotPort(xmlNode *slot, + struct bladeMezzSlotPort *result) +{ + result->slotNumber = soap_tree_value(slot, "slotNumber"); + result->interconnectTrayBayNumber = + soap_tree_value(slot, "interconnectTrayBayNumber"); + result->interconnectTrayPortNumber = + soap_tree_value(slot, "interconnectTrayPortNumber"); + result->extraData = soap_walk_tree(slot, "extraData"); +} +/* soap_getBladeMezzDevPort- Walks list of bladeMezzDevPort nodes, providing + * details on each Mezz DevPort. + * + * Outputs: + * portNumber: String describing Mezz Device port number + * wwpn: String containing wwpn + * fabric: enum containing the fabric type + * status: enum containing fabricStatus + */ +void soap_getBladeMezzDevPort(xmlNode *port, struct bladeMezzDevPort *result) +{ + result->portNumber = soap_tree_value(port, "portNumber"); + result->wwpn = soap_tree_value(port, "wwpn"); + result->fabric = soap_enum(fabricType_S, + soap_tree_value(port, "fabric")); + result->status = soap_enum(fabricStatus_S, + soap_tree_value(port, "status")); + result->extraData = soap_walk_tree(port, "extraData"); +} +/* soap_getInterconnectTraySlotInfo- Walks list of interconnectTraySlotInfo + * nodes, providing details on each InterconnectTray Slot. + * + * Outputs: + * interconnectTraySlotNumber: InterconnectTray Slot Number + * type: Enum containing interconnect tray type + * port: XML node containing InterconnectTraySlot Port + */ +void soap_getInterconnectTraySlotInfo(xmlNode *slot, + struct interconnectTraySlotInfo *result) +{ + result->interconnectTraySlotNumber = + atoi(soap_tree_value(slot, "interconnectTraySlotNumber")); + result->type = soap_enum(interconnectTrayType_S, + soap_tree_value(slot, "type")); + result->port = soap_walk_tree(slot, "port:slot"); + result->extraData = soap_walk_tree(slot, "extraData"); +} +/* soap_getInterconnectTrayPortInfo- Walks list of interconnectTrayPortInfo + * nodes, providing details on each InterconnectTrayPort. + * + * Outputs: + * interconnectTraySlotPortNumber: Interconnect tray slot port number + * bladeBayNumber: Blade Bay Number + * bladeMezzNumber: Blade Mezz Number + * bladeMezzPortNumber: BladeMezzPortNumber + * portStatus: Enum containing Interconnect Tray Port Status + * portEnabled: Enum containing the interconnectTray Port + * enabled status. + * portUidStatus: Enum containing interconnect tray port + * Uid status + * portLinkLedStatus: Enum containing interconnect tray port link + * Led Status + */ +void soap_getInterconnectTrayPortInfo(xmlNode *port, + struct interconnectTrayPortInfo *result) +{ + result->interconnectTraySlotPortNumber = + atoi(soap_tree_value(port, "interconnectTraySlotPortNumber")); + result->bladeBayNumber = + atoi(soap_tree_value(port, "bladeBayNumber")); + result->bladeMezzNumber = + atoi(soap_tree_value(port, "bladeMezzNumber")); + result->bladeMezzPortNumber = + atoi(soap_tree_value(port, "bladeMezzPortNumber")); + result->portStatus = soap_enum(interconnectTrayPortStatus_S, + soap_tree_value(port, "portStatus")); + result->portEnabled = soap_enum(interconnectTrayPortEnabled_S, + soap_tree_value(port, "portEnabled")); + result->portUidStatus = soap_enum(interconnectTrayPortUidStatus_S, + soap_tree_value(port, "portUidStatus")); + result->portLinkLedStatus = + soap_enum(interconnectTrayPortLinkLedStatus_S, + soap_tree_value(port, "portLinkLedStatus")); + result->extraData = soap_walk_tree(port, "extraData"); +} + #if 0 /* TODO: Not sure the following call * will work...perhaps same problem * as extraData @@ -1205,7 +1383,13 @@ } /* BLADEPORTMAP */ + if ((node = soap_walk_tree(events, "bladePortMap"))) { + result->enum_eventInfo = BLADEPORTMAP; + parse_bladePortMap(node, &(result->eventData.bladePortMap)); + return; + } + if ((node = soap_walk_tree(events, "fanInfo"))) { result->enum_eventInfo = FANINFO; soap_fanInfo(node, &(result->eventData.fanInfo)); @@ -1225,8 +1409,13 @@ &(result->eventData.interconnectTrayInfo)); return; } - /* INTERCONNECTTRAYPORTMAP */ + if ((node = soap_walk_tree(events, "interconnectTrayPortMap"))) { + result->enum_eventInfo = INTERCONNECTTRAYPORTMAP; + parse_interconnectTrayPortMap(node, + &(result->eventData.interconnectTrayPortMap)); + return; + } if ((node = soap_walk_tree(events, "powerSupplyInfo"))) { result->enum_eventInfo = POWERSUPPLYINFO; @@ -1414,7 +1603,22 @@ } return(ret); } - +int soap_getBladePortMap(SOAP_CON *con, + const struct getBladeInfo *request, + struct bladePortMap *response) +{ + SOAP_PARM_CHECK + if (! (ret = soap_request(con, GET_BLADE_PORTMAP, + request->bayNumber))) + { + parse_bladePortMap(soap_walk_doc(con->doc, + "Body:" + "getBladePortMapResponse:" + "bladePortMap"), + response); + } + return(ret); +} int soap_getBladeMpInfo(SOAP_CON *con, const struct getBladeMpInfo *request, struct bladeMpInfo *response) @@ -1634,7 +1838,23 @@ } return(ret); } - +int soap_getInterconnectTrayPortMap(SOAP_CON *con, + const struct getInterconnectTrayInfo *request, + struct interconnectTrayPortMap *response) +{ + SOAP_PARM_CHECK + if (! (ret = soap_request(con, + GET_INTERCONNECT_TRAY_PORT_MAP, + request->bayNumber))) { + parse_interconnectTrayPortMap( + soap_walk_doc(con->doc, + "Body:" + "getInterconnectTrayPortMapResponse:" + "interconnectTrayPortMap"), + response); + } + return(ret); +} int soap_getFanInfo(SOAP_CON *con, const struct getFanInfo *request, struct fanInfo *response) Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-04-21 00:57:53 UTC (rev 7413) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-04-21 02:00:27 UTC (rev 7414) @@ -38,7 +38,6 @@ #ifndef _OA_SOAP_CALLS_H_ #define _OA_SOAP_CALLS_H_ - /* Include files */ #include "oa_soap_callsupport.h" @@ -63,6 +62,11 @@ "<hpoa:bayNumber>%d</hpoa:bayNumber>" \ "</hpoa:getBladeInfo>\n" +#define GET_BLADE_PORTMAP \ + "<hpoa:getBladePortMap>" \ + "<hpoa:bayNumber>%d</hpoa:bayNumber>" \ + "</hpoa:getBladePortMap>\n" + #define SUBSCRIBE_FOR_EVENTS \ "<hpoa:subscribeForEvents>" \ "</hpoa:subscribeForEvents>\n" @@ -171,6 +175,11 @@ "<hpoa:bayNumber>%d</hpoa:bayNumber>" \ "</hpoa:getInterconnectTrayInfo>\n" +#define GET_INTERCONNECT_TRAY_PORT_MAP \ + "<hpoa:getInterconnectTrayPortMap>" \ + "<hpoa:bayNumber>%d</hpoa:bayNumber>" \ + "</hpoa:getInterconnectTrayPortMap>\n" + #define GET_FAN_INFO \ "<hpoa:getFanInfo>" \ "<hpoa:bayNumber>%d</hpoa:bayNumber>" \ @@ -462,10 +471,16 @@ INTERCONNECT_TRAY_TYPE_SAS, INTERCONNECT_TRAY_TYPE_MAX) -OA_SOAP_ENUM(interconnectTraySizeType, +enum interconnectTraySizeType { INTERCONNECT_TRAY_SIZE_TYPE_MT, + INTERCONNECT_TRAY_SIZE_TYPE_0X1, INTERCONNECT_TRAY_SIZE_TYPE_1X1, - INTERCONNECT_TRAY_SIZE_TYPE_2x1) + INTERCONNECT_TRAY_SIZE_TYPE_2x1}; +OA_SOAP_ENUM_STRING(interconnectTraySizeType, + INTERCONNECT_TRAY_SIZE_TYPE_MT, + INTERCONNECT_TRAY_SIZE_TYPE-1X1, + INTERCONNECT_TRAY_SIZE_TYPE_1X1, + INTERCONNECT_TRAY_SIZE_TYPE_2X1) OA_SOAP_ENUM(interconnectTrayPassThroughEnabled, INTERCONNECT_TRAY_PASSTHROUGH_UNKNOWN, @@ -958,6 +973,11 @@ { int bayNumber; }; +/* Structures that supply information to OA SOAP calls */ +struct getBladePortMap +{ + int bayNumber; +}; struct diagnosticChecks { @@ -1140,9 +1160,9 @@ struct bladeMezzSlotPort { - byte slotNumber; - byte interconnectTrayBayNumber; - byte interconnectTrayPortNumber; + char *slotNumber; + char *interconnectTrayBayNumber; + char *interconnectTrayPortNumber; xmlNode *extraData; /* Items are struct extraDataInfo */ }; @@ -1150,13 +1170,13 @@ { enum bladeMezzSlotType type; int sizeslot; - struct bladeMezzSlotPort slot; + xmlNode *slot; xmlNode *extraData; /* Items are struct extraDataInfo */ }; struct bladeMezzDevPort { - byte portNumber; + char *portNumber; char *wwpn; enum fabricType fabric; enum fabricStatus status; @@ -1169,26 +1189,25 @@ enum bladeMezzDevType type; enum bladeMezzDevStatus status; int sizeport; - struct bladeMezzDevPort port; + xmlNode *port; xmlNode *extraData; /* Items are struct extraDataInfo */ }; struct bladeMezzInfo { - byte mezzNumber; - struct bladeMezzSlotInfo mezzSlots; - struct bladeMezzDevInfo mezzDevices; + char *mezzNumber; + xmlNode *mezzSlots; + xmlNode *mezzDevices; xmlNode *extraData; /* Items are struct extraDataInfo */ }; struct bladePortMap { - byte bladeBayNumber; + char *bladeBayNumber; enum portMapStatus status; enum bladeSizeType bladeSizeType; - byte numberOfMezzes; - int sizemezz; - struct bladeMezzInfo mezz; + char *numberOfMezzes; + xmlNode *mezz; xmlNode *extraData; /* Items are struct extraDataInfo */ }; @@ -1288,7 +1307,7 @@ byte interconnectTraySlotNumber; enum interconnectTrayType type; int sizeport; - struct interconnectTrayPortInfo port; + xmlNode *port; xmlNode *extraData; /* Items are struct extraDataInfo */ }; @@ -1300,7 +1319,7 @@ enum interconnectTrayPassThroughEnabled passThroughModeEnabled; byte numberOfSlots; int sizeslot; - struct interconnectTraySlotInfo slot; + xmlNode *slot; xmlNode *extraData; /* Items are struct extraDataInfo */ }; @@ -2046,6 +2065,10 @@ const struct getBladeInfo *request, struct bladeInfo *response); +int soap_getBladePortMap(SOAP_CON *connection, + const struct getBladeInfo *request, + struct bladePortMap *response); + int soap_getBladeMpInfo(SOAP_CON *connection, const struct getBladeMpInfo *request, struct bladeMpInfo *response); @@ -2166,12 +2189,30 @@ struct bladeThermalInfoArrayResponse *response); +int soap_getInterconnectTrayPortMap(SOAP_CON *con, + const struct getInterconnectTrayInfo *request, + struct interconnectTrayPortMap *response); + + /* Function prototypes for OA SOAP helper functions */ void soap_getExtraData(xmlNode *extraData, struct extraDataInfo *result); void soap_getDiagnosticChecksEx(xmlNode *diag, struct diagnosticData *result); void soap_getBladeCpuInfo(xmlNode *cpus, struct bladeCpuInfo *result); void soap_getBladeNicInfo(xmlNode *nics, struct bladeNicInfo *result); +void soap_getBladeMezzInfo(xmlNode *mezz, struct bladeMezzInfo *result); +void soap_getBladeMezzDevInfo(xmlNode *mezzDevices, + struct bladeMezzDevInfo *result); +void soap_getBladeMezzSlotInfo(xmlNode *mezzSlots, + struct bladeMezzSlotInfo *result); +void soap_getBladeMezzSlotPort(xmlNode *slot, + struct bladeMezzSlotPort *result); +void soap_getBladeMezzDevPort(xmlNode *port, + struct bladeMezzDevPort *result); +void soap_getInterconnectTraySlotInfo(xmlNode *slot, + struct interconnectTraySlotInfo *result); +void soap_getInterconnectTrayPortInfo(xmlNode *port, + struct interconnectTrayPortInfo *result); void soap_getDiagnosticData(xmlNode *data, struct diagnosticData *result); void soap_getBayAccess(xmlNode *bay, struct bayAccess *result); void soap_getEncLink(xmlNode *data, struct encLink *result); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.h 2012-04-21 00:57:53 UTC (rev 7413) +++ openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.h 2012-04-21 02:00:27 UTC (rev 7414) @@ -159,7 +159,7 @@ #else #define OA_SOAP_ENUM_STRING(name, ...) #endif - +#define OA_SOAP_CALLS_FILE /* Defines ENUM strings in this file */ #define OA_SOAP_ENUM(name, ...) \ enum name { __VA_ARGS__ }; \ OA_SOAP_ENUM_STRING(name, __VA_ARGS__) Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-21 00:57:53 UTC (rev 7413) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-21 02:00:27 UTC (rev 7414) @@ -1807,7 +1807,11 @@ SaHpiFloat64T fm_version; SaHpiInt32T major; struct bladeNicInfo nic_info; - char *nic_address = NULL; + struct bladeMezzInfo mezz_info; + struct bladePortMap portmap; + struct bladeCpuInfo cpu_info; + char *tmp = NULL; + int cpu_no = 0; if (oh_handler == NULL || con == NULL || rdr == NULL || inventory == NULL) { @@ -1952,9 +1956,193 @@ rpt->ResourceInfo.FirmwareMajorRev = major = floor(fm_version); rpt->ResourceInfo.FirmwareMinorRev = rintf((fm_version - major) * 100); } - /* Get the Blade NIC information*/ + /** MP Info **/ + if (blade_mp_response.modelName != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "MP Model name = %s", + blade_mp_response.modelName); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold MP Model name"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + if (blade_mp_response.ipAddress != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "MP IP Address = %s", + blade_mp_response.ipAddress); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold MP IP Address"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + if (blade_mp_response.macAddress != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "MP MAC Address = %s", + blade_mp_response.macAddress); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold MP MAC Address"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + if (blade_mp_response.dnsName != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "MP DNS name = %s", + blade_mp_response.dnsName); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold MP DNS name"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + /* Get the Blade NIC information*/ rv = soap_getBladeInfo(con, &request, &response); + if (rv != SOAP_OK) { + err("Get blade info failed"); + return rv; + } + /* Adding Custom Field for Number of NICs Installed*/ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "NICs Installed = %d", + response.numberOfNics); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold NICs Installed"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); while (response.nics){ soap_getBladeNicInfo(response.nics, &nic_info); @@ -1966,30 +2154,745 @@ hpi_field.AreaId = local_inventory->info.area_list-> idr_area_head.AreaId; hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; - rv = asprintf(&nic_address, "%s = %s", nic_info.port, + rv = asprintf(&tmp, "%s = %s", nic_info.port, nic_info.macAddress); - strcpy ((char *)hpi_field.Field.Data, - nic_address); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold MAC Address and NIC Port"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); - rv = idr_field_add(&(local_inventory->info.area_list - ->field_list), - &hpi_field); - if (rv != SA_OK) { - err("Add idr field failed"); - return rv; - } + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } - /* Increment the field counter */ - local_inventory->info.area_list->idr_area_head. - NumFields++; + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); } response.nics = soap_next_node(response.nics); } + + /* Adding the custom field for the Number of CPUs installed + */ + if(response.numberOfCpus){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "No. of CPUs = %d", + response.numberOfCpus); + if(rv == -1){ + err("Failed to allocate memory for buffer to \ + hold No. of CPUs"); + free(tmp); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + + while (response.cpus){ + + soap_getBladeCpuInfo(response.cpus, &cpu_info); + + if (cpu_info.cpuType != NULL && cpu_info.cpuSpeed != 0) { + rv = asprintf(&tmp, " CPU %d = %s, %d MHz", + ++cpu_no,cpu_info.cpuType,cpu_info.cpuSpeed); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold CPU name and speed"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + } + else { + rv = asprintf(&tmp, " CPU %d = Not present",++cpu_no); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold Not present CPU Number"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + } + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + response.cpus = soap_next_node(response.cpus); + } + + /* Code For Memory Starts Here */ + + if (response.memory != 0) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "Memory(RAM) = %d MB", + response.memory); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold Memory(RAM) size"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + + rv = soap_getBladePortMap(con, + &request, &portmap); + if (rv != SA_OK) { + err("soap_getBladePortMap call failed"); + return rv; + } + while(portmap.mezz){ + soap_getBladeMezzInfo(portmap.mezz, &mezz_info); + if(mezz_info.mezzNumber != NULL){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "Mezz No. = %s", + mezz_info.mezzNumber); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for \ + buffer to hold \ + Mezz No."); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add( + &(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list + ->idr_area_head. + NumFields++; + }else { + err("Source String length \ + is greater than \ + SAHPI_MAX_TEXT_ \ + BUFFER_LENGTH"); + } + free(tmp); + } + /*** Add Mezz Slot Innventory fileds ***/ + if(mezz_info.mezzSlots != NULL){ + rv = add_mezz_slot_idr_fields( + mezz_info.mezzSlots, + local_inventory); + if(rv != SA_OK){ + err("Add mezz_slot_idr_fields failed"); + return rv; + } + } + + /*** Add Mezz Device Inventory fields ***/ + + if(mezz_info.mezzDevices !=NULL){ + rv = add_mezz_device_idr_fields( + mezz_info.mezzDevices, + local_inventory); + if(rv != SA_OK){ + err("Add mezz_devices_idr_fields \ + failed"); + return rv; + } + + } + + portmap.mezz = soap_next_node(portmap.mezz); + } } return SA_OK; } /** + * add_mezz_slot_idr_fields + * @mezzSlots: pointer to mezz slot xmlnode + * @local_inventory: Rdr private data structure + * + * Purpose: + * This function is for adding mezzslot idr fields of server blade. + * + * Detailed Description: + * - Populates the server mezzslot inventory rdr with default values + * - Inventory data repository is created and associated in the private + * data area of the Inventory RDR + * + * Return values: + * SA_OK - Normal case + * SA_ERR_HPI_INVALID_PARAMS - On wrong parameters + * SA_ERR_HPI_INTERNAL_ERROR - oa_soap plugin has encountered an internal + * error + * SA_ERR_HPI_OUT_OF_MEMORY - Request failed due to insufficient memory + **/ + +SaErrorT add_mezz_slot_idr_fields(xmlNode *mezzSlots, + struct oa_soap_inventory *local_inventory) +{ + SaErrorT rv = SA_OK; + SaHpiIdrFieldT hpi_field; + struct bladeMezzSlotInfo mezzSlot_Info; + struct bladeMezzSlotPort mezzSlots_slot; + char* tmp = NULL; + + if(mezzSlots == NULL || local_inventory == NULL){ + err("Invalid parameter."); + return SA_ERR_HPI_INVALID_PARAMS; + } + soap_getBladeMezzSlotInfo(mezzSlots, + &mezzSlot_Info); + switch(mezzSlot_Info.type){ + case 0: tmp = "MEZZ_SLOT_TYPE_MT"; + break; + case 1: tmp = "MEZZ_SLOT_TYPE_ONE"; + break; + case 2: tmp = "MEZZ_SLOT_TYPE_TWO"; + break; + case 3: tmp = "MEZZ_SLOT_TYPE_FIXED"; + break; + default: tmp = "MEZZ_SLOT_TYPE_UNKNOWN"; + break; + } + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + while(mezzSlot_Info.slot){ + soap_getBladeMezzSlotPort( + mezzSlot_Info.slot, + &mezzSlots_slot); + if(mezzSlots_slot.slotNumber != NULL){ + memset(&hpi_field, 0, + sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory-> + info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = + SAHPI_IDR_FIELDTYPE_CUSTOM; + + rv = asprintf(&tmp, "Mezz Slot No. = %s", + mezzSlots_slot.slotNumber); + if(rv == -1){ + err("Failed to allocate memory for \ + buffer to hold Mezz Slot No."); + free(tmp); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory-> + info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source Strig length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + + } + if(mezzSlots_slot.interconnectTrayBayNumber != NULL){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, + "InterconnectTrayBay No. = %s", + mezzSlots_slot. + interconnectTrayBayNumber); + if(rv == -1){ + err("Failed to allocate memory for buffer to \ + hold InterconnectTrayBay No."); + free(tmp); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory-> + info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + if(mezzSlots_slot.interconnectTrayPortNumber != NULL){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, + "InterconnectTrayPort No. = %s", + mezzSlots_slot. + interconnectTrayBayNumber); + if(rv == -1){ + err("Failed to allocate memory for buffer to \ + hold InterconnectTrayPort No."); + free(tmp); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + rv = idr_field_add(&(local_inventory-> + info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + } + mezzSlot_Info.slot = soap_next_node(mezzSlot_Info.slot); + } + + return SA_OK; +} + +/** This function is to add Mezz device inventory fields + * @mezzDevices: Pointet to mezz devie xmlnode + * @local_inventory: Rdr private data structure + * + * Purpose: + * This function is for adding mezzdevices idr fields of server blade. + * + * Detailed Description: + * - Populates the server mezzdevices inventory rdr with default values + * - Inventory data repository is created and associated in the private + * data area of the Inventory RDR + * + * Return values: + * SA_OK - Normal case + * SA_ERR_HPI_INVALID_PARAMS - On wrong parameters + * SA_ERR_HPI_INTERNAL_ERROR - oa_soap plugin has encountered an internal + * error + * SA_ERR_HPI_OUT_OF_MEMORY - Request failed due to insufficient memory + **/ + +SaErrorT add_mezz_device_idr_fields(xmlNode *mezzDevices, + struct oa_soap_inventory *local_inventory) +{ + SaErrorT rv = SA_OK; + SaHpiIdrFieldT hpi_field; + struct bladeMezzDevInfo mezzDev_Info; + struct bladeMezzDevPort mezzDev_Port; + char *tmp = NULL; + + if(mezzDevices ==NULL || local_inventory == NULL){ + err("Invalid parameter."); + return SA_ERR_HPI_INVALID_PARAMS; + } + soap_getBladeMezzDevInfo(mezzDevices, &mezzDev_Info); + if(mezzDev_Info.name != NULL){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + if(strlen(mezzDev_Info.name) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + mezzDev_Info.name); + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + } + switch(mezzDev_Info.type){ + case 0: tmp = "MEZZ_DEV_TYPE_MT"; + break; + case 1: tmp = "MEZZ_DEV_TYPE_ONE"; + break; + case 2: tmp = "MEZZ_DEV_TYPE_TWO"; + break; + case 3: tmp = "MEZZ_DEV_TYPE_FIXED"; + break; + default: tmp = "MEZZ_DEV_TYPE_UNKNOWN"; + break; + } + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + + strcpy ((char *)hpi_field.Field.Data, + tmp); + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + switch(mezzDev_Info.status){ + case 1: tmp = "MEZZ_DEV_STATUS_OK"; + break; + case 2: tmp = "MEZZ_DEV_STATUS_MISMATCH"; + break; + default: tmp = "MEZZ_DEV_STATUS_UNKNOWN"; + break; + } + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + } else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + while(mezzDev_Info.port){ + soap_getBladeMezzDevPort(mezzDev_Info.port, + &mezzDev_Port); + if(mezzDev_Port.portNumber != NULL){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "MezzDevPort No. = %s", + mezzDev_Port.portNumber); + if(rv == -1){ + err("Failed to allocate memory for buffer to \ + hold MezzDevPort No."); + free(tmp); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory-> + info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + free(tmp); + if(mezzDev_Port.wwpn != NULL){ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = + local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + rv = asprintf(&tmp, "MezzDevPort wwpn = %s", + mezzDev_Port.wwpn); + if(rv == -1){ + err("Failed to allocate memory for \ + buffer to hold \ + MezzDevPort wwpn"); + free(tmp); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory-> + info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list + ->idr_area_head. + NumFields++; + }else { + err("Source String length \ + is greater than \ + SAHPI_MAX_TEXT_ \ + BUFFER_LENGTH"); + } + free(tmp); + } + switch(mezzDev_Port.fabric){ + case 0: tmp = "FABRIC_TYPE_MT"; + break; + case 1: tmp = "FABRIC_TYPE_ETH"; + break; + case 2: tmp = "FABRIC_TYPE_FIB"; + break; + case 3: tmp = "FABRIC_TYPE_10GETH"; + break; + case 4: tmp = "FABRIC_TYPE_IFB"; + break; + case 5: tmp = "FABRIC_TYPE_PCI"; + break; + case 6: tmp = "FABRIC_TYPE_SAS"; + break; + case 7: tmp = "FABRIC_TYPE_MAX"; + break; + default: tmp = "FABRIC_TYPE_UNKNOWN"; + break; + } + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + + switch(mezzDev_Port.status){ + case 1: tmp = "FABRIC_STATUS_OK"; + break; + case 2: tmp = "FABRIC_STATUS_MISMATCH"; + break; + default: tmp = "FABRIC_STATUS_UNKNOWN"; + break; + } + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + if(strlen(tmp) < SAHPI_MAX_TEXT_BUFFER_LENGTH){ + strcpy ((char *)hpi_field.Field.Data, + tmp); + rv = idr_field_add(&(local_inventory + ->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + + }else { + err("Source String length is greater than \ + SAHPI_MAX_TEXT_BUFFER_LENGTH"); + } + } + mezzDev_Info.port = soap_next_node(mezzDev_Info.port); + } + return SA_OK; +} + +/** * build_inserted_server_inv_rdr * @oh_handler: Handler data pointer * @bay_number: Bay number of the inserted server @@ -2271,6 +3174,8 @@ struct extraDataInfo extra_data_info; SaHpiFloat64T fm_version=0; SaHpiInt32T major=0; + struct interconnectTrayPortMap portmap; + char *tmp = NULL; if (oh_handler == NULL || con == NULL || rdr == NULL || inventory == NULL) { @@ -2418,6 +3323,103 @@ rpt->ResourceInfo.FirmwareMajorRev = major; rpt->ResourceInfo.FirmwareMinorRev = rintf((fm_version - major) * 100); } + request.bayNumber = bay_number; + rv = soap_getInterconnectTrayPortMap(con, &request, &portmap); + if (rv != SOAP_OK) { + err("Get Interconnect tray port map failed"); + return SA_ERR_HPI_INTERNAL_ERROR; + } + + if (portmap.interconnectTrayBayNumber) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + asprintf(&tmp, "InterconnectTrayBay No. = %d", + portmap.interconnectTrayBayNumber); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold InterconnectTrayBay No."); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + free(tmp); + } + if (portmap.status) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + asprintf(&tmp, "portMapStatus = %d",portmap.status); + if(rv == -1){ + free(tmp); + err("Failed to allocate memory for buffer to \ + hold portMapStatus"); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + free(tmp); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; + free(tmp); + } + /* Add interconnect tray size type*/ + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = local_inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_CUSTOM; + switch(portmap.sizeType){ + case 0: tmp = "INTERCONNECT_TRAY_SIZE_TYPE_MT"; + break; + case 1: tmp = "INTERCONNECT_TRAY_SIZE_TYPE-1X1"; + break; + case 2: tmp = "INTERCONNECT_TRAY_SIZE_TYPE_1x1"; + break; + case 3: tmp = "INTERCONNECT_TRAY_SIZE_TYPE_2x1"; + break; + default: tmp = "Invalid Size Type"; + break; + } + strcpy ((char *)hpi_field.Field.Data, + tmp); + + rv = idr_field_add(&(local_inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + local_inventory->info.area_list->idr_area_head. + NumFields++; } return SA_OK; } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.h 2012-04-21 00:57:53 UTC (rev 7413) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.h 2012-04-21 02:00:27 UTC (rev 7414) @@ -209,6 +209,12 @@ SaHpiRdrT *rdr, struct oa_soap_inventory **pinv); +SaErrorT add_mezz_slot_idr_fields(xmlNode *mezzSlots, + struct oa_soap_inventory *local_inventory); + +SaErrorT add_mezz_device_idr_fields(xmlNode *mezzDevices, + struct oa_soap_inventory *local_inventory); + SaErrorT build_inserted_server_inv_rdr(struct oh_handler_state *oh_handler, SaHpiInt32T bay_number, SaHpiRdrT *rdr, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-04-27 23:34:43
|
Revision: 7420 http://openhpi.svn.sourceforge.net/openhpi/?rev=7420&view=rev Author: dr_mohan Date: 2012-04-27 23:34:37 +0000 (Fri, 27 Apr 2012) Log Message: ----------- Fix for #3520830 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-04-27 23:18:16 UTC (rev 7419) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-04-27 23:34:37 UTC (rev 7420) @@ -475,12 +475,15 @@ INTERCONNECT_TRAY_SIZE_TYPE_MT, INTERCONNECT_TRAY_SIZE_TYPE_0X1, INTERCONNECT_TRAY_SIZE_TYPE_1X1, - INTERCONNECT_TRAY_SIZE_TYPE_2x1}; + INTERCONNECT_TRAY_SIZE_TYPE_2x1, + INTERCONNECT_TRAY_SIZE_TYPE_3x1}; + OA_SOAP_ENUM_STRING(interconnectTraySizeType, INTERCONNECT_TRAY_SIZE_TYPE_MT, INTERCONNECT_TRAY_SIZE_TYPE-1X1, INTERCONNECT_TRAY_SIZE_TYPE_1X1, - INTERCONNECT_TRAY_SIZE_TYPE_2X1) + INTERCONNECT_TRAY_SIZE_TYPE_2X1, + INTERCONNECT_TRAY_SIZE_TYPE-2x1) OA_SOAP_ENUM(interconnectTrayPassThroughEnabled, INTERCONNECT_TRAY_PASSTHROUGH_UNKNOWN, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-27 23:18:16 UTC (rev 7419) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-04-27 23:34:37 UTC (rev 7420) @@ -3403,6 +3403,8 @@ break; case 3: tmp = "INTERCONNECT_TRAY_SIZE_TYPE_2x1"; break; + case 4: tmp = "INTERCONNECT_TRAY_SIZE_TYPE-2x1"; + break; default: tmp = "Invalid Size Type"; break; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2012-07-18 18:16:42
|
Revision: 7481 http://openhpi.svn.sourceforge.net/openhpi/?rev=7481&view=rev Author: hemanthreddy Date: 2012-07-18 18:16:36 +0000 (Wed, 18 Jul 2012) Log Message: ----------- Fix for ID:3526603-openhpid core with SIGTERM Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_utils.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c 2012-07-14 22:13:57 UTC (rev 7480) +++ openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c 2012-07-18 18:16:36 UTC (rev 7481) @@ -471,7 +471,7 @@ char *username, char *password, long timeout) { - SOAP_CON *connection; + SOAP_CON *connection = NULL; /* Basic pass parameter checking */ if ((server == NULL) || (*server == '\0')) { @@ -620,11 +620,11 @@ static int soap_message(SOAP_CON *connection, char *request, xmlDocPtr *doc) { - int nbytes; - int ret; + int nbytes = 0; + int ret = 0; char * header=NULL; char response[OA_SOAP_RESP_BUFFER_SIZE]; - xmlParserCtxtPtr parse; + xmlParserCtxtPtr parse = NULL; /* Error checking */ if (! connection) { @@ -668,9 +668,11 @@ connection->timeout)) { (void) oh_ssl_disconnect(connection->bio, OH_SSL_BI); err("oh_ssl_write() failed"); + free(header); return(-1); } + free(header); /* Write request to server */ dbg("OA request(2):\n%s\n", request); if (oh_ssl_write(connection->bio, request, nbytes, @@ -772,7 +774,6 @@ xmlFreeParserCtxt(parse); return(-1); } - free(header); xmlFreeParserCtxt(parse); return(0); } @@ -830,8 +831,10 @@ /* Perform login request */ if (soap_message(connection, buf, &doc)) { err("failed to communicate with OA during login"); + free(buf); return(-1); } + free(buf); /* Parse looking for session ID. @@ -846,7 +849,6 @@ OA_SOAP_SESSIONKEY_SIZE); dbg("Opened session ID %s", connection->session_id); /* Free the XML document */ - free(buf); xmlFreeDoc(doc); return(0); /* Normal, successful return */ } @@ -867,7 +869,6 @@ else { err("failed to find session ID during OA login"); } - free(buf); xmlFreeDoc(doc); return(-1); } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-07-14 22:13:57 UTC (rev 7480) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-07-18 18:16:36 UTC (rev 7481) @@ -222,6 +222,7 @@ if (oa->event_con2 == NULL) sleep(2); } + free(url); /* Intialize the event request structure */ request.pid = oa->event_pid; @@ -303,7 +304,7 @@ } /* end of else (SOAP call failure handling) */ } /* end of 'while(listen_for_events == SAHPI_TRUE)' loop */ - free(url); + free(url); return (gpointer *) SA_OK; } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-07-14 22:13:57 UTC (rev 7480) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-07-18 18:16:36 UTC (rev 7481) @@ -5024,6 +5024,8 @@ } } + g_free(inventory->comment); + g_free(inventory); return SA_OK; } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_utils.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2012-07-14 22:13:57 UTC (rev 7480) +++ openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2012-07-18 18:16:36 UTC (rev 7481) @@ -219,7 +219,7 @@ SaHpiInt32T i, bay = 0, active_bay = 0, standby_bay = 0; SOAP_CON *hpi_con = NULL, *event_con = NULL; struct oa_info *this_oa = NULL, *other_oa = NULL; - char *endptr; + char *endptr = NULL; if (oh_handler == NULL|| server == NULL) { err("Invalid parameters"); @@ -246,17 +246,20 @@ /* Estabish the connection with OA */ hpi_con = soap_open(url, user_name, password, HPI_CALL_TIMEOUT); if (hpi_con == NULL) { + free(url); err("hpi_con intialization for OA - %s has failed", server); return SA_ERR_HPI_INTERNAL_ERROR; } event_con = soap_open(url, user_name, password, EVENT_CALL_TIMEOUT); if (event_con == NULL) { + free(url); err("event_con intialization for OA - %s has failed", server); soap_close(hpi_con); return SA_ERR_HPI_INTERNAL_ERROR; } + free(url); /* Check whether user_name has admin rights */ rv = check_oa_user_permissions(oa_handler, hpi_con, user_name); if (rv != SA_OK) { @@ -416,7 +419,6 @@ if (active_bay == 0 || standby_bay == 0) return SA_OK; - memset(url, 0, MAX_URL_LEN); memset(other_oa->server, 0, MAX_URL_LEN); /* Construct the other OA url and copy the IP address to oa_info * structure @@ -453,6 +455,7 @@ password, HPI_CALL_TIMEOUT); if (other_oa->hpi_con == NULL) { err("Initializing the hpi_con for OA %s failed", url); + free(url); /* If this OA status is ACTIVE, then return error, else ignore * If standby OA is not accessible, then the recovery from * this problem will be done by the event thread. @@ -475,6 +478,7 @@ password, EVENT_CALL_TIMEOUT); if (other_oa->event_con == NULL) { err("Initializing the event_con for OA %s failed", url); + free(url); /* If this OA status is ACTIVE, then return error, else * ignore */ @@ -1136,6 +1140,7 @@ oa->hpi_con = soap_open(url, user_name, password, HPI_CALL_TIMEOUT); if (oa->hpi_con == NULL) { + free(url); /* OA may not be reachable */ g_mutex_unlock(oa->mutex); return SA_ERR_HPI_INTERNAL_ERROR; @@ -1147,6 +1152,7 @@ oa->event_con = soap_open(url, user_name, password, EVENT_CALL_TIMEOUT); if (oa->event_con == NULL) { + free(url); /* OA may not be reachable */ g_mutex_unlock(oa->mutex); soap_close(oa->hpi_con); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2012-08-06 17:32:27
|
Revision: 7488 http://openhpi.svn.sourceforge.net/openhpi/?rev=7488&view=rev Author: hemanthreddy Date: 2012-08-06 17:32:21 +0000 (Mon, 06 Aug 2012) Log Message: ----------- Fix for issue ID:3545368-EVENT_BLADE_MP_INFO event needs to be handled Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-08-06 17:07:32 UTC (rev 7487) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-08-06 17:32:21 UTC (rev 7488) @@ -874,7 +874,9 @@ oa->event_con2, &event); break; case EVENT_BLADE_MP_INFO: - dbg("EVENT_BLADE_MP_INFO -- Not processed"); + dbg("EVENT_BLADE_MP_INFO"); + rv = process_server_mp_info_event(oh_handler, + oa->event_con2, &event); break; case EVENT_ILO_READY: dbg("EVENT_ILO_READY -- Not processed"); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2012-08-06 17:07:32 UTC (rev 7487) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2012-08-06 17:32:21 UTC (rev 7488) @@ -1339,3 +1339,126 @@ return; } + +/** + * process_server_mp_info_event + * @oh_handler: Pointer to openhpi handler structure + * @con: Pointer to the SOAP_CON structure + * @oa_event: Pointer to OA event structure + * + * Purpose: + * Process the blade mp info event + * + * Detailed Description: NA + * + * Return values: + * SA_OK - success. + * SA_ERR_HPI_INVALID_PARAMS - Invalid parameters + * SA_ERR_HPI_NOT_PRESENT - RDR is not present + **/ +SaErrorT process_server_mp_info_event(struct oh_handler_state + *oh_handler, + SOAP_CON *con, + struct eventInfo *oa_event) +{ + SaErrorT rv = SA_OK; + struct oa_soap_handler *oa_handler = NULL; + SaHpiInt32T bay_number; + SaHpiResourceIdT resource_id; + SaHpiRptEntryT *rpt = NULL; + struct oh_event event; + SaHpiRdrT *rdr = NULL; + SaHpiIdrIdT IdrId = 0; + SaHpiIdrFieldT field; + SaHpiFloat64T fm_version; + SaHpiInt32T major; + SaHpiInt32T minor; + char *fwVersion = NULL; + + if (oh_handler == NULL || oa_event == NULL || con == NULL) { + err("Invalid parameters"); + return SA_ERR_HPI_INVALID_PARAMS; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + bay_number = oa_event->eventData.bladeMpInfo.bayNumber; + fwVersion = oa_event->eventData.bladeMpInfo.fwVersion; + + resource_id = oa_handler-> + oa_soap_resources.server.resource_id[bay_number - 1]; + + rpt = oh_get_resource_by_id(oh_handler->rptcache, resource_id); + if (rpt == NULL) { + err("Not able to find the resource. Invalid resource id"); + return SA_ERR_HPI_NOT_PRESENT; + } + + /* Get the inventory RDR */ + rdr = oh_get_rdr_by_type(oh_handler->rptcache, resource_id, + SAHPI_INVENTORY_RDR, + SAHPI_DEFAULT_INVENTORY_ID); + if (rdr == NULL) { + err("Inventory RDR is not found"); + return SA_ERR_HPI_NOT_PRESENT; + } + + IdrId = rdr->RdrTypeUnion.InventoryRec.IdrId; + + if (strcmp(fwVersion,"[Unknown]") == 0 ) { + err("fwVersion is Unknown"); + return rv; + } + + fm_version = atof(fwVersion); + major = floor(fm_version); + minor = rintf((fm_version - major) * 100); + + if(rpt->ResourceInfo.FirmwareMajorRev == major && + rpt->ResourceInfo.FirmwareMinorRev == minor){ + return rv; + } + + if(major < rpt->ResourceInfo.FirmwareMajorRev || + minor < rpt->ResourceInfo.FirmwareMinorRev){ + err("Blade Firmware for Bay %d is going to be downgraded", bay_number); + } + + if (fwVersion != NULL) { + field.Type = SAHPI_IDR_FIELDTYPE_PRODUCT_VERSION; + field.Field.DataType = SAHPI_TL_TYPE_TEXT; + field.Field.Language = SAHPI_LANG_ENGLISH; + oa_soap_trim_whitespace(fwVersion); + field.Field.DataLength = strlen (fwVersion) + 1; + field.AreaId = 1; + field.FieldId = 3; + + snprintf((char *)field.Field.Data, field.Field.DataLength, + "%s", fwVersion); + + rv = oa_soap_set_idr_field(oh_handler, resource_id, IdrId, &field); + if (rv != SOAP_OK) { + err("oa_soap_set_idr_field failed"); + return rv; + } + + //Event Handling + memset(&event, 0, sizeof(struct oh_event)); + event.event.EventType = SAHPI_ET_RESOURCE; + memcpy(&event.resource, + rpt, + sizeof(SaHpiRptEntryT)); + event.event.Severity = SAHPI_INFORMATIONAL; + event.event.Source = event.resource.ResourceId; + if (oh_gettimeofday(&(event.event.Timestamp)) != SA_OK) { + event.event.Timestamp = SAHPI_TIME_UNSPECIFIED; + } + event.event.EventDataUnion.ResourceEvent. + ResourceEventType = SAHPI_RESE_RESOURCE_UPDATED; + event.rdrs = g_slist_append(event.rdrs, g_memdup(rdr, + sizeof(SaHpiRdrT))); + event.hid = oh_handler->hid; + oh_evt_queue_push(oh_handler->eventq, + copy_oa_soap_event(&event)); + } + return SA_OK; +} Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h 2012-08-06 17:07:32 UTC (rev 7487) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.h 2012-08-06 17:32:21 UTC (rev 7488) @@ -65,6 +65,11 @@ SaErrorT process_server_extraction_event(struct oh_handler_state *oh_handler, struct eventInfo *oa_event); +SaErrorT process_server_mp_info_event(struct oh_handler_state + *oh_handler, + SOAP_CON *con, + struct eventInfo *oa_event); + SaErrorT build_inserted_server_rpt(struct oh_handler_state *oh_handler, struct bladeInfo *response, SaHpiRptEntryT *rpt); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2012-08-06 19:24:30
|
Revision: 7489 http://openhpi.svn.sourceforge.net/openhpi/?rev=7489&view=rev Author: hemanthreddy Date: 2012-08-06 19:24:23 +0000 (Mon, 06 Aug 2012) Log Message: ----------- Fix for issue ID:3552248-Add PRODUCT_NAME field to power supply Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-08-06 17:32:21 UTC (rev 7488) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-08-06 19:24:23 UTC (rev 7489) @@ -1332,6 +1332,7 @@ enum presence presence; char modelNumber[MAX_MODEL_NUM_LENGTH]; char sparePartNumber[MAX_PART_NUM_LENGTH]; + char *product_name; char serialNumber[MAX_SERIAL_NUM_LENGTH]; int capacity; int actualOutput; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-08-06 17:32:21 UTC (rev 7488) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-08-06 19:24:23 UTC (rev 7489) @@ -3593,6 +3593,9 @@ struct oa_soap_handler *oa_handler = NULL; SaHpiResourceIdT resource_id; SaHpiRptEntryT *rpt = NULL; + SaHpiInt32T product_area_success_flag = 0; + xmlNode *extra_data=NULL; + struct extraDataInfo extra_data_info; if (oh_handler == NULL || rdr == NULL || inventory == NULL) { @@ -3641,7 +3644,42 @@ strcpy(local_inventory->comment, power_inv_str); + /* Get the Product name from the extradata */ + extra_data = response->extraData; + while (extra_data) { + soap_getExtraData(extra_data, &extra_data_info); + if (!(strcmp(extra_data_info.name, "productName"))) { + response->product_name = extra_data_info.value; + break; + } + extra_data = soap_next_node(extra_data); + } + /* Create and add product area if resource name and/or manufacturer + * information exist + */ + rv = add_product_area(&local_inventory->info.area_list, + response->product_name, + NULL, + &add_success_flag); + if (rv != SA_OK) { + err("Add product area failed"); + return rv; + } + + /* add_success_flag will be true if product area is added, + * if this is the first successful creation of IDR area, then have + * area pointer stored as the head node for area list + */ + if (add_success_flag != SAHPI_FALSE) { + product_area_success_flag = SAHPI_TRUE; + (local_inventory->info.idr_info.NumAreas)++; + if (area_count == 0) { + head_area = local_inventory->info.area_list; + } + ++area_count; + } + /* Create and add board area if resource part number and/or * serial number exist */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2012-08-17 19:44:03
|
Revision: 7499 http://openhpi.svn.sourceforge.net/openhpi/?rev=7499&view=rev Author: hemanthreddy Date: 2012-08-17 19:43:57 +0000 (Fri, 17 Aug 2012) Log Message: ----------- Fix for issue ID:3559102 - Segfault in Power Supply Removal and Reinsertion Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-08-17 19:26:14 UTC (rev 7498) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.h 2012-08-17 19:43:57 UTC (rev 7499) @@ -45,6 +45,7 @@ #define MAX_SERIAL_NUM_LENGTH 32 #define MAX_PART_NUM_LENGTH 32 #define MAX_MODEL_NUM_LENGTH 32 +#define MAX_PRODUCT_NAME_LENGTH 32 /* Moved these #defines from oa_soap.h - which includes this header file. */ /* Max Blade in HP BladeSystem c7000 c-Class enclosure*/ @@ -1332,7 +1333,7 @@ enum presence presence; char modelNumber[MAX_MODEL_NUM_LENGTH]; char sparePartNumber[MAX_PART_NUM_LENGTH]; - char *product_name; + char productName[MAX_PRODUCT_NAME_LENGTH]; char serialNumber[MAX_SERIAL_NUM_LENGTH]; int capacity; int actualOutput; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-08-17 19:26:14 UTC (rev 7498) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-08-17 19:43:57 UTC (rev 7499) @@ -2922,6 +2922,7 @@ response->modelNumber[0] = '\0'; response->sparePartNumber[0] = '\0'; response->serialNumber[0] = '\0'; + response->productName[0] = '\0'; request.bayNumber = i; rv = soap_getPowerSupplyInfo(oa_handler->active_con, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-08-17 19:26:14 UTC (rev 7498) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-08-17 19:43:57 UTC (rev 7499) @@ -3645,11 +3645,13 @@ strcpy(local_inventory->comment, power_inv_str); /* Get the Product name from the extradata */ + response->productName[0] = '\0'; extra_data = response->extraData; while (extra_data) { soap_getExtraData(extra_data, &extra_data_info); - if (!(strcmp(extra_data_info.name, "productName"))) { - response->product_name = extra_data_info.value; + if ((!(strcmp(extra_data_info.name, "productName"))) && + (extra_data_info.value != NULL)) { + strcpy(response->productName, extra_data_info.value); break; } extra_data = soap_next_node(extra_data); @@ -3659,7 +3661,7 @@ * information exist */ rv = add_product_area(&local_inventory->info.area_list, - response->product_name, + response->productName, NULL, &add_success_flag); if (rv != SA_OK) { Modified: openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c 2012-08-17 19:26:14 UTC (rev 7498) +++ openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c 2012-08-17 19:43:57 UTC (rev 7499) @@ -87,6 +87,7 @@ response->modelNumber[0] = '\0'; response->sparePartNumber[0] = '\0'; response->serialNumber[0] = '\0'; + response->productName[0] = '\0'; rv = soap_getPowerSupplyInfo(con, &info, response); if (rv != SOAP_OK) { Modified: openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-08-17 19:26:14 UTC (rev 7498) +++ openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-08-17 19:43:57 UTC (rev 7499) @@ -2077,6 +2077,7 @@ response->modelNumber[0] = '\0'; response->sparePartNumber[0] = '\0'; response->serialNumber[0] = '\0'; + response->productName[0] = '\0'; rv = soap_getPowerSupplyInfo(con, &request, response); if (rv != SOAP_OK) { @@ -2299,6 +2300,7 @@ response->modelNumber[0] = '\0'; response->sparePartNumber[0] = '\0'; response->serialNumber[0] = '\0'; + response->productName[0] = '\0'; rv = soap_getPowerSupplyInfo(con, &request, response); if (rv != SOAP_OK) { @@ -2326,7 +2328,7 @@ response->serialNumber, resource_id, RES_PRESENT); /* Build the RDRs */ - rv = build_power_supply_rdr(oh_handler, con, info, resource_id); + rv = build_power_supply_rdr(oh_handler, con, response, resource_id); if (rv != SA_OK) { err("build power supply RDR failed"); /* Free the inventory info from inventory RDR */ Modified: openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c 2012-08-17 19:26:14 UTC (rev 7498) +++ openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c 2012-08-17 19:43:57 UTC (rev 7499) @@ -1219,6 +1219,7 @@ power_supply_response->modelNumber[0] = '\0'; power_supply_response->sparePartNumber[0] = '\0'; power_supply_response->serialNumber[0] = '\0'; + power_supply_response->productName[0] = '\0'; rv = soap_getPowerSupplyInfo(oa_handler->active_con, &power_supply_request, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-08-27 19:55:56
|
Revision: 7508 http://openhpi.svn.sourceforge.net/openhpi/?rev=7508&view=rev Author: dr_mohan Date: 2012-08-27 19:55:50 +0000 (Mon, 27 Aug 2012) Log Message: ----------- Fix for #3562201 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2012-08-27 18:08:58 UTC (rev 7507) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2012-08-27 19:55:50 UTC (rev 7508) @@ -360,6 +360,7 @@ /* Copy optOutBayArray data for later use: */ /* data is either "true" or "false" */ strncpy(response->optOutBayArray[i], soap_value(bay_data), 6); + response->optOutBayArray[i][6] = '\0'; bay_data = soap_next_node(bay_data); i++; } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c 2012-08-27 18:08:58 UTC (rev 7507) +++ openhpi/trunk/plugins/oa_soap/oa_soap_callsupport.c 2012-08-27 19:55:50 UTC (rev 7508) @@ -511,6 +511,9 @@ strncpy(connection->server, server, OA_SOAP_SERVER_SIZE); strncpy(connection->username, username, OA_SOAP_USER_SIZE); strncpy(connection->password, password, OA_SOAP_USER_SIZE); + connection->server[OA_SOAP_SERVER_SIZE] = '\0'; + connection->username[OA_SOAP_USER_SIZE] = '\0'; + connection->password[OA_SOAP_USER_SIZE] = '\0'; connection->timeout = timeout; connection->session_id[0] = '\0'; connection->doc = NULL; @@ -847,6 +850,7 @@ if ((sess_id = soap_value(login_element))) { strncpy(connection->session_id, sess_id, OA_SOAP_SESSIONKEY_SIZE); + connection->session_id[OA_SOAP_SESSIONKEY_SIZE] = '\0'; dbg("Opened session ID %s", connection->session_id); /* Free the XML document */ xmlFreeDoc(doc); @@ -1075,6 +1079,7 @@ /* Substitute the current session key */ strncpy(session_pos, connection->session_id, OA_SOAP_SESSIONKEY_SIZE); + connection->session_id[OA_SOAP_SESSIONKEY_SIZE] = '\0'; /* Perform SOAP call */ err = soap_message(connection, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2012-08-31 14:32:44
|
Revision: 7511 http://openhpi.svn.sourceforge.net/openhpi/?rev=7511&view=rev Author: hemanthreddy Date: 2012-08-31 14:32:35 +0000 (Fri, 31 Aug 2012) Log Message: ----------- Fix for issue ID:3562666 - 3.2.0 segfaults when retrieving thermal info Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_resources.c openhpi/trunk/plugins/oa_soap/oa_soap_resources.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_resources.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_resources.c 2012-08-31 14:17:43 UTC (rev 7510) +++ openhpi/trunk/plugins/oa_soap/oa_soap_resources.c 2012-08-31 14:32:35 UTC (rev 7511) @@ -10182,10 +10182,13 @@ "BL460C G8", "BL460C G7", "BL460C", + "BL465C G7", "BL465C", + "BL480C G1", "BL480C", "BL495C", "BL680C", + "BL685C G6", "BL685C", "BL860C", "BL870C", @@ -10288,6 +10291,18 @@ {OA_SOAP_SEN_BLADE_MEM_ZONE1, MEMORY_ZONE, 1}, {OA_SOAP_SEN_TEMP_STATUS, AMBIENT_ZONE, 1} }, + /* BL465c G7 blade type */ + { + {OA_SOAP_SEN_BLADE_SYSTEM_ZONE1, SYSTEM_ZONE, 0}, + {OA_SOAP_SEN_BLADE_CPU_ZONE1, CPU_ZONE, 1}, + {OA_SOAP_SEN_BLADE_CPU1_1, CPU_1, 1}, + {OA_SOAP_SEN_BLADE_CPU2_1, CPU_2, 1}, + {OA_SOAP_SEN_BLADE_CPU3_1, CPU_3, 0}, + {OA_SOAP_SEN_BLADE_CPU4_1, CPU_4, 0}, + {OA_SOAP_SEN_BLADE_DISK_ZONE1, DISK_ZONE, 0}, + {OA_SOAP_SEN_BLADE_MEM_ZONE1, MEMORY_ZONE, 2}, + {OA_SOAP_SEN_TEMP_STATUS, AMBIENT_ZONE, 1} + }, /* BL465c blade type */ { {OA_SOAP_SEN_BLADE_SYSTEM_ZONE1, SYSTEM_ZONE, 1}, @@ -10300,6 +10315,18 @@ {OA_SOAP_SEN_BLADE_MEM_ZONE1, MEMORY_ZONE, 2}, {OA_SOAP_SEN_TEMP_STATUS, AMBIENT_ZONE, 1} }, + /* BL480c G1 blade type */ + { + {OA_SOAP_SEN_BLADE_SYSTEM_ZONE1, SYSTEM_ZONE, 0}, + {OA_SOAP_SEN_BLADE_CPU_ZONE1, CPU_ZONE, 1}, + {OA_SOAP_SEN_BLADE_CPU1_1, CPU_1, 2}, + {OA_SOAP_SEN_BLADE_CPU2_1, CPU_2, 2}, + {OA_SOAP_SEN_BLADE_CPU3_1, CPU_3, 0}, + {OA_SOAP_SEN_BLADE_CPU4_1, CPU_4, 0}, + {OA_SOAP_SEN_BLADE_DISK_ZONE1, DISK_ZONE, 0}, + {OA_SOAP_SEN_BLADE_MEM_ZONE1, MEMORY_ZONE, 1}, + {OA_SOAP_SEN_TEMP_STATUS, AMBIENT_ZONE, 1} + }, /* BL480c blade type */ { {OA_SOAP_SEN_BLADE_SYSTEM_ZONE1, SYSTEM_ZONE, 4}, @@ -10336,6 +10363,18 @@ {OA_SOAP_SEN_BLADE_MEM_ZONE1, MEMORY_ZONE, 1}, {OA_SOAP_SEN_TEMP_STATUS, AMBIENT_ZONE, 1} }, + /* BL685 G6 blade type */ + { + {OA_SOAP_SEN_BLADE_SYSTEM_ZONE1, SYSTEM_ZONE, 3}, + {OA_SOAP_SEN_BLADE_CPU_ZONE1, CPU_ZONE, 0}, + {OA_SOAP_SEN_BLADE_CPU1_1, CPU_1, 1}, + {OA_SOAP_SEN_BLADE_CPU2_1, CPU_2, 1}, + {OA_SOAP_SEN_BLADE_CPU3_1, CPU_3, 1}, + {OA_SOAP_SEN_BLADE_CPU4_1, CPU_4, 1}, + {OA_SOAP_SEN_BLADE_DISK_ZONE1, DISK_ZONE, 0}, + {OA_SOAP_SEN_BLADE_MEM_ZONE1, MEMORY_ZONE, 1}, + {OA_SOAP_SEN_TEMP_STATUS, AMBIENT_ZONE, 1} + }, /* BL685 blade type */ { {OA_SOAP_SEN_BLADE_SYSTEM_ZONE1, SYSTEM_ZONE, 2}, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_resources.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_resources.h 2012-08-31 14:17:43 UTC (rev 7510) +++ openhpi/trunk/plugins/oa_soap/oa_soap_resources.h 2012-08-31 14:32:35 UTC (rev 7511) @@ -81,9 +81,11 @@ const char *comment; }; -#define OA_SOAP_MAX_BLD_TYPE 19 +#define OA_SOAP_MAX_BLD_TYPE 22 -/* Enum for possible cclass blade types */ +/* Enum for possible cclass blade types + * Put more specific ones always first + * */ enum oa_soap_blade_type { BL260C, BL2x220C, @@ -91,10 +93,13 @@ BL460CG8, BL460CG7, BL460C, + BL465CG7, BL465C, + BL480CG1, BL480C, BL495C, BL680C, + BL685CG6, BL685C, BL860C, BL870C, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-09-18 16:29:39
|
Revision: 7514 http://openhpi.svn.sourceforge.net/openhpi/?rev=7514&view=rev Author: dr_mohan Date: 2012-09-18 16:29:29 +0000 (Tue, 18 Sep 2012) Log Message: ----------- Fix for #3564814 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-09-10 15:28:52 UTC (rev 7513) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-09-18 16:29:29 UTC (rev 7514) @@ -1610,8 +1610,9 @@ SAHPI_CAPABILITY_MANAGED_HOTSWAP); break; default: - err("Invalid blade type: " - "expecting server/storage/IO blade"); + err("Invalid blade type %d in slot %d.", + response->bladeType, response->bayNumber); + err("Expecting server(2)/storage(3)/IO blade(5)."); return SA_ERR_HPI_INTERNAL_ERROR; } @@ -1931,7 +1932,7 @@ rv = build_discovered_server_rpt(oh_handler, oa_handler->active_con, &response, &resource_id); if (rv != SA_OK) { - err("Failed to get Server rpt"); + err("Failed to get Server rpt for bay %d.",i); return SA_ERR_HPI_INTERNAL_ERROR; } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-09-10 15:28:52 UTC (rev 7513) +++ openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-09-18 16:29:29 UTC (rev 7514) @@ -1086,7 +1086,7 @@ rv = build_discovered_server_rpt(oh_handler, con, &response, &resource_id); if (rv != SA_OK) { - err("build inserted server rpt failed"); + err("build added server rpt failed for slot %d",bay_number); return rv; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dr_...@us...> - 2012-10-18 00:44:04
|
Revision: 7518 http://openhpi.svn.sourceforge.net/openhpi/?rev=7518&view=rev Author: dr_mohan Date: 2012-10-18 00:43:57 +0000 (Thu, 18 Oct 2012) Log Message: ----------- Fix for #3572505 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.h openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-10-01 14:52:41 UTC (rev 7517) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2012-10-18 00:43:57 UTC (rev 7518) @@ -2941,12 +2941,13 @@ /* If the power supply unit does not have the power cord * plugged in, then power supply unit will be in faulty - * condition. In this case, all the information in the - * response structure is NULL. Consider the faulty power supply - * unit as ABSENT + * condition. If the power supply is reported as PRESENT by OA + * then add the power supply to the RPT */ - if (response->serialNumber[0] == '\0') - continue; + if (response->serialNumber[0] == '\0') { + strcpy((char *)response->serialNumber, "Not_Reported"); + WARN("No Serial Number reported for PSU in slot %d",i); + } /* Build the rpt entry for power supply unit */ rv = build_power_supply_rpt(oh_handler, power_supply, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-10-01 14:52:41 UTC (rev 7517) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2012-10-18 00:43:57 UTC (rev 7518) @@ -740,7 +740,9 @@ dbg("EVENT_AC_FAILURE -- Not processed"); break; case EVENT_PS_INFO: - dbg("EVENT_PS_INFO -- Not processed"); + dbg("EVENT_PS_INFO"); + oa_soap_proc_ps_info(oh_handler, + oa->event_con2, &event); break; case EVENT_PS_SUBSYSTEM_STATUS: dbg("EVENT_PS_SUBSYSTEM_STATUS"); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c 2012-10-01 14:52:41 UTC (rev 7517) +++ openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.c 2012-10-18 00:43:57 UTC (rev 7518) @@ -42,6 +42,8 @@ * oa_soap_proc_ps_subsys_info() - Processes the power subsystem info event * * oa_soap_proc_ps_status() - Processes the power supply status event + * + * oa_soap_proc_ps_info() - Processes the power supply info event */ #include "oa_soap_ps_event.h" @@ -98,15 +100,15 @@ } /* If the power supply unit does not have the power cord plugged in, - * then power supply unit will be in faulty condition. In this case, - * all the information in the response structure is NULL. Consider the - * faulty power supply unit as ABSENT + * then power supply unit will be in faulty condition. If the power + * supply is reported as PRESENT by the OA, add the power supply in + * a ResourceFailed state. */ + + if (response->serialNumber[0] == '\0') { - err("Inserted power supply unit may be faulty"); - g_free(response); - response = NULL; - return SA_ERR_HPI_INTERNAL_ERROR; + err("No Serial Number for PSU at slot %d. Please check", + info.bayNumber); } rv = add_ps_unit(oh_handler, con, response); @@ -610,3 +612,103 @@ return; } + +/** + * oa_soap_proc_ps_info + * @oh_handler : Pointer to openhpi handler structure + * @con : Pointer to the SOAP_CON structure + * @oa_event : Pointer to OA event structure + * + * Purpose: + * Processes the power supply info event + * + * Detailed Description: NA + * + * Return values: + * SA_OK - success. + * SA_ERR_HPI_INVALID_PARAMS - Invalid parameters + * SA_ERR_HPI_OUT_OF_MEMORY - Out of memory + **/ +SaErrorT oa_soap_proc_ps_info(struct oh_handler_state *oh_handler, + SOAP_CON *con, + struct eventInfo *oa_event) + +{ + SaErrorT rv = SA_OK; + struct oa_soap_handler *oa_handler = NULL; + SaHpiInt32T bay_number, len; + char *serial_number = NULL; + xmlNode *extra_data; + struct extraDataInfo extra_data_info; + char name[MAX_PRODUCT_NAME_LENGTH+1]; + SaHpiResourceIdT resource_id; + + if (oh_handler == NULL || oa_event == NULL) { + err("Invalid parameters"); + return SA_ERR_HPI_INVALID_PARAMS; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + bay_number = oa_event->eventData.powerSupplyInfo.bayNumber; + + if(!oa_event->eventData.powerSupplyInfo.serialNumber){ + err("Serial # of PSU at %d is NULL", bay_number); + return SA_ERR_HPI_INVALID_PARAMS; + } + + if( oa_event->eventData.powerSupplyInfo.presence != PRESENT ) { + err("Serial # of PSU at %d is NOT PRESENT", bay_number); + return SA_ERR_HPI_INVALID_PARAMS; + } + + + len = strlen(oa_event->eventData.powerSupplyInfo.serialNumber); + serial_number = (char *)g_malloc0(sizeof(char) * len + 1); + strcpy(serial_number, oa_event->eventData.powerSupplyInfo.serialNumber); + serial_number[len]='\0'; + if (strcmp(serial_number,"[Unknown]") == 0 ) { + err("Serial # of PSU at %d is [Unknown]", bay_number); + g_free(serial_number); + return SA_ERR_HPI_OUT_OF_MEMORY; + } + + name[0] = '\0'; + extra_data = oa_event->eventData.powerSupplyInfo.extraData; + while (extra_data) { + soap_getExtraData(extra_data, &extra_data_info); + if (!(strcmp(extra_data_info.name, "productName"))) { + strncpy(name,extra_data_info.value,MAX_PRODUCT_NAME_LENGTH); + name[MAX_PRODUCT_NAME_LENGTH] = '\0'; + } + extra_data = soap_next_node(extra_data); + } + + resource_id = oa_handler-> + oa_soap_resources.ps_unit.resource_id[bay_number - 1]; + /* Build the inserted ps_unit RPT entry */ + rv = build_power_supply_rpt(oh_handler, name, + bay_number, &resource_id); + if (rv != SA_OK) { + err("Failed to build the ps_unit RPT for PSU at %d", bay_number); + g_free(serial_number); + return rv; + } + + /* Update resource_status structure with resource_id, + * serial_number, and presence status + */ + oa_soap_update_resource_status( + &oa_handler->oa_soap_resources.ps_unit, bay_number, + serial_number, resource_id, RES_PRESENT); + + /* The RDR already exist, but the relevant data is available only now + * So just go ahead and correct it. When building the RDR the code does + * take care of already existing RDR. + */ + rv = build_power_supply_rdr(oh_handler, con, + &(oa_event->eventData.powerSupplyInfo), resource_id); + + g_free(serial_number); + return SA_OK; + +} Modified: openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.h 2012-10-01 14:52:41 UTC (rev 7517) +++ openhpi/trunk/plugins/oa_soap/oa_soap_ps_event.h 2012-10-18 00:43:57 UTC (rev 7518) @@ -51,6 +51,10 @@ void oa_soap_proc_ps_status(struct oh_handler_state *oh_handler, struct powerSupplyStatus *status); +SaErrorT oa_soap_proc_ps_info(struct oh_handler_state *oh_handler, + SOAP_CON *con, + struct eventInfo *oa_event); + void oa_soap_push_power_events(struct oh_handler_state *oh_handler, struct powerSubsystemInfo *info, SaHpiResourceIdT resource_id); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-10-01 14:52:41 UTC (rev 7517) +++ openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2012-10-18 00:43:57 UTC (rev 7518) @@ -2089,12 +2089,10 @@ /* If the power supply unit does not have the power cord * plugged in, then power supply unit will be in faulty - * condition. In this case, all the information in the - * response structure is NULL. Consider the faulty power supply - * unit as ABSENT + * condition. If the power supply reports itself as PRESENT + * then add it to the RPT */ - if (response->presence != PRESENT || - (response->serialNumber == NULL || response->serialNumber[0] == '\0')) { + if (response->presence != PRESENT ) { /* The power supply unit is absent. Is the power * supply unit absent in the presence matrix? */ @@ -2105,6 +2103,10 @@ else state = RES_ABSENT; } else { + if ((response->serialNumber == NULL || response->serialNumber[0] == '\0')) { + strcpy(response->serialNumber,"Not_Reported"); + err("PSU in slot %d has some problem, please check",i); + } /* The power supply unit is present. Is the power * supply unit present in the presence matrix? */ Modified: openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c 2012-10-01 14:52:41 UTC (rev 7517) +++ openhpi/trunk/plugins/oa_soap/oa_soap_sensor.c 2012-10-18 00:43:57 UTC (rev 7518) @@ -192,13 +192,15 @@ sensor_info = (struct oa_soap_sensor_info*) oh_get_rdr_data(handler->rptcache, resource_id, rdr->RecordId); if (sensor_info == NULL) { - err("No sensor data. Sensor=%s", rdr->IdString.Data); + err("No data for Sensor %s in Resource %d", + rdr->IdString.Data, resource_id); return SA_ERR_HPI_INTERNAL_ERROR; } /* Check whether sensor is enabled */ if (sensor_info->sensor_enable == SAHPI_FALSE) { - err("Sensor not enabled"); + err("Sensor %s not enabled for resource %d", + rdr->IdString.Data, resource_id); return(SA_ERR_HPI_INVALID_REQUEST); } @@ -207,7 +209,8 @@ SAHPI_FALSE) { data->IsSupported = SAHPI_FALSE; *state = sensor_info->current_state; - dbg("sensor reading is not supported"); + dbg("Reading Sensor %s in resource %d is not supported", + rdr->IdString.Data, resource_id); return SA_OK; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2012-12-04 07:15:39
|
Revision: 7523 http://openhpi.svn.sourceforge.net/openhpi/?rev=7523&view=rev Author: hemanthreddy Date: 2012-12-04 07:15:32 +0000 (Tue, 04 Dec 2012) Log Message: ----------- Fix for issue ID:3578345-Wrong OA FW Version is displayed by openhpi clients Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c openhpi/trunk/plugins/oa_soap/oa_soap_utils.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-11-26 16:06:44 UTC (rev 7522) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2012-12-04 07:15:32 UTC (rev 7523) @@ -1953,7 +1953,8 @@ /* Store Firmware MajorRev & MinorRev data in rpt */ fm_version = atof(blade_mp_response.fwVersion); - rpt->ResourceInfo.FirmwareMajorRev = major = floor(fm_version); + rpt->ResourceInfo.FirmwareMajorRev = major = + (SaHpiUint8T)floor(fm_version); rpt->ResourceInfo.FirmwareMinorRev = rintf((fm_version - major) * 100); } /** MP Info **/ Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2012-11-26 16:06:44 UTC (rev 7522) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2012-12-04 07:15:32 UTC (rev 7523) @@ -1410,7 +1410,7 @@ } fm_version = atof(fwVersion); - major = floor(fm_version); + major = (SaHpiUint8T)floor(fm_version); minor = rintf((fm_version - major) * 100); if(rpt->ResourceInfo.FirmwareMajorRev == major && Modified: openhpi/trunk/plugins/oa_soap/oa_soap_utils.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2012-11-26 16:06:44 UTC (rev 7522) +++ openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2012-12-04 07:15:32 UTC (rev 7523) @@ -1441,7 +1441,8 @@ * 'yy' is the minor version */ fm_version = atof(response->fwVersion); - rpt->ResourceInfo.FirmwareMajorRev = major = rintf(fm_version); + rpt->ResourceInfo.FirmwareMajorRev = major = + (SaHpiUint8T)floor(fm_version); rpt->ResourceInfo.FirmwareMinorRev = rintf((fm_version - major) * 100); return SA_OK; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2013-01-29 23:43:22
|
Revision: 7524 http://openhpi.svn.sourceforge.net/openhpi/?rev=7524&view=rev Author: hemanthreddy Date: 2013-01-29 23:43:15 +0000 (Tue, 29 Jan 2013) Log Message: ----------- Fix for bug ID:3566304 Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c openhpi/trunk/plugins/oa_soap/oa_soap_utils.c openhpi/trunk/plugins/oa_soap/oa_soap_utils.h Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2012-12-04 07:15:32 UTC (rev 7523) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2013-01-29 23:43:15 UTC (rev 7524) @@ -43,6 +43,9 @@ * with current status of the system * * process_oa_info_event() - Processes the OA info event + * If OA info event has the updated + * OA firmware version, same will be + * updated to RPT and IDR entry. * If OA info event is just after OA * insertion event, then it processed. * Else, it is ignored @@ -401,6 +404,9 @@ * the stabilization of OA. * - When OA insertion event received, OA will not be stabilized * On recieving this event, ACTIVE hot swap event will be generated + * - If the OA_INFO event has the updated OA firmware + * version information then the new firmware version + * will be updated to RPT and IDR entry. * * Return values: * SA_OK - on success. @@ -414,6 +420,9 @@ SaErrorT rv = SA_OK; SaHpiInt32T bay_number; struct oa_soap_handler *oa_handler = NULL; + int i = 0; + struct oaInfo response; + SaHpiResourceIdT resource_id; if (oh_handler == NULL || con == NULL || oa_event == NULL) { err("Invalid parameters"); @@ -422,10 +431,22 @@ oa_handler = (struct oa_soap_handler *) oh_handler->data; bay_number = oa_event->eventData.oaInfo.bayNumber; + response = oa_event->eventData.oaInfo; if (oa_handler->oa_soap_resources.oa.presence[bay_number - 1] == RES_PRESENT) { - dbg("OA is present. Ignore event"); + if(oa_event->eventData.oaInfo.fwVersion != NULL) { + for (i = 0; + i < oa_handler->oa_soap_resources.oa.max_bays; i++) { + resource_id = oa_handler->oa_soap_resources.oa. + resource_id[i]; + rv = update_oa_fw_version(oh_handler, + &response, resource_id); + if (rv != SA_OK) { + err("OA Firmware Version not updated"); + } + } + } return SA_OK; } Modified: openhpi/trunk/plugins/oa_soap/oa_soap_utils.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2012-12-04 07:15:32 UTC (rev 7523) +++ openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2013-01-29 23:43:15 UTC (rev 7524) @@ -102,6 +102,9 @@ * * convert_lower_to_upper - Converts the lower case to upper case * + * update_oa_fw_version() - Updates the RPT entry and IDR entry + * with OA firmware version + * **/ #include "oa_soap_utils.h" @@ -1542,3 +1545,119 @@ return(s); } +/** + * update_oa_fw_version + * @oh_handler: Pointer to the plugin handler + * @response: Pointer to the oaInfo structure + * @resource_id: Resource Id + * + * Purpose: + * Updates the RPT entry and IDR entry with OA firmware version + * + * Detailed Descrption: NA + * + * Return values: + * SA_HPI_ERR_INAVLID_PARAMS - on invalid parameters + * SA_HPI_ERR_INTERNAL_ERROR - on failure + * SA_OK - on success + **/ + +SaErrorT update_oa_fw_version(struct oh_handler_state *oh_handler, + struct oaInfo *response, + SaHpiResourceIdT resource_id) +{ + SaErrorT rv = SA_OK; + SaHpiFloat64T fm_version; + SaHpiRptEntryT *rpt = NULL; + SaHpiRdrT *rdr = NULL; + SaHpiIdrIdT IdrId = 0; + SaHpiIdrFieldT field; + struct oh_event event; + SaHpiInt32T major; + SaHpiInt32T minor; + + if (oh_handler == NULL || response == NULL) { + printf("Invalid parameter"); + return SA_ERR_HPI_INVALID_PARAMS; + } + + rpt = oh_get_resource_by_id(oh_handler->rptcache, resource_id); + if (rpt == NULL) { + err("OA rpt is not present"); + return SA_ERR_HPI_INTERNAL_ERROR; + } + + if (strlen(response->fwVersion) == 0) { + err("Firmware version is null string"); + return SA_ERR_HPI_INTERNAL_ERROR; + } + + fm_version = atof(response->fwVersion); + major = (SaHpiUint8T)floor(fm_version); + minor = rintf((fm_version - major) * 100); + + if(rpt->ResourceInfo.FirmwareMajorRev == major && + rpt->ResourceInfo.FirmwareMinorRev == minor){ + return rv; + } + + if(( major == rpt->ResourceInfo.FirmwareMajorRev && + minor < rpt->ResourceInfo.FirmwareMinorRev ) || + major < rpt->ResourceInfo.FirmwareMajorRev ) { + WARN("OA Firmware Version downgraded"); + } + + rpt->ResourceInfo.FirmwareMajorRev = major; + rpt->ResourceInfo.FirmwareMinorRev = minor; + + /* Get the inventory RDR */ + rdr = oh_get_rdr_by_type(oh_handler->rptcache, resource_id, + SAHPI_INVENTORY_RDR, + SAHPI_DEFAULT_INVENTORY_ID); + if (rdr == NULL) { + err("Inventory RDR is not found"); + return SA_ERR_HPI_INTERNAL_ERROR; + } + + IdrId = rdr->RdrTypeUnion.InventoryRec.IdrId; + + memset(&field, 0, sizeof(SaHpiIdrFieldT)); + field.Type = SAHPI_IDR_FIELDTYPE_PRODUCT_VERSION; + field.Field.DataType = SAHPI_TL_TYPE_TEXT; + field.Field.Language = SAHPI_LANG_ENGLISH; + oa_soap_trim_whitespace(response->fwVersion); + field.Field.DataLength = strlen(response->fwVersion); + field.AreaId = 1; + field.FieldId = 3; + snprintf((char *)field.Field.Data, + strlen(response->fwVersion)+ 1, + "%s",response->fwVersion); + + rv = oa_soap_set_idr_field(oh_handler, resource_id, IdrId, + &field); + if (rv != SOAP_OK) { + err("oa_soap_set_idr_field failed"); + return rv; + } + + /* Event Handling */ + memset(&event, 0, sizeof(struct oh_event)); + event.event.EventType = SAHPI_ET_RESOURCE; + memcpy(&event.resource, + rpt, + sizeof(SaHpiRptEntryT)); + event.event.Severity = SAHPI_INFORMATIONAL; + event.event.Source = event.resource.ResourceId; + if (oh_gettimeofday(&(event.event.Timestamp)) != SA_OK) { + event.event.Timestamp = SAHPI_TIME_UNSPECIFIED; + } + event.event.EventDataUnion.ResourceEvent. + ResourceEventType = SAHPI_RESE_RESOURCE_UPDATED; + event.rdrs = g_slist_append(event.rdrs, g_memdup(rdr, + sizeof(SaHpiRdrT))); + event.hid = oh_handler->hid; + oh_evt_queue_push(oh_handler->eventq, + copy_oa_soap_event(&event)); + + return SA_OK; +} Modified: openhpi/trunk/plugins/oa_soap/oa_soap_utils.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_utils.h 2012-12-04 07:15:32 UTC (rev 7523) +++ openhpi/trunk/plugins/oa_soap/oa_soap_utils.h 2013-01-29 23:43:15 UTC (rev 7524) @@ -114,4 +114,8 @@ resource_presence_status_t presence); char * oa_soap_trim_whitespace(char *s); + +SaErrorT update_oa_fw_version(struct oh_handler_state *oh_handler, + struct oaInfo *response, + SaHpiResourceIdT resource_id); #endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2013-04-12 17:11:37
|
Revision: 7528 http://openhpi.svn.sourceforge.net/openhpi/?rev=7528&view=rev Author: hemanthreddy Date: 2013-04-12 17:11:29 +0000 (Fri, 12 Apr 2013) Log Message: ----------- Fix for issue ID:3607674-Insert Procurve 6120 switch sets and doesn't clear alarms Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c openhpi/trunk/plugins/oa_soap/oa_soap_discover.h openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2013-03-06 07:56:23 UTC (rev 7527) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.c 2013-04-12 17:11:29 UTC (rev 7528) @@ -2138,6 +2138,7 @@ * @con: Pointer to the soap client handler. * @info_response: Interconnect info response structure * @resource_id: Resource id + * @build_sensors: Flag to build sensor RDR's for Interconnect tray status * * Purpose: * Populate the interconnect blade RDR. @@ -2153,6 +2154,11 @@ * device missing, duplicate management IP address, health operational * status and health predictive failure sensor RDR * - Creates UID and power control RDR + * - This funtion callers + * discover_interconnect + * process_interconnect_insertion_event + * process_interconnect_info_event + * add_interconnect * * Return values: * SA_OK - on success. @@ -2162,7 +2168,8 @@ SaErrorT build_interconnect_rdr(struct oh_handler_state *oh_handler, SOAP_CON* con, SaHpiInt32T bay_number, - SaHpiResourceIdT resource_id) + SaHpiResourceIdT resource_id, + int build_sensors) { SaErrorT rv = SA_OK; struct oa_soap_inventory *inventory = NULL; @@ -2224,100 +2231,102 @@ /* Build UID control rdr for server */ OA_SOAP_BUILD_CONTROL_RDR(OA_SOAP_UID_CNTRL, 0, 0) - status_request.bayNumber = bay_number; - rv = soap_getInterconnectTrayStatus(con, &status_request, - &status_response); - if (rv != SOAP_OK) { - err("Get Interconnect tray status SOAP call failed"); - return SA_ERR_HPI_INTERNAL_ERROR; - } + if(build_sensors == TRUE){ + status_request.bayNumber = bay_number; + rv = soap_getInterconnectTrayStatus(con, &status_request, + &status_response); + if (rv != SOAP_OK) { + err("Get Interconnect tray status SOAP call failed"); + return SA_ERR_HPI_INTERNAL_ERROR; + } - /* Build operational status sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_OPER_STATUS, - status_response.operationalStatus) + /* Build operational status sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_OPER_STATUS, + status_response.operationalStatus) - /* Build predictive failure sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_PRED_FAIL, - status_response.operationalStatus) + /* Build predictive failure sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_PRED_FAIL, + status_response.operationalStatus) - /* Build interconnect CPU fault sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_CPU_FAULT, - status_response.cpuFault) + /* Build interconnect CPU fault sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_CPU_FAULT, + status_response.cpuFault) - /* Build interconnect health LED sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_HEALTH_LED, - status_response.healthLed) + /* Build interconnect health LED sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_HEALTH_LED, + status_response.healthLed) - /* Build internal data error sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_INT_DATA_ERR, - status_response.diagnosticChecks. - internalDataError) + /* Build internal data error sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_INT_DATA_ERR, + status_response.diagnosticChecks. + internalDataError) - /* Build management processor error sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_MP_ERR, - status_response.diagnosticChecks. - managementProcessorError) + /* Build management processor error sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_MP_ERR, + status_response.diagnosticChecks. + managementProcessorError) - /* Build thermal waring sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_THERM_WARN, - status_response.diagnosticChecks. - thermalWarning) + /* Build thermal waring sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_THERM_WARN, + status_response.diagnosticChecks. + thermalWarning) - /* Build thermal danger sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_THERM_DANGER, - status_response.diagnosticChecks. - thermalDanger) + /* Build thermal danger sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_THERM_DANGER, + status_response.diagnosticChecks. + thermalDanger) - /* Build IO configuration error sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_IO_CONFIG_ERR, - status_response.diagnosticChecks. - ioConfigurationError) + /* Build IO configuration error sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_IO_CONFIG_ERR, + status_response.diagnosticChecks. + ioConfigurationError) - /* Build device power request error sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_PWR_REQ, - status_response.diagnosticChecks. - devicePowerRequestError) + /* Build device power request error sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_PWR_REQ, + status_response.diagnosticChecks. + devicePowerRequestError) - /* Build device failure error sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_FAIL, - status_response.diagnosticChecks. - deviceFailure) + /* Build device failure error sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_FAIL, + status_response.diagnosticChecks. + deviceFailure) - /* Build device degraded error sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_DEGRAD, - status_response.diagnosticChecks. - deviceDegraded) + /* Build device degraded error sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_DEGRAD, + status_response.diagnosticChecks. + deviceDegraded) - /* Parse the diganosticChecksEx structure */ - oa_soap_parse_diag_ex(status_response.diagnosticChecksEx, - diag_ex_status); + /* Parse the diganosticChecksEx structure */ + oa_soap_parse_diag_ex(status_response.diagnosticChecksEx, + diag_ex_status); - /* Build device not supported sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_NOT_SUPPORT, - diag_ex_status[DIAG_EX_DEV_NOT_SUPPORT]) + /* Build device not supported sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_NOT_SUPPORT, + diag_ex_status[DIAG_EX_DEV_NOT_SUPPORT]) - /* Build Device informational sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_INFO, - diag_ex_status[DIAG_EX_DEV_INFO]) + /* Build Device informational sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DEV_INFO, + diag_ex_status[DIAG_EX_DEV_INFO]) - /* Build Storage device missing sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_STORAGE_DEV_MISS, - diag_ex_status[DIAG_EX_STORAGE_DEV_MISS]) + /* Build Storage device missing sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_STORAGE_DEV_MISS, + diag_ex_status[DIAG_EX_STORAGE_DEV_MISS]) - /* Build Duplicate management IP address sensor rdr */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DUP_MGMT_IP_ADDR, - diag_ex_status[DIAG_EX_DUP_MGMT_IP_ADDR]) + /* Build Duplicate management IP address sensor rdr */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_DUP_MGMT_IP_ADDR, + diag_ex_status[DIAG_EX_DUP_MGMT_IP_ADDR]) - /* Get the healthStatus enum from extraData structure */ - oa_soap_get_health_val(status_response.extraData, &status); + /* Get the healthStatus enum from extraData structure */ + oa_soap_get_health_val(status_response.extraData, &status); - /* Build health status operational sensor */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_HEALTH_OPER, - status) + /* Build health status operational sensor */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_HEALTH_OPER, + status) - /* Build health status predictive failure sensor */ - OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_HEALTH_PRED_FAIL, - status) + /* Build health status predictive failure sensor */ + OA_SOAP_BUILD_ENABLE_SENSOR_RDR(OA_SOAP_SEN_HEALTH_PRED_FAIL, + status) + } return SA_OK; } @@ -2397,7 +2406,7 @@ info_response.serialNumber, resource_id, RES_PRESENT); /* Build rdr entry for interconnect */ rv = build_interconnect_rdr(oh_handler, oa_handler->active_con, - i, resource_id); + i, resource_id, TRUE); if (rv != SA_OK) { err("Failed to get interconnect RDR"); /* Reset resource_status structure to default values */ Modified: openhpi/trunk/plugins/oa_soap/oa_soap_discover.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_discover.h 2013-03-06 07:56:23 UTC (rev 7527) +++ openhpi/trunk/plugins/oa_soap/oa_soap_discover.h 2013-04-12 17:11:29 UTC (rev 7528) @@ -208,7 +208,8 @@ SaErrorT build_interconnect_rdr(struct oh_handler_state *oh_handler, SOAP_CON *con, SaHpiInt32T bay_number, - SaHpiResourceIdT resource_id); + SaHpiResourceIdT resource_id, + int build_sensors); SaErrorT discover_interconnect(struct oh_handler_state *oh_handler); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c 2013-03-06 07:56:23 UTC (rev 7527) +++ openhpi/trunk/plugins/oa_soap/oa_soap_interconnect_event.c 2013-04-12 17:11:29 UTC (rev 7528) @@ -413,7 +413,7 @@ /* Build the inserted interconnect RDRs */ rv = build_interconnect_rdr(oh_handler, con, - bay_number, resource_id); + bay_number, resource_id, TRUE); if (rv != SA_OK) { err("Failed to build the interconnect RDR"); rv = oh_remove_resource(oh_handler->rptcache, @@ -563,7 +563,7 @@ * take care of already existing RDR. */ rv = build_interconnect_rdr(oh_handler, con, - bay_number, resource_id); + bay_number, resource_id, FALSE); g_free(serial_number); return SA_OK; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2013-03-06 07:56:23 UTC (rev 7527) +++ openhpi/trunk/plugins/oa_soap/oa_soap_re_discover.c 2013-04-12 17:11:29 UTC (rev 7528) @@ -1665,7 +1665,7 @@ /* Build the RDRs */ rv = build_interconnect_rdr(oh_handler, con, - bay_number, resource_id); + bay_number, resource_id, TRUE); if (rv != SA_OK) { err("Failed to get interconnect inventory RDR"); /* Free the inventory info from inventory RDR */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2013-05-21 23:22:53
|
Revision: 7537 http://openhpi.svn.sourceforge.net/openhpi/?rev=7537&view=rev Author: hemanthreddy Date: 2013-05-21 23:22:19 +0000 (Tue, 21 May 2013) Log Message: ----------- Fix for issue ID:3610943 - openhpi OA switchover issues Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap.h openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c openhpi/trunk/plugins/oa_soap/oa_soap_utils.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap.h 2013-05-21 22:42:02 UTC (rev 7536) +++ openhpi/trunk/plugins/oa_soap/oa_soap.h 2013-05-21 23:22:19 UTC (rev 7537) @@ -192,6 +192,7 @@ /* Structure for storing the OA SOAP plugin information */ struct oa_soap_handler { + enum hpoa_boolean ipswap; enum oa_soap_plugin_status status; struct oa_soap_resource_status oa_soap_resources; SOAP_CON *active_con; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2013-05-21 22:42:02 UTC (rev 7536) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2013-05-21 23:22:19 UTC (rev 7537) @@ -250,6 +250,12 @@ * 2.21. Re-try the getAllEvents SOAP XML call skipping * the error handling. */ + + /* If Enclosure IP Mode is enabled, + * then make the Standby thread to sleep */ + while (oa_handler->ipswap && (oa->oa_status == STANDBY)) { + sleep(20); + } if (oa->oa_status == STANDBY && get_oa_fw_version(handler) >= OA_2_21 && retry_on_switchover < MAX_RETRY_ON_SWITCHOVER) { @@ -260,7 +266,7 @@ retry_on_switchover++; } else { /* Try to recover from the error */ - err("OA %s may not be accessible", oa->server); + dbg("OA %s may not be accessible", oa->server); oa_soap_error_handling(handler, oa); request.pid = oa->event_pid; Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2013-05-21 22:42:02 UTC (rev 7536) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2013-05-21 23:22:19 UTC (rev 7537) @@ -562,6 +562,8 @@ SaHpiInt32T bay_number; struct oa_soap_handler *oa_handler = NULL; SaHpiResourceIdT resource_id; + struct extraDataInfo extra_data_info; + xmlNode *extra_data = NULL; if (oh_handler == NULL || nw_info == NULL) { err("Invalid parameters"); @@ -572,6 +574,23 @@ bay_number = nw_info->bayNumber; resource_id = oa_handler->oa_soap_resources.oa.resource_id[bay_number - 1]; + extra_data = nw_info->extraData; + while (extra_data) { + soap_getExtraData(extra_data, &extra_data_info); + if ((!(strcmp(extra_data_info.name, "IpSwap"))) && + (extra_data_info.value != NULL)) { + if(!(strcasecmp(extra_data_info.value, + "true"))){ + oa_handler->ipswap = HPOA_TRUE; + dbg("Enclosure IP Mode is Enabled"); + } else { + oa_handler->ipswap = HPOA_FALSE; + dbg("Enclosure IP Mode is Disabled"); + } + break; + } + extra_data = soap_next_node(extra_data); + } /* Process the OA link status sensor */ OA_SOAP_PROCESS_SENSOR_EVENT(OA_SOAP_SEN_OA_LINK_STATUS, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_utils.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2013-05-21 22:42:02 UTC (rev 7536) +++ openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2013-05-21 23:22:19 UTC (rev 7537) @@ -223,6 +223,8 @@ SOAP_CON *hpi_con = NULL, *event_con = NULL; struct oa_info *this_oa = NULL, *other_oa = NULL; char *endptr = NULL; + struct extraDataInfo extra_data_info; + xmlNode *extra_data = NULL; if (oh_handler == NULL|| server == NULL) { err("Invalid parameters"); @@ -347,6 +349,23 @@ return SA_ERR_HPI_INTERNAL_ERROR; } + extra_data = network_info_response.extraData; + while (extra_data) { + soap_getExtraData(extra_data, &extra_data_info); + if ((!(strcmp(extra_data_info.name, "IpSwap"))) && + (extra_data_info.value != NULL)) { + if(!(strcasecmp(extra_data_info.value, + "true"))) { + oa_handler->ipswap = HPOA_TRUE; + } else { + oa_handler->ipswap = HPOA_FALSE; + } + break; + } + extra_data = soap_next_node(extra_data); + } + + /* Find the active and standby bay number, IP address * and firmware version */ switch (oa_role) { @@ -691,7 +710,12 @@ } } - oa->oa_status = status_response.oaRole; + /* If Enclosure IP mode is enabled then ipswap becomes true, then Active OA IP is always same. So do not change the Role */ + + if(!oa_handler->ipswap) { + oa->oa_status = status_response.oaRole; + } + if (oa->oa_status == ACTIVE) { g_mutex_unlock(oa->mutex); /* Always lock the oa_handler mutex and then oa_info mutex This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2013-05-31 19:24:55
|
Revision: 7542 http://openhpi.svn.sourceforge.net/openhpi/?rev=7542&view=rev Author: hemanthreddy Date: 2013-05-31 19:24:48 +0000 (Fri, 31 May 2013) Log Message: ----------- Fix for issue ID: 3613747 - Handler for EVENT_NETWORK_INFO_CHANGED Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h openhpi/trunk/plugins/oa_soap/oa_soap_event.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_calls.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2013-05-28 23:26:17 UTC (rev 7541) +++ openhpi/trunk/plugins/oa_soap/oa_soap_calls.c 2013-05-31 19:24:48 UTC (rev 7542) @@ -748,6 +748,13 @@ response->fanZoneArray = soap_walk_tree(node, "fanZoneArray:fanZone"); } +/* parse_enclosureNetworkInfo - Parses a enclosureNetworkInfo structure */ +static void parse_enclosureNetworkInfo(xmlNode *node, + struct enclosureNetworkInfo *response) +{ + response->extraData = soap_walk_tree(node, "extraData"); +} + /* parse_enclosureStatus - Parses a enclosureStatus structure */ static void parse_enclosureStatus(xmlNode *node, struct enclosureStatus *response) @@ -1330,6 +1337,13 @@ return; } + if ((node = soap_walk_tree(events, "enclosureNetworkInfo"))) { + result->enum_eventInfo = ENCLOSURENETWORKINFO; + parse_enclosureNetworkInfo(node, + &(result->eventData.enclosureNetworkInfo)); + return; + } + if ((node = soap_walk_tree(events, "enclosureStatus"))) { result->enum_eventInfo = ENCLOSURESTATUS; parse_enclosureStatus(node, Modified: openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c 2013-05-28 23:26:17 UTC (rev 7541) +++ openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.c 2013-05-31 19:24:48 UTC (rev 7542) @@ -196,3 +196,49 @@ return; } +/** + * oa_soap_proc_enc_network_info_changed + * @oh_handler: Pointer to openhpi handler structure + * @response: Pointer to the Enclosure thermal Info structure + * + * Purpose: + * Precesses and updates the ipswap(Enclosure IP Mode) Status + * + * Detailed Description: NA + * + * Retunr values: + * NONE + */ +void oa_soap_proc_enc_network_info_changed(struct oh_handler_state *oh_handler, + struct enclosureNetworkInfo *response) +{ + struct extraDataInfo extra_data_info; + xmlNode *extra_data = NULL; + struct oa_soap_handler *oa_handler = NULL; + + if (oh_handler == NULL || response == NULL) { + err("Invalid parameters"); + return; + } + + oa_handler = (struct oa_soap_handler *) oh_handler->data; + extra_data = response->extraData; + while (extra_data) { + soap_getExtraData(extra_data, &extra_data_info); + if ((!(strcmp(extra_data_info.name, "IpSwap"))) && + (extra_data_info.value != NULL)) { + if(!(strcasecmp(extra_data_info.value, + "true"))){ + oa_handler->ipswap = HPOA_TRUE; + dbg("Enclosure IP Mode is Enabled"); + } else { + oa_handler->ipswap = HPOA_FALSE; + dbg("Enclosure IP Mode is Disabled"); + } + break; + } + extra_data = soap_next_node(extra_data); + } + + return; +} Modified: openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h 2013-05-28 23:26:17 UTC (rev 7541) +++ openhpi/trunk/plugins/oa_soap/oa_soap_enclosure_event.h 2013-05-31 19:24:48 UTC (rev 7542) @@ -46,4 +46,7 @@ void oa_soap_proc_enc_thermal(struct oh_handler_state *oh_handler, SOAP_CON *con, struct thermalInfo *response); + +void oa_soap_proc_enc_network_info_changed(struct oh_handler_state *oh_handler, + struct enclosureNetworkInfo *response); #endif Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2013-05-28 23:26:17 UTC (rev 7541) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2013-05-31 19:24:48 UTC (rev 7542) @@ -255,6 +255,8 @@ /* If Enclosure IP Mode is enabled, * then make the Standby thread to sleep */ while (oa_handler->ipswap && (oa->oa_status == STANDBY)) { + dbg("Stand By Thread is going to Sleep for" + "20 secs as Enclosure IP Mode Is enabled"); sleep(20); } if (oa->oa_status == STANDBY && @@ -1024,8 +1026,9 @@ dbg("EVENT_OA_VCM -- Not processed"); break; case EVENT_NETWORK_INFO_CHANGED: - dbg("EVENT_NETWORK_INFO_CHANGED " - "-- Not processed"); + dbg("EVENT_NETWORK_INFO_CHANGED"); + oa_soap_proc_enc_network_info_changed(oh_handler, + &(event.eventData.enclosureNetworkInfo)); break; case EVENT_SNMP_INFO_CHANGED: dbg("EVENT_SNMP_INFO_CHANGED -- Not processed"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hem...@us...> - 2013-05-31 21:16:49
|
Revision: 7543 http://openhpi.svn.sourceforge.net/openhpi/?rev=7543&view=rev Author: hemanthreddy Date: 2013-05-31 21:16:42 +0000 (Fri, 31 May 2013) Log Message: ----------- Fix for issue ID: 3613532 - Should not free(foo) when asprintf(&foo, ...fails) Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_event.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_utils.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2013-05-31 19:24:48 UTC (rev 7542) +++ openhpi/trunk/plugins/oa_soap/oa_soap_event.c 2013-05-31 21:16:42 UTC (rev 7543) @@ -309,6 +309,8 @@ oa->event_con2 failed\n"); } } + free(url); + url = NULL; } /* end of else (non-switchover error handling) */ } /* end of else (SOAP call failure handling) */ Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2013-05-31 19:24:48 UTC (rev 7542) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2013-05-31 21:16:42 UTC (rev 7543) @@ -1993,6 +1993,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } if (blade_mp_response.ipAddress != NULL) { memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); @@ -2029,6 +2030,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } if (blade_mp_response.macAddress != NULL) { memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); @@ -2065,6 +2067,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } if (blade_mp_response.dnsName != NULL) { memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); @@ -2101,6 +2104,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } /* Get the Blade NIC information*/ rv = soap_getBladeInfo(con, @@ -2144,6 +2148,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; while (response.nics){ soap_getBladeNicInfo(response.nics, &nic_info); @@ -2185,6 +2190,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } response.nics = soap_next_node(response.nics); } @@ -2226,6 +2232,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } while (response.cpus){ @@ -2277,6 +2284,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; response.cpus = soap_next_node(response.cpus); } @@ -2317,6 +2325,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } rv = soap_getBladePortMap(con, @@ -2368,6 +2377,7 @@ BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } /*** Add Mezz Slot Innventory fileds ***/ if(mezz_info.mezzSlots != NULL){ @@ -2517,6 +2527,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } if(mezzSlots_slot.interconnectTrayBayNumber != NULL){ @@ -2557,6 +2568,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } if(mezzSlots_slot.interconnectTrayPortNumber != NULL){ memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); @@ -2595,6 +2607,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } mezzSlot_Info.slot = soap_next_node(mezzSlot_Info.slot); } @@ -2767,6 +2780,7 @@ SAHPI_MAX_TEXT_BUFFER_LENGTH"); } free(tmp); + tmp = NULL; if(mezzDev_Port.wwpn != NULL){ memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); hpi_field.AreaId = @@ -2808,6 +2822,7 @@ BUFFER_LENGTH"); } free(tmp); + tmp = NULL; } switch(mezzDev_Port.fabric){ case 0: tmp = "FABRIC_TYPE_MT"; @@ -3360,6 +3375,7 @@ local_inventory->info.area_list->idr_area_head. NumFields++; free(tmp); + tmp = NULL; } if (portmap.status) { memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); @@ -3389,6 +3405,7 @@ local_inventory->info.area_list->idr_area_head. NumFields++; free(tmp); + tmp = NULL; } /* Add interconnect tray size type*/ memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_utils.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2013-05-31 19:24:48 UTC (rev 7542) +++ openhpi/trunk/plugins/oa_soap/oa_soap_utils.c 2013-05-31 21:16:42 UTC (rev 7543) @@ -265,6 +265,7 @@ } free(url); + url = NULL; /* Check whether user_name has admin rights */ rv = check_oa_user_permissions(oa_handler, hpi_con, user_name); if (rv != SA_OK) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |