From: <su...@us...> - 2008-07-18 04:52:13
|
Revision: 6849 http://openhpi.svn.sourceforge.net/openhpi/?rev=6849&view=rev Author: sutula Date: 2008-07-18 04:52:22 +0000 (Fri, 18 Jul 2008) Log Message: ----------- [ 1976961 ] saHpiIdrFieldGet() enhancement to support product version Note that this is part two of this enhancement request. After looking further, we found other version information that could be included. We now consider this to be a complete fix for issue 1976961. Modified Paths: -------------- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c openhpi/trunk/plugins/oa_soap/oa_soap_inventory.h openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c Modified: openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2008-07-18 03:40:01 UTC (rev 6848) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.c 2008-07-18 04:52:22 UTC (rev 6849) @@ -1271,11 +1271,13 @@ { SaErrorT rv = SA_OK; SaHpiEntityPathT entity_path; + SaHpiIdrFieldT hpi_field; char *entity_root = NULL; char enclosure_inv_str[] = ENCLOSURE_INVENTORY_STRING; struct oa_soap_inventory *local_inventory = NULL; struct oa_soap_area *head_area = NULL; SaHpiInt32T add_success_flag = 0; + SaHpiInt32T product_area_success_flag = 0; SaHpiInt32T area_count = 0; if (oh_handler == NULL || response == NULL || rdr == NULL || @@ -1347,6 +1349,7 @@ * 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; @@ -1395,6 +1398,35 @@ } local_inventory->info.area_list = head_area; *inventory = local_inventory; + + /* Adding the product version in IDR product area. It is added at + * the end of the field list. + */ + if (product_area_success_flag == SAHPI_TRUE) { + /* Add the product version field if the enclosure hardware info + * is available + */ + if (response->hwVersion != 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_PRODUCT_VERSION; + strcpy ((char *)hpi_field.Field.Data, + response->hwVersion); + + 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; } @@ -1427,11 +1459,13 @@ { SaErrorT rv = SA_OK; SaHpiEntityPathT entity_path; + SaHpiIdrFieldT hpi_field; char *entity_root = NULL; char oa_inv_str[] = OA_INVENTORY_STRING; struct oa_soap_inventory *local_inventory = NULL; struct oa_soap_area *head_area = NULL; SaHpiInt32T add_success_flag = 0; + SaHpiInt32T product_area_success_flag = 0; SaHpiInt32T area_count = 0; if (oh_handler == NULL || response == NULL || rdr == NULL || @@ -1504,6 +1538,7 @@ * 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; @@ -1532,6 +1567,35 @@ local_inventory->info.area_list = head_area; *inventory = local_inventory; + + /* Adding the product version in IDR product area. It is added at + * the end of the field list. + */ + if (product_area_success_flag == SAHPI_TRUE) { + /* Add the product version field if the firmware info + * is available + */ + if (response->fwVersion != 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_PRODUCT_VERSION; + strcpy ((char *)hpi_field.Field.Data, + response->fwVersion); + + 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; } @@ -1834,6 +1898,7 @@ /** * build_server_inventory_area + * @con: Pointer to the SOAP_CON * @response: Handler data pointer * @rdr: Rdr Structure for inventory data * @inventory: Rdr private data structure @@ -1864,15 +1929,20 @@ * error * SA_ERR_HPI_OUT_OF_MEMORY - Request failed due to insufficient memory **/ -SaErrorT build_server_inventory_area(struct bladeInfo *response, +SaErrorT build_server_inventory_area(SOAP_CON *con, + struct bladeInfo *response, SaHpiRdrT *rdr, struct oa_soap_inventory **inventory) { SaErrorT rv = SA_OK; + SaHpiIdrFieldT hpi_field; struct oa_soap_inventory *local_inventory = *inventory; struct oa_soap_area *head_area = NULL; + SaHpiInt32T product_area_success_flag = 0; SaHpiInt32T add_success_flag = 0; SaHpiInt32T area_count = 0; + struct getBladeMpInfo blade_mp_request; + struct bladeMpInfo blade_mp_response; if (response == NULL || rdr == NULL || inventory == NULL) { err("Invalid parameter."); @@ -1896,6 +1966,7 @@ * 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; @@ -1924,6 +1995,46 @@ local_inventory->info.area_list = head_area; *inventory = local_inventory; + + /* Adding the product version in IDR product area. It is added at + * the end of the field list. + */ + if (product_area_success_flag == SAHPI_TRUE) { + /* Making getBladeMpInfo soap call for getting the + * product version + */ + blade_mp_request.bayNumber = response->bayNumber; + rv = soap_getBladeMpInfo(con, + &blade_mp_request, &blade_mp_response); + if (rv != SOAP_OK) { + err("Get blade mp info failed"); + return rv; + } + + /* Add the product version field if the firmware info + * is available + */ + if (blade_mp_response.fwVersion != 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_PRODUCT_VERSION; + strcpy ((char *)hpi_field.Field.Data, + blade_mp_response.fwVersion); + + 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 2008-07-18 03:40:01 UTC (rev 6848) +++ openhpi/trunk/plugins/oa_soap/oa_soap_inventory.h 2008-07-18 04:52:22 UTC (rev 6849) @@ -179,7 +179,8 @@ SaHpiRdrT *rdr, struct oa_soap_inventory **pinv); -SaErrorT build_server_inventory_area(struct bladeInfo *response, +SaErrorT build_server_inventory_area(SOAP_CON *con, + struct bladeInfo *response, SaHpiRdrT *rdr, struct oa_soap_inventory **inventory); Modified: openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2008-07-18 03:40:01 UTC (rev 6848) +++ openhpi/trunk/plugins/oa_soap/oa_soap_oa_event.c 2008-07-18 04:52:22 UTC (rev 6849) @@ -564,9 +564,11 @@ SaHpiEntityPathT root_entity_path, entity_path; SaHpiRptEntryT *rpt = NULL; SaHpiRdrT *rdr = NULL; + SaHpiIdrFieldT hpi_field; struct oa_soap_inventory *inventory = NULL; struct oa_soap_area *head_area = NULL; SaHpiInt32T add_success_flag = 0, area_count = 0; + SaHpiInt32T product_area_success_flag = 0; char *entity_root = NULL; if (oh_handler == NULL || info == NULL || resource_id == NULL) { @@ -639,6 +641,7 @@ return rv; } if (add_success_flag != SAHPI_FALSE) { + product_area_success_flag = SAHPI_TRUE; (inventory->info.idr_info.NumAreas)++; if (area_count == 0) { head_area = inventory->info.area_list; @@ -665,6 +668,36 @@ inventory->info.area_list = head_area; *resource_id = rpt->ResourceId; + + /* Adding the product version in IDR product area. It is added at + * the end of the field list. + */ + if (product_area_success_flag == SAHPI_TRUE) { + /* Add the product version field if the firmware info + * is available + */ + if (info->fwVersion != NULL) { + memset(&hpi_field, 0, sizeof(SaHpiIdrFieldT)); + hpi_field.AreaId = inventory->info.area_list-> + idr_area_head.AreaId; + hpi_field.Type = SAHPI_IDR_FIELDTYPE_PRODUCT_VERSION; + strcpy ((char *)hpi_field.Field.Data, + info->fwVersion); + + rv = idr_field_add(&(inventory->info.area_list + ->field_list), + &hpi_field); + if (rv != SA_OK) { + err("Add idr field failed"); + return rv; + } + + /* Increment the field counter */ + inventory->info.area_list->idr_area_head. + NumFields++; + } + } + return SA_OK; } @@ -743,7 +776,7 @@ } /** - * build_oa_inv_rdr: + * build_inserted_oa_inv_rdr: * @oh_handler: Handler data pointer. * @bay_number: Bay number of the inserted OA. * @rdr: Rdr Structure for inventory data. Modified: openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c =================================================================== --- openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2008-07-18 03:40:01 UTC (rev 6848) +++ openhpi/trunk/plugins/oa_soap/oa_soap_server_event.c 2008-07-18 04:52:22 UTC (rev 6849) @@ -244,7 +244,7 @@ } /* Build the complete inventory information */ - rv = build_server_inventory_area (&response, rdr, + rv = build_server_inventory_area (con, &response, rdr, &inventory); if (rv != SA_OK) { err("Failed to add IDR inventory to server"); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |