From: <ric...@us...> - 2009-11-08 21:38:54
|
Revision: 7025 http://openhpi.svn.sourceforge.net/openhpi/?rev=7025&view=rev Author: ricwhite Date: 2009-11-08 21:38:40 +0000 (Sun, 08 Nov 2009) Log Message: ----------- Merging trunk changes since the 2.14.0 release into the 2.14.x branch for 2.14.1 testing. Merge revision parameter was -r6999:7024. Modified Paths: -------------- openhpi/branches/2.14.x/README openhpi/branches/2.14.x/clients/hpiinv.c openhpi/branches/2.14.x/clients/hpitop.c openhpi/branches/2.14.x/configure.ac openhpi/branches/2.14.x/hpi_shell/ctrl_inv.c openhpi/branches/2.14.x/hpi_shell/fumi.c openhpi/branches/2.14.x/hpi_shell/hpi_ui.h openhpi/branches/2.14.x/hpi_shell/service.c openhpi/branches/2.14.x/hpi_shell/session.c openhpi/branches/2.14.x/hpi_shell/show.c openhpi/branches/2.14.x/include/SaHpi.h openhpi/branches/2.14.x/include/oh_error.h openhpi/branches/2.14.x/include/oh_handler.h openhpi/branches/2.14.x/marshal/marshal_hpi.c openhpi/branches/2.14.x/marshal/marshal_hpi.h openhpi/branches/2.14.x/openhpid/oh_client.cpp openhpi/branches/2.14.x/openhpid/oh_client_conf.c openhpi/branches/2.14.x/openhpid/oh_client_session.cpp openhpi/branches/2.14.x/openhpid/openhpid.cpp openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl.h openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.c openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.h openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_xml.c openhpi/branches/2.14.x/plugins/ipmidirect/Makefile.am openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.cpp openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.h openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor.cpp openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.h openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_callsupport.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_event.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_fumi.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_fumi.h openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_oa_event.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_power.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_power.h openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_re_discover.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_re_discover.h openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_server_event.c openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_server_event.h openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_utils.c openhpi/branches/2.14.x/plugins/snmp_bc/snmp_bc_discover.c openhpi/branches/2.14.x/src/alarm.c openhpi/branches/2.14.x/src/plugin.c openhpi/branches/2.14.x/src/safhpi.c openhpi/branches/2.14.x/utils/sahpi_struct_utils.c Added Paths: ----------- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.cpp openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.h openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.cpp openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.h Property Changed: ---------------- openhpi/branches/2.14.x/ Property changes on: openhpi/branches/2.14.x ___________________________________________________________________ Modified: svn:mergeinfo - /openhpi/trunk:6972-6988,6997 + /openhpi/trunk:6972-6988,6997,7000-7024 Modified: openhpi/branches/2.14.x/README =================================================================== --- openhpi/branches/2.14.x/README 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/README 2009-11-08 21:38:40 UTC (rev 7025) @@ -128,4 +128,3 @@ Also visit SAForum's website at http://www.saforum.org - Modified: openhpi/branches/2.14.x/clients/hpiinv.c =================================================================== --- openhpi/branches/2.14.x/clients/hpiinv.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/clients/hpiinv.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -455,7 +455,7 @@ main(int argc, char **argv) { int c; - SaErrorT rv; + SaErrorT rv,rv_rdr; SaHpiSessionIdT sessionid; SaHpiDomainInfoT rptinfo; SaHpiRptEntryT rptentry; @@ -541,11 +541,12 @@ if (rptentry.ResourceCapabilities & SAHPI_CAPABILITY_INVENTORY_DATA) { printf("Resource[%d] Tag: %s \thas inventory capability\n", rptentryid,rptentry.ResourceTag.Data); - while ((rv == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) + rv_rdr = SA_OK; + while ((rv_rdr == SA_OK) && (entryid != SAHPI_LAST_ENTRY)) { - rv = saHpiRdrGet(sessionid,resourceid, entryid,&nextentryid, &rdr); - if (fdebug) printf("saHpiRdrGet[%x] rv = %d\n",entryid,rv); - if (rv == SA_OK) + rv_rdr = saHpiRdrGet(sessionid,resourceid, entryid,&nextentryid, &rdr); + if (fdebug) printf("saHpiRdrGet[%x] rv = %d\n",entryid,rv_rdr); + if (rv_rdr == SA_OK) { if (fdebug) printf("Rdr[%x] type = %d tag = %s\n",entryid, rdr.RdrType,rdr.IdString.Data); @@ -564,17 +565,17 @@ { /* Get all of the inventory data areas and fields */ memset(inv,0,buffersize); - rv = saHpiIdrInfoGet(sessionid, resourceid, idrid, &idrInfo); - if (rv != SA_OK) { - printf("IDR Info error: rv = %d\n",rv); + rv_rdr = saHpiIdrInfoGet(sessionid, resourceid, idrid, &idrInfo); + if (rv_rdr != SA_OK) { + printf("IDR Info error: rv_rdr = %d\n",rv_rdr); } else { /* idrInfo is ok */ if (fdebug) printf("IDR Info: ok \n"); print_epath(&rptentry.ResourceEntity, 1); printf("RDR[%x]: Inventory, IdrId=%x %s\n",rdr.RecordId, idrid,rdr.IdString.Data); print_idrinfo(&idrInfo,4); - rv = walkInventory(sessionid, resourceid, &idrInfo); - if (fdebug) printf("walkInventory rv = %d\n",rv); + rv_rdr = walkInventory(sessionid, resourceid, &idrInfo); + if (fdebug) printf("walkInventory rv_rdr = %d\n",rv_rdr); } if (!ent_writable(&rptentry.ResourceEntity,&idrInfo)) @@ -592,13 +593,13 @@ strncpy((char *)strptr->Data, atag.tag, atag.tlen); strptr->Data[atag.tlen] = 0; printf( "Writing new asset tag: %s\n",strptr->Data); - rv = saHpiIdrFieldSet(sessionid, resourceid, + rv_rdr = saHpiIdrFieldSet(sessionid, resourceid, atag.idrid, &atagField); - printf("Return Write Status = %d\n", rv); - if (rv == SA_OK) { + printf("Return Write Status = %d\n", rv_rdr); + if (rv_rdr == SA_OK) { printf ("Good write - re-reading!\n"); - rv = walkInventory(sessionid, resourceid, &idrInfo); - if (fdebug) printf("walkInventory rv = %d\n",rv); + rv_rdr = walkInventory(sessionid, resourceid, &idrInfo); + if (fdebug) printf("walkInventory rv_rdr = %d\n",rv_rdr); } /* Good write - re-read */ } /*endif fasset*/ } /*endif RDR tag ok*/ Modified: openhpi/branches/2.14.x/clients/hpitop.c =================================================================== --- openhpi/branches/2.14.x/clients/hpitop.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/clients/hpitop.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -219,6 +219,13 @@ if (rvRdrGet == SA_OK) { + // Add zero terminator to RDR Id String + SaHpiUint32T last = rdr.IdString.DataLength; + if ( last >= SAHPI_MAX_TEXT_BUFFER_LENGTH ) { + last = SAHPI_MAX_TEXT_BUFFER_LENGTH - 1; + } + rdr.IdString.Data[last] = '\0'; + if (f_overview) list_rdr(sessionid, &rptentry, &rdr, l_resourceid); if (f_inv) show_inv(sessionid, &rptentry, &rdr, l_resourceid); if (f_sensor) show_sens(sessionid, &rptentry, &rdr, l_resourceid); Modified: openhpi/branches/2.14.x/configure.ac =================================================================== --- openhpi/branches/2.14.x/configure.ac 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/configure.ac 2009-11-08 21:38:40 UTC (rev 7025) @@ -44,15 +44,32 @@ AC_PROG_LN_S AC_PROG_MAKE_SET +enabled_non32bit="no" +AC_ARG_ENABLE([non32bit-int], + [ --enable-non32bit-int Allow compile on non 32bit int architectures [[default=no]]], + [if test "x$enableval" = "xyes"; then + enabled_non32bit="yes" + fi]) + dnl die on int != 32bits. This is too instrumental to our code right now. dnl AC_MSG_CHECKING(int is 4 bytes) OH_SET_SIZES if test "x$OH_SIZEOF_INT" != "x4"; then - AC_MSG_ERROR([ -*** int is not 4 bytes, it is $OH_SIZEOF_INT bytes on this platform -*** undefined behavior will result -*** please contact the openhpi development team to fix this -]) + if test "x$enabled_non32bit" = "xyes"; then + AC_MSG_WARN([ +*** Size of int is not 4 bytes, it is $OH_SIZEOF_INT bytes on this platform. +*** The --enable_non32bit_int arg has been used to force compilation regardless. +*** Execution on this platform is not supported and could produce undefined +*** behavior. + ]) + else + AC_MSG_ERROR([ +*** Size of int is not 4 bytes, it is $OH_SIZEOF_INT bytes on this platform. +*** Execution on this platform is not supported and could produce undefined +*** behavior. +*** Please contact the openhpi development team to fix this + ]) + fi fi AM_CONDITIONAL(CROSS_COMPILATION, test x$cross_compiling = xyes) @@ -94,6 +111,15 @@ GLIB_CFLAGS=`pkg-config --cflags $GLIB gthread-2.0` GLIB_LIBS=`pkg-config --libs $GLIB gthread-2.0` +# On some versions of Solaris the pkg-config file for gthread-2.0 contains a +# compiler option, '-mt', that is incompatible with gcc +case $host_os in + solaris2.10) + GLIB_CFLAGS=`echo $GLIB_CFLAGS | sed -e 's/-mt/-D_REENTRANT/g'` + GLIB_LIBS=`echo $GLIB_LIBS | sed -e 's/-mt//g'` + ;; +esac + AC_MSG_CHECKING(for GLIB - version >= $GLIB_REQUIRED_VERSION) AC_MSG_RESULT(yes (version $exact_version)) @@ -155,7 +181,6 @@ AM_CONDITIONAL(OPENHPID_STATIC, test x$openhpid_static = xyes) - AC_ARG_ENABLE([clients], [ --enable-clients build HPI client programs [[default=yes]]], [if test "x$enableval" = "xyes"; then Modified: openhpi/branches/2.14.x/hpi_shell/ctrl_inv.c =================================================================== --- openhpi/branches/2.14.x/hpi_shell/ctrl_inv.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/hpi_shell/ctrl_inv.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -610,47 +610,6 @@ return HPI_SHELL_OK; } -static int stringtoascii6(char *str, char *ascii) -{ - int ascii_ind = 0, ascii_len, i, j; - int res = 0, n; - char byte = 0, c; - - n = strlen(str); - if (n == 0) return(0); - ascii_len = (n * 6 + 7) / 8; - memset(ascii, 0, ascii_len); - for (i = 0; i < n; i++) { - c = str[i]; - for (j = 0; j < 64; j++) - if (c == ascii6_codes[j]) break; - if (byte >= 64) return(-1); - byte = j; - switch (i % 4) { - case 0: - ascii[ascii_ind] |= (byte & 0x3F); - break; - case 1: - res = (byte & 0x03) << 6; - ascii[ascii_ind++] |= res; - res = (byte & 0x3C) >> 2; - ascii[ascii_ind] |= res; - break; - case 2: - res = (byte & 0x0F) << 4; - ascii[ascii_ind++] |= res; - res = (byte & 0x30) >> 4; - ascii[ascii_ind] |= res; - break; - case 3: - res = byte << 2; - ascii[ascii_ind++] |= res; - break; - } - }; - return(ascii_len); -} - int set_text_buffer(SaHpiTextBufferT *buf) { int i, j, ind; @@ -678,21 +637,44 @@ printf("UNICODE: not implemented"); return(-1); case SAHPI_TL_TYPE_BCDPLUS: - str1 = (char *)&(buf->Data); - ind = 0; for (i = 0; i < strlen(str); i++) { - for (j = 0; j < 0x0D; j++) - if (bcdplus_codes[j] == str[i]) break; - if (j >= 0x0D) return(-1); - if (i % 2) str1[ind++] += j << 4; - else str1[ind] = j; - }; - buf->DataLength = (i + 1)/ 2; + switch ( str[i] ) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ' ': + case '-': + case '.': + case ':': + case ',': + case '_': + break; + default: + printf( "BCD+: Illegal symbol \'%c\'(0x%x)\n", str[i], str[i] ); + return -1; + } + } + snprintf((char *)&(buf->Data), SAHPI_MAX_TEXT_BUFFER_LENGTH, "%s", str); + buf->DataLength = strlen(str); + buf->Language = lang; break; case SAHPI_TL_TYPE_ASCII6: - i = stringtoascii6(str, (char *)&(buf->Data)); - if (i < 0) return(-1); - buf->DataLength = i; + for (i = 0; i < strlen(str); i++) { + if ( ( str[i] < 0x20 ) || ( str[i] > 0x5F ) ) { + printf( "ASCII6: Illegal symbol \'%c\'(0x%x)\n", str[i], str[i] ); + return -1; + } + } + snprintf((char *)&(buf->Data), SAHPI_MAX_TEXT_BUFFER_LENGTH, "%s", str); + buf->DataLength = strlen(str); + buf->Language = lang; break; case SAHPI_TL_TYPE_TEXT: snprintf((char *)&(buf->Data), SAHPI_MAX_TEXT_BUFFER_LENGTH, "%s", str); Modified: openhpi/branches/2.14.x/hpi_shell/fumi.c =================================================================== --- openhpi/branches/2.14.x/hpi_shell/fumi.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/hpi_shell/fumi.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -272,9 +272,9 @@ { SaErrorT rv; - rv = saHpiFumiRollback( sessionId, rptid, fuminum ); + rv = saHpiFumiRollbackStart( sessionId, rptid, fuminum ); if ( rv != SA_OK ) { - printf( "ERROR!!! saHpiFumiRollback: %s\n", oh_lookup_error( rv ) ); + printf( "ERROR!!! saHpiFumiRollbackStart: %s\n", oh_lookup_error( rv ) ); return HPI_SHELL_CMD_ERROR; } return HPI_SHELL_OK; Modified: openhpi/branches/2.14.x/hpi_shell/hpi_ui.h =================================================================== --- openhpi/branches/2.14.x/hpi_shell/hpi_ui.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/hpi_shell/hpi_ui.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -105,8 +105,6 @@ typedef int (*get_int_param_t)(char *buf, int *val); extern char *hex_codes; -extern char *bcdplus_codes; -extern char ascii6_codes[]; extern SaErrorT find_rdr_by_num(SaHpiSessionIdT sessionid, SaHpiResourceIdT resourceid, SaHpiInstrumentIdT num, SaHpiRdrTypeT type, int as, Modified: openhpi/branches/2.14.x/hpi_shell/service.c =================================================================== --- openhpi/branches/2.14.x/hpi_shell/service.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/hpi_shell/service.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -1005,53 +1005,7 @@ } char *hex_codes = "0123456789ABCDEF"; -char *bcdplus_codes = "0123456789 -.???"; -char ascii6_codes[64] = { - ' ', '!', '"', '#', '$', '%', '&', '\'', - '(', ')', '*', '+', ',', '-', '.', '/', - '0', '1', '2', '3', '4', '5', '6', '7', - '8', '9', ':', ';', '<', '=', '>', '?', - '&', 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', '[', '\\', ']', '^', '_' }; - -static int ascii6tostring(char *ascii, int n_ascii, char *str, int n) -{ - int ascii_ind = 0, ascii_len, i; - int res = 0; - char byte = 0; - - ascii_len = n_ascii * 8 / 6; - memset(str, 0, n); - if (ascii_len > n) ascii_len = n; - for (i = 0; i < ascii_len; i++) { - switch (i % 4) { - case 0: - byte = ascii[ascii_ind++]; - res = byte & 0x3F; - break; - case 1: - res = (byte & 0xC0) >> 6; - byte = ascii[ascii_ind++]; - res += (byte & 0x0F) << 2; - break; - case 2: - res = (byte & 0xF0) >> 4; - byte = ascii[ascii_ind++]; - res += (byte & 0x03) << 4; - break; - case 3: - res = byte & 0xFC; - res >>= 2; - break; - }; - str[i] = ascii6_codes[res]; - }; - return(ascii_len); -} - Pr_ret_t print_text_buffer_type(char *mes, SaHpiTextBufferT *buf, char *meslast, hpi_ui_print_cb_t proc) { @@ -1093,38 +1047,9 @@ strcat(outbuf, "UNICODE does not implement"); break; case SAHPI_TL_TYPE_BCDPLUS: - len = buf->DataLength * 2 + 1; - tmp = malloc(len); - memset(tmp, 0, len); - tmp_ind = 0; - memset(tmp, 0, len); - for (i = 0; i < buf->DataLength; i++) { - c = buf->Data[i] & 0x0F; - tmp[tmp_ind++] = bcdplus_codes[c]; - c = (buf->Data[i] & 0xF0) >> 4; - tmp[tmp_ind++] = bcdplus_codes[c]; - }; - strcat(outbuf, tmp); - free(tmp); - break; case SAHPI_TL_TYPE_ASCII6: - len = buf->DataLength * 8 / 6; - tmp = malloc(len + 1); - memset(tmp, 0, len + 1); - i = ascii6tostring((char *)(buf->Data), buf->DataLength, - tmp, len); - if (i == 0) break; - strcat(outbuf, tmp); - free(tmp); - break; case SAHPI_TL_TYPE_TEXT: - /* Ensure NULL terminated string */ - if ( buf->DataLength < SAHPI_MAX_TEXT_BUFFER_LENGTH ) { - buf->Data[buf->DataLength] = '\0'; - } else { - buf->Data[SAHPI_MAX_TEXT_BUFFER_LENGTH - 1] = '\0'; - } - strcat(outbuf, (char *)(buf->Data)); + strncat(outbuf, (char *)(buf->Data), buf->DataLength); break; case SAHPI_TL_TYPE_BINARY: len = buf->DataLength * 2 + 1; Modified: openhpi/branches/2.14.x/hpi_shell/session.c =================================================================== --- openhpi/branches/2.14.x/hpi_shell/session.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/hpi_shell/session.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -115,7 +115,7 @@ SAHPI_TIMEOUT_BLOCK, &event, &rdr, &rptentry, NULL); if (rv != SA_OK ) { - printf("saHpiEventGet failed with error <%d>", rv); + printf("saHpiEventGet failed with error <%d>\n", rv); break; } if (prt_flag == 1) { Modified: openhpi/branches/2.14.x/hpi_shell/show.c =================================================================== --- openhpi/branches/2.14.x/hpi_shell/show.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/hpi_shell/show.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -21,6 +21,7 @@ #define SHOW_BUF_SZ 1024 +#define HPIBOOL2STR( x ) ( ( x == SAHPI_TRUE ) ? "TRUE" : "FALSE" ) extern char *lookup_proc(int num, int val); extern SaErrorT decode_proc(int num, void *val, char *buf, int bufsize); @@ -134,6 +135,15 @@ }; if (categ != SAHPI_EC_THRESHOLD) return(SA_OK); + if (sendef->IsAccessible == SAHPI_FALSE) { + proc("Thresholds are not accessible.\n"); + return(SA_OK); + } + if (sendef->ReadThold == 0) { + proc("Thresholds are not readable.\n"); + return(SA_OK); + } + memset(&senstbuff, 0, sizeof(SaHpiSensorThresholdsT)); rv = saHpiSensorThresholdsGet(sessionid, resourceid, sensornum, &senstbuff); if (rv != SA_OK) { @@ -143,10 +153,6 @@ proc(buf); return -1; }; - if (sendef->IsAccessible == 0) { - proc("Thresholds are not accessible.\n"); - return -1; - }; res = print_thres_value(&(senstbuff.LowMinor), "Lower Minor Threshold", sendef, SAHPI_ES_LOWER_MINOR, proc); if (res == HPI_UI_END) return(HPI_UI_END); @@ -1006,12 +1012,14 @@ char buf[SHOW_BUF_SZ]; char time[256]; int ind; + int first = 1; alarm.AlarmId = SAHPI_FIRST_ENTRY; while (rv == SA_OK) { rv = saHpiAlarmGetNext(domain->sessionId, SAHPI_ALL_SEVERITIES, FALSE, &alarm); if (rv != SA_OK) break; + first = 0; snprintf(buf, SHOW_BUF_SZ, "(%d) ", alarm.AlarmId); time2str(alarm.Timestamp, time, 256); strcat(buf, time); @@ -1034,7 +1042,7 @@ if (proc(buf) != 0) return(-1); }; - if (rv == SA_ERR_HPI_NOT_PRESENT) { + if ( (rv == SA_ERR_HPI_NOT_PRESENT) && (first == 1) ) { proc("No alarms in DAT.\n"); return(SA_OK); }; @@ -1063,8 +1071,8 @@ }; num = info.NumAreas; snprintf(buf, SHOW_BUF_SZ, - "Inventory: %d Update count: %d Read only: %d Areas: %d\n", - info.IdrId, info.UpdateCount, info.ReadOnly, num); + "Inventory: %d Update count: %d Read Only: %s Areas: %d\n", + info.IdrId, info.UpdateCount, HPIBOOL2STR( info.ReadOnly ), num); if (proc(buf) != 0) return(SA_OK); entryid = SAHPI_FIRST_ENTRY; while ((entryid != SAHPI_LAST_ENTRY) && (num > 0)) { @@ -1082,8 +1090,8 @@ str = oh_lookup_idrareatype(hdr.Type); if (str == NULL) str = "Unknown"; snprintf(buf, SHOW_BUF_SZ, - " Area: %d Type: %s Read Only: %d Fields: %d\n", - hdr.AreaId, str, hdr.ReadOnly, hdr.NumFields); + " Area: %d Type: %s Read Only: %s Fields: %d\n", + hdr.AreaId, str, HPIBOOL2STR( hdr.ReadOnly ), hdr.NumFields); if (proc(buf) != 0) return(SA_OK); fentryid = SAHPI_FIRST_ENTRY; entryid = nextentryid; @@ -1098,8 +1106,8 @@ str = oh_lookup_idrfieldtype(field.Type); if (str == NULL) str = "Unknown"; snprintf(buf, SHOW_BUF_SZ, - " Field: %d Type: %s Read Only: %d (", - field.FieldId, str, field.ReadOnly); + " Field: %d Type: %s Read Only: %s (", + field.FieldId, str, HPIBOOL2STR( field.ReadOnly )); if (proc(buf) != 0) return(SA_OK); if (print_text_buffer(NULL, &(field.Field), NULL, proc) != 0) return(SA_OK); @@ -1123,8 +1131,7 @@ if (proc(buf) != 0) return; snprintf(str, len, "AreaType: %s\n", oh_lookup_idrareatype(Header->Type)); if (proc(buf) != 0) return; - snprintf(str, len, "ReadOnly: %s\n", - (Header->ReadOnly == SAHPI_TRUE) ? "TRUE" : "FALSE" ); + snprintf(str, len, "ReadOnly: %s\n", HPIBOOL2STR( Header->ReadOnly )); if (proc(buf) != 0) return; snprintf(str, len, "NumFields: %d\n", Header->NumFields); proc(buf); @@ -1143,8 +1150,7 @@ if (proc(buf) != 0) return; snprintf(str, len, "Field Type: %s\n", oh_lookup_idrfieldtype(Field->Type)); if (proc(buf) != 0) return; - snprintf(str, len, "ReadOnly: %s\n", - (Field->ReadOnly == SAHPI_TRUE) ? "TRUE" : "FALSE" ); + snprintf(str, len, "ReadOnly: %s\n", HPIBOOL2STR( Field->ReadOnly )); if (proc(buf) != 0) return; *str = 0; proc(buf); Modified: openhpi/branches/2.14.x/include/SaHpi.h =================================================================== --- openhpi/branches/2.14.x/include/SaHpi.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/include/SaHpi.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -9606,7 +9606,7 @@ ** operation will be associated with that bank. ** *******************************************************************************/ -SaErrorT SAHPI_API saHpiFumiRollback ( +SaErrorT SAHPI_API saHpiFumiRollbackStart ( SAHPI_IN SaHpiSessionIdT SessionId, SAHPI_IN SaHpiResourceIdT ResourceId, SAHPI_IN SaHpiFumiNumT FumiNum Modified: openhpi/branches/2.14.x/include/oh_error.h =================================================================== --- openhpi/branches/2.14.x/include/oh_error.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/include/oh_error.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -28,8 +28,13 @@ * of unqualified sprintf calls in plugin code. Use snprintf instead * to ensure there are no buffer overruns */ +/* Unfortunately, sprintf is used in the system headers of some versions + * of Solaris, so we can't poison sprintf there. + */ +#if !defined(__sun) || !defined(__SVR4) #undef sprintf #pragma GCC poison sprintf +#endif #define OH_ERROR "OPENHPI_ERROR" #define OH_DEBUG "OPENHPI_DEBUG" Modified: openhpi/branches/2.14.x/include/oh_handler.h =================================================================== --- openhpi/branches/2.14.x/include/oh_handler.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/include/oh_handler.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -837,15 +837,15 @@ SaHpiBoolT disable); /*** - * saHpiFumiRollback + * saHpiFumiRollbackStart **/ - SaErrorT (*rollback_fumi)( + SaErrorT (*start_fumi_rollback)( void *hnd, SaHpiResourceIdT id, SaHpiFumiNumT num); /*** - * saHpiFumiRollback + * saHpiFumiActivate **/ SaErrorT (*activate_fumi)( void *hnd, Modified: openhpi/branches/2.14.x/marshal/marshal_hpi.c =================================================================== --- openhpi/branches/2.14.x/marshal/marshal_hpi.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/marshal/marshal_hpi.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -1552,14 +1552,14 @@ }; -static const cMarshalType *saHpiFumiRollbackIn[]= +static const cMarshalType *saHpiFumiRollbackStartIn[]= { &SaHpiSessionIdType, &SaHpiResourceIdType, &SaHpiFumiNumType, 0 }; -static const cMarshalType *saHpiFumiRollbackOut[] = +static const cMarshalType *saHpiFumiRollbackStartOut[] = { &SaErrorType, 0 @@ -2089,7 +2089,7 @@ dHpiMarshalEntry( saHpiFumiUpgradeStatusGet ), dHpiMarshalEntry( saHpiFumiTargetVerifyStart ), dHpiMarshalEntry( saHpiFumiUpgradeCancel ), - dHpiMarshalEntry( saHpiFumiRollback ), + dHpiMarshalEntry( saHpiFumiRollbackStart ), dHpiMarshalEntry( saHpiFumiActivate ), dHpiMarshalEntry( saHpiHotSwapPolicyCancel ), dHpiMarshalEntry( saHpiResourceActiveSet ), Modified: openhpi/branches/2.14.x/marshal/marshal_hpi.h =================================================================== --- openhpi/branches/2.14.x/marshal/marshal_hpi.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/marshal/marshal_hpi.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -122,7 +122,7 @@ eFsaHpiFumiUpgradeStatusGet, eFsaHpiFumiTargetVerifyStart, eFsaHpiFumiUpgradeCancel, - eFsaHpiFumiRollback, + eFsaHpiFumiRollbackStart, eFsaHpiFumiActivate, eFsaHpiHotSwapPolicyCancel, eFsaHpiResourceActiveSet, Modified: openhpi/branches/2.14.x/openhpid/oh_client.cpp =================================================================== --- openhpi/branches/2.14.x/openhpid/oh_client.cpp 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/openhpid/oh_client.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -4826,7 +4826,7 @@ return err; } -SaErrorT SAHPI_API saHpiFumiRollback ( +SaErrorT SAHPI_API saHpiFumiRollbackStart ( SAHPI_IN SaHpiSessionIdT SessionId, SAHPI_IN SaHpiResourceIdT ResourceId, SAHPI_IN SaHpiFumiNumT FumiNum) @@ -4834,7 +4834,7 @@ void *request; char reply[dMaxMessageLength]; SaErrorT err = SA_OK; - char cmd[] = "saHpiFumiRollback"; + char cmd[] = "saHpiFumiRollbackStart"; pcstrmsock pinst; SaHpiSessionIdT dsid = 0; SaHpiDomainIdT did = 0; @@ -4844,8 +4844,8 @@ err = oh_get_connx(SessionId, &dsid, &pinst, &did); if (err) return err; - cHpiMarshal *hm = HpiMarshalFind(eFsaHpiFumiRollback); - pinst->MessageHeaderInit(eMhMsg, 0, eFsaHpiFumiRollback, hm->m_request_len); + cHpiMarshal *hm = HpiMarshalFind(eFsaHpiFumiRollbackStart); + pinst->MessageHeaderInit(eMhMsg, 0, eFsaHpiFumiRollbackStart, hm->m_request_len); request = malloc(hm->m_request_len); pinst->header.m_len = HpiMarshalRequest3(hm, request, Modified: openhpi/branches/2.14.x/openhpid/oh_client_conf.c =================================================================== --- openhpi/branches/2.14.x/openhpid/oh_client_conf.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/openhpid/oh_client_conf.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -119,7 +119,7 @@ next_token = g_scanner_get_next_token(oh_scanner); while (next_token != G_TOKEN_RIGHT_CURLY && next_token != HPI_CLIENT_CONF_TOKEN_HOST && - next_token != HPI_CLIENT_CONF_TOKEN_HOST) { + next_token != HPI_CLIENT_CONF_TOKEN_PORT) { if (next_token == G_TOKEN_EOF) break; next_token = g_scanner_get_next_token(oh_scanner); } Modified: openhpi/branches/2.14.x/openhpid/oh_client_session.cpp =================================================================== --- openhpi/branches/2.14.x/openhpid/oh_client_session.cpp 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/openhpid/oh_client_session.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -102,7 +102,6 @@ g_hash_table_insert(ohd_domains, &domain_conf->did, domain_conf); } - g_static_rec_mutex_unlock(&ohd_sessions_sem); } g_static_rec_mutex_unlock(&ohd_sessions_sem); Modified: openhpi/branches/2.14.x/openhpid/openhpid.cpp =================================================================== --- openhpi/branches/2.14.x/openhpid/openhpid.cpp 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/openhpid/openhpid.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -2449,19 +2449,19 @@ } break; - case eFsaHpiFumiRollback: { + case eFsaHpiFumiRollbackStart: { SaHpiSessionIdT session_id; SaHpiResourceIdT resource_id; SaHpiFumiNumT fumi_num; - PVERBOSE1("%p Processing saHpiFumiRollback.", thrdid); + PVERBOSE1("%p Processing saHpiFumiRollbackStart.", thrdid); if (HpiDemarshalRequest3(request_mFlags & dMhEndianBit, hm, pReq, &session_id, &resource_id, &fumi_num) < 0) return eResultError; - ret = saHpiFumiRollback(session_id, resource_id, + ret = saHpiFumiRollbackStart(session_id, resource_id, fumi_num); thrdinst->header.m_len = HpiMarshalReply0(hm, pReq, &ret); Modified: openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl.h =================================================================== --- openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -98,7 +98,7 @@ * RIBCL command and response buffer length - static for now. * Change to dynamic if need be. */ -#define ILO2_RIBCL_BUFFER_LEN 4096 +#define ILO2_RIBCL_BUFFER_LEN 4096 /* * Power and reset status definitions @@ -346,11 +346,11 @@ } ir_fwdata_t; #define ILO2_RIBCL_DISCOVER_CPU_MAX 16 -#define ILO2_RIBCL_DISCOVER_MEM_MAX 16 +#define ILO2_RIBCL_DISCOVER_MEM_MAX 32 #define ILO2_RIBCL_DISCOVER_FAN_MAX 16 #define ILO2_RIBCL_DISCOVER_PSU_MAX 8 #define ILO2_RIBCL_DISCOVER_VRM_MAX 8 -#define ILO2_RIBCL_DISCOVER_TS_MAX 16 +#define ILO2_RIBCL_DISCOVER_TS_MAX 48 #define ILO2_RIBCL_CHASSIS_INDEX -1; /* Index is not aplicable to chassis */ Modified: openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.c =================================================================== --- openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -39,7 +39,6 @@ #include <ilo2_ribcl_xml.h> #include <ilo2_ribcl_sensor.h> #include <ilo2_ribcl_idr.h> - #ifdef ILO2_RIBCL_SIMULATE_iLO2_RESPONSE #include <sys/stat.h> /* For test routine ilo2_ribcl_getfile() */ #include <fcntl.h> /* For test routine ilo2_ribcl_getfile() */ @@ -2162,12 +2161,14 @@ if( fstat( fd, &stbuf) != 0){ err("ilo2_ribcl_getfile: Stat failed for file %s", fname); + close(fd); return( 1); } if( (stbuf.st_size + 1) > bufsize){ err("ilo2_ribcl_getfile(): File exceeds buffer by %ld bytes.", (stbuf.st_size + 1) - bufsize); + close(fd); return( 1); } @@ -2175,6 +2176,7 @@ while( (rcount = read( fd, &buffer[i], 1)) != 0){ if( rcount == -1){ err("ilo2_ribcl_getfile(): Read error at byte %d", i); + close(fd); return( 1); } i++; @@ -2188,6 +2190,7 @@ } buffer[i] = 0; /* Null terminate */ + close(fd); return( 0); /* Success */ } /* end ilo2_ribcl_getfile() */ Modified: openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.h =================================================================== --- openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_discover.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -39,10 +39,10 @@ /* The size used for the temporary buffer to contain the response * of the IR_CMD_GET_SERVER_DATA command. The current return size is - * a little over 12K, so we use 24K to give us some margin for the + * a little over 24K, so we use 48K to give us some margin for the * future. */ -#define ILO2_RIBCL_DISCOVER_RESP_MAX 1024*24 +#define ILO2_RIBCL_DISCOVER_RESP_MAX 1024*48 /* This define is the IANA-assigned private enterprise number for Hewlett-Packard. A complete list of IANA numbers can be found at Modified: openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_xml.c =================================================================== --- openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_xml.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ilo2_ribcl/ilo2_ribcl_xml.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -70,8 +70,8 @@ static int ir_xml_stat_to_reading( char *); static int ir_xml_scan_smbios_1( ilo2_ribcl_handler_t *, xmlNodePtr); static int ir_xml_scan_smbios_4( ilo2_ribcl_handler_t *, xmlNodePtr); -static int ir_xml_scan_smbios_17( ilo2_ribcl_handler_t *, xmlNodePtr); -static int ir_xml_record_memdata( ilo2_ribcl_handler_t *, char *, char *, +static int ir_xml_scan_smbios_17( ilo2_ribcl_handler_t *, xmlNodePtr, int *); +static int ir_xml_record_memdata( ilo2_ribcl_handler_t *, int *, char *, char *, char *); static xmlChar *ir_xml_smb_get_value( char *, xmlNodePtr); static int ir_xml_insert_logininfo( char *, int, char *, char *, char *); @@ -254,6 +254,7 @@ xmlDocPtr doc; xmlNodePtr h_node; xmlChar *typ; + int mem_slotindex; int ret; /* Convert the RIBCL command output into a single XML document, @@ -291,6 +292,7 @@ * all of them, rather that calling ir_xml_find_node() */ h_node = h_node->xmlChildrenNode; + mem_slotindex = 1; while( h_node != NULL){ @@ -311,7 +313,8 @@ } else if( !xmlStrcmp( typ, (const xmlChar *)"17")){ /* Scan type 17 node for memory */ ret = ir_xml_scan_smbios_17( ir_handler, - h_node); + h_node, + &mem_slotindex); } if( ret != RIBCL_SUCCESS){ @@ -404,6 +407,7 @@ xmlDocPtr doc; xmlNodePtr hd_node; xmlChar *typ; + int mem_slotindex; int ret; /* Convert the RIBCL command output into a single XML document, @@ -441,6 +445,7 @@ * all of them, rather that calling ir_xml_find_node() */ hd_node = hd_node->xmlChildrenNode; + mem_slotindex = 1; while( hd_node != NULL){ @@ -461,7 +466,8 @@ } else if( !xmlStrcmp( typ, (const xmlChar *)"17")){ /* Scan type 17 node for memory */ ret = ir_xml_scan_smbios_17( ir_handler, - hd_node); + hd_node, + &mem_slotindex); } if( ret != RIBCL_SUCCESS){ @@ -619,7 +625,8 @@ else { xmlFree( status); xmlFreeDoc( doc); - err("ir_xml_parse_uid_status(): Unkown UID status."); + err("ir_xml_parse_uid_status(): Unknown UID status : %s", + (char *)status); return(-1); } @@ -2117,6 +2124,7 @@ * ir_xml_scan_smbios_17 * @ir_handler: Ptr to this instance's custom handler. * @b_node: porinter to an SMBIOS_RECORD node of type 17. + * @mem_slotindex: pointer to an integer value for the current slot index. * * This routine will parse a SMBIOS_RECORD type 17 node, which should contain * memory DIMM information. We currently extract the label, size and speed. @@ -2134,7 +2142,8 @@ * Return value: RIBCL_SUCCESS if success, -1 if failure. **/ static int ir_xml_scan_smbios_17( ilo2_ribcl_handler_t *ir_handler, - xmlNodePtr b_node) + xmlNodePtr b_node, + int *mem_slotindex) { xmlChar *mem_label = NULL; @@ -2149,12 +2158,17 @@ if( xmlStrcmp( mem_size, (xmlChar *)"not installed") != 0 ){ - ret = ir_xml_record_memdata( ir_handler, (char *)mem_label, + /* Record data for a populated DIMM slot */ + ret = ir_xml_record_memdata( ir_handler, mem_slotindex, + (char *)mem_label, (char *)mem_size, (char *) mem_speed); } + /* Increment the slot index for both populated and unpopulated slots */ + (*mem_slotindex)++; + if( mem_label){ xmlFree( mem_label); } @@ -2174,6 +2188,7 @@ /** * ir_xml_record_memdata * @ir_handler: ptr to the ilo2_ribcl plugin private handler. + * @memcount: ptr to an int that contains a mem slot count. * @memlabel: string memory DIMM label from iLO2. * @memsize: string memory DIMM size from iLO2. * @memspeed: string memory DIMM speed from iLO2. @@ -2191,9 +2206,11 @@ * Return value: RIBCL_SUCCESS if success, -1 if failure. **/ static int ir_xml_record_memdata( ilo2_ribcl_handler_t *ir_handler, + int *memcount, char *memlabel, char *memsize, char *memspeed) { int dimmindex = 0; + int procindex = 0; int ret; ir_memdata_t *dimmdat; @@ -2204,10 +2221,27 @@ ret = sscanf( (char *)memlabel, "DIMM %d", &dimmindex); if( ret != 1){ - /* We didn't parse the DIMM label correctly */ - err("ir_xml_record_memdata: incorrect DIMM label string: %s", + + /* Try for an alternate format. We will also accept a label + * of the format 'PROC k DIMM nX' where k and n are integers + * and X is a capital letter. Since n may not be unique across + * all DIMMS, we will use the memcount parameter as the index + * for the DIMM. */ + + ret = sscanf( (char*)memlabel, "PROC %d DIMM %d", &procindex, + &dimmindex); + + /* In this case, we use the memory slot count passed to us via + * parameter memcount as the memory index. */ + dimmindex = *memcount; + + if( ret != 2){ + + /* We didn't parse the DIMM label correctly */ + err("ir_xml_record_memdata: incorrect DIMM label string: %s", memlabel); - return( -1); + return( -1); + } } /* The index for this DIMM should be between 1 and @@ -2436,8 +2470,12 @@ * * The libxml2 parser also doesn't like multiple occurences of the XML * header <?xml version=X.X ?>, so we filter those out as we encounter - * them druing the buffer copy. + * them during the buffer copy. * + * The DL380 G6 also has a <DRIVES> section that causes errors with the + * libxml2 parser. Since we don't use this information, we filter this out + * during the buffer copy as well. + * * Return value: Ptr to the new buffer on success, or NULL if failure. **/ @@ -2446,11 +2484,15 @@ int newsize; static char declmatch[] = "<?xml version="; + static char drives_start[] ="<DRIVES>"; + static char drives_end[] ="</DRIVES>"; static char prefix[] = "<RIBCL_RESPONSE_OUTPUT>"; static char suffix[] = "</RIBCL_RESPONSE_OUTPUT>"; int prefix_len = (int)strlen( prefix); int suffix_len = (int)strlen( suffix); int matchlen = (int)strlen( declmatch); + int drives_startlen = (int)(strlen(drives_start)); + int drives_endlen = (int)(strlen(drives_end)); char *newbuffer; char *retbuffer; @@ -2488,8 +2530,25 @@ oldbuffer++; /* Skip trailing '>' */ continue; } - } + /* Filter out <DRIVES>...</DRIVES> section */ + else if( strncmp( oldbuffer, drives_start, + drives_startlen) == 0){ + while( strncmp( oldbuffer, drives_end, + drives_endlen)){ + /* Unclosed XML decl - Error */ + if( *oldbuffer == '\0'){ + free( newbuffer); + return( NULL); + } + oldbuffer++; + } + oldbuffer += drives_endlen; + continue; + } + + } /* end if *oldbuffer == '<' */ + *newbuffer++ = *oldbuffer++; } Modified: openhpi/branches/2.14.x/plugins/ipmidirect/Makefile.am =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/Makefile.am 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ipmidirect/Makefile.am 2009-11-08 21:38:40 UTC (rev 7025) @@ -61,6 +61,8 @@ ipmi_control_atca_led.cpp \ ipmi_control_fan.h \ ipmi_control_fan.cpp \ + ipmi_control_sun_led.h \ + ipmi_control_sun_led.cpp \ ipmi_discover.h \ ipmi_discover.cpp \ ipmi_domain.h \ @@ -85,6 +87,8 @@ ipmi_mc_vendor_force.cpp \ ipmi_mc_vendor_intel.h \ ipmi_mc_vendor_intel.cpp \ + ipmi_mc_vendor_sun.h \ + ipmi_mc_vendor_sun.cpp \ ipmi_mc_vendor_fix_sdr.h \ ipmi_mc_vendor_fix_sdr.cpp \ ipmi_msg.h \ Modified: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.cpp =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.cpp 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -46,6 +46,7 @@ { "Storage " , eIpmiNetfnStorage }, { "Transport" , eIpmiNetfnTransport }, { "Picmg " , eIpmiNetfnPicmg }, + { "Oem" , eIpmiNetfnOem }, { 0, 0 } }; Modified: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.h =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_cmd.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -259,7 +259,9 @@ eIpmiNetfnTransport = 0x0c, eIpmiNetfnTransportRsp = 0x0d, eIpmiNetfnPicmg = 0x2c, - eIpmiNetfnPicmgRsp = 0x2d + eIpmiNetfnPicmgRsp = 0x2d, + eIpmiNetfnOem = 0x2e, + eIpmiNetfnOemRsp = 0x2f }; const char *IpmiNetfnToString( tIpmiNetfn netfn ); Copied: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.cpp (from rev 7024, openhpi/trunk/plugins/ipmidirect/ipmi_control_sun_led.cpp) =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.cpp (rev 0) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2009 by Sun Microsystems, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This + * file and program are licensed under a BSD style license. See + * the Copying file included with the OpenHPI distribution for + * full licensing terms. + * + * Authors: + * Chris Rinaldo <chr...@su...> + */ + +#include "ipmi_control_sun_led.h" +#include "ipmi_resource.h" + +cIpmiControlSunLed::cIpmiControlSunLed(cIpmiMc* mc, unsigned int num, + uint8_t dev_access_addr, uint8_t dev_slave_addr, uint8_t entity_id, + uint8_t entity_inst, uint8_t oem, SaHpiBoolT read_only) : + cIpmiControl(mc, num, SAHPI_CTRL_LED, SAHPI_CTRL_TYPE_OEM), + m_dev_access_addr(dev_access_addr), m_dev_slave_addr(dev_slave_addr), + m_entity_id(entity_id), m_entity_inst(entity_inst), m_oem(oem), + m_read_only(read_only) +{ +} + +cIpmiControlSunLed::~cIpmiControlSunLed() +{ +} + +bool +cIpmiControlSunLed::CreateRdr(SaHpiRptEntryT& resource, SaHpiRdrT& rdr) +{ + if (cIpmiControl::CreateRdr(resource, rdr) == false) + return false; + + rdr.RdrTypeUnion.CtrlRec.OutputType = SAHPI_CTRL_LED; + rdr.RdrTypeUnion.CtrlRec.Type = SAHPI_CTRL_TYPE_OEM; + rdr.RdrTypeUnion.CtrlRec.TypeUnion.Oem.MId = 0x2a; + rdr.RdrTypeUnion.CtrlRec.TypeUnion.Oem.ConfigData[0] = m_oem; + rdr.RdrTypeUnion.CtrlRec.TypeUnion.Oem.Default.MId = 0x2a; + rdr.RdrTypeUnion.CtrlRec.TypeUnion.Oem.Default.BodyLength = 1; + rdr.RdrTypeUnion.CtrlRec.TypeUnion.Oem.Default.Body[0] = 0; + rdr.RdrTypeUnion.CtrlRec.DefaultMode.Mode = SAHPI_CTRL_MODE_AUTO; + rdr.RdrTypeUnion.CtrlRec.DefaultMode.ReadOnly = m_read_only; + rdr.RdrTypeUnion.CtrlRec.WriteOnly = SAHPI_FALSE; + + return true; +} + +SaErrorT +cIpmiControlSunLed::GetState(SaHpiCtrlModeT& mode, SaHpiCtrlStateT& state) +{ + mode = SAHPI_CTRL_MODE_AUTO; + + state.Type = SAHPI_CTRL_TYPE_OEM; + + cIpmiMsg ledmsg(eIpmiNetfnOem, eIpmiCmdSunOemLedGet); + ledmsg.m_data[0] = m_dev_slave_addr; + ledmsg.m_data[1] = m_oem; + ledmsg.m_data[2] = m_dev_access_addr; + ledmsg.m_data[3] = m_oem; + ledmsg.m_data[4] = m_entity_id; + ledmsg.m_data[5] = m_entity_inst; + ledmsg.m_data[6] = 0; + ledmsg.m_data_len = 7; + + cIpmiMsg ledrsp; + SaErrorT rv = Resource()->SendCommandReadLock(this, ledmsg, ledrsp); + + if (rv != SA_OK) + return rv; + + if (ledrsp.m_data_len != 2 || ledrsp.m_data[0] != eIpmiCcOk) + return SA_ERR_HPI_ERROR; + + state.StateUnion.Oem.MId = 0x2a; + state.StateUnion.Oem.BodyLength = 1; + state.StateUnion.Oem.Body[0] = ledrsp.m_data[1]; + + return SA_OK; +} + +SaErrorT +cIpmiControlSunLed::SetState(const SaHpiCtrlModeT& mode, + const SaHpiCtrlStateT& state) +{ + if (state.StateUnion.Oem.Body[0] > eLedStateFastBlink) + { + return SA_ERR_HPI_INVALID_DATA; + } + + cIpmiMsg ledmsg(eIpmiNetfnOem, eIpmiCmdSunOemLedSet); + ledmsg.m_data[0] = m_dev_slave_addr; + ledmsg.m_data[1] = m_oem; + ledmsg.m_data[2] = m_dev_access_addr; + ledmsg.m_data[3] = m_oem; + ledmsg.m_data[4] = state.StateUnion.Oem.Body[0]; // mode + ledmsg.m_data[5] = m_entity_id; + ledmsg.m_data[6] = m_entity_inst; + ledmsg.m_data[7] = 0; // force + ledmsg.m_data[8] = 0; // role + ledmsg.m_data_len = 9; + + cIpmiMsg ledrsp; + SaErrorT rv = Resource()->SendCommandReadLock(this, ledmsg, ledrsp); + + if (rv != SA_OK) + return rv; + + if (ledrsp.m_data[0] == eIpmiCcInvalidCmd) + return SA_ERR_HPI_UNSUPPORTED_PARAMS; + + if (ledrsp.m_data[0] == eIpmiCcInsufficientPrivilege) + return SA_ERR_HPI_READ_ONLY; + + if (ledrsp.m_data[0] != eIpmiCcOk) + return SA_ERR_HPI_ERROR; + + return SA_OK; +} + +void +cIpmiControlSunLed::Dump(cIpmiLog& dump, const char* name) const +{ + dump.Begin("Sun LED", name); + dump.End(); +} Copied: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.h (from rev 7024, openhpi/trunk/plugins/ipmidirect/ipmi_control_sun_led.h) =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.h (rev 0) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_control_sun_led.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2009 by Sun Microsystems, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This + * file and program are licensed under a BSD style license. See + * the Copying file included with the OpenHPI distribution for + * full licensing terms. + * + * Authors: + * Chris Rinaldo <chr...@su...> + */ + +#ifndef dIpmiControlSunLed_h +#define dIpmiControlSunLed_h + +#include <stdint.h> +#include "ipmi_control.h" +#include "ipmi_log.h" +#include "ipmi_mc.h" +#include "SaHpi.h" + +class cIpmiControlSunLed : public cIpmiControl +{ +protected: + uint8_t m_dev_access_addr; + uint8_t m_dev_slave_addr; + uint8_t m_entity_id; + uint8_t m_entity_inst; + uint8_t m_oem; + SaHpiBoolT m_read_only; + +public: + cIpmiControlSunLed(cIpmiMc *mc, unsigned int num, uint8_t dev_access_addr, + uint8_t dev_slave_addr, uint8_t entity_id, uint8_t entity_inst, + uint8_t oem, SaHpiBoolT read_only); + virtual ~cIpmiControlSunLed(); + + virtual bool CreateRdr(SaHpiRptEntryT &resource, SaHpiRdrT &rdr); + + virtual SaErrorT SetState(const SaHpiCtrlModeT &mode, + const SaHpiCtrlStateT &state); + virtual SaErrorT GetState(SaHpiCtrlModeT &mode, SaHpiCtrlStateT &state); + + virtual void Dump(cIpmiLog &dump, const char *name) const; + +private: + static const tIpmiCmd eIpmiCmdSunOemLedGet = static_cast<tIpmiCmd> (0x21); + static const tIpmiCmd eIpmiCmdSunOemLedSet = static_cast<tIpmiCmd> (0x22); + + enum tLedState + { + eLedStateOff, + eLedStateOn, + eLedStateStandByBlink, + eLedStateSlowBlink, + eLedStateFastBlink + }; +}; + +#endif + Modified: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor.cpp =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor.cpp 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -26,6 +26,7 @@ #include "ipmi_mc_vendor.h" #include "ipmi_mc_vendor_force.h" #include "ipmi_mc_vendor_intel.h" +#include "ipmi_mc_vendor_sun.h" #include "ipmi_mc_vendor_fix_sdr.h" #include "ipmi_domain.h" #include "ipmi_control_fan.h" @@ -83,6 +84,8 @@ m_factory->Register( new cIpmiMcVendorIntelBmc( 0x0900 ) ); /*HSC*/ m_factory->Register( new cIpmiMcVendorIntelBmc( 0x0911 ) ); /*HSC*/ m_factory->Register( new cIpmiMcVendorIntelBmc( 0x0A0C ) ); /*HSC*/ + // Sun BMC specific stuff + m_factory->Register( new cIpmiMcVendorSunBmc( 0x4701 ) ); // Enabling this code will fix badly formed SDR // found on various boards tested with the plugin Copied: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.cpp (from rev 7024, openhpi/trunk/plugins/ipmidirect/ipmi_mc_vendor_sun.cpp) =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.cpp (rev 0) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.cpp 2009-11-08 21:38:40 UTC (rev 7025) @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2009 by Sun Microsystems, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This + * file and program are licensed under a BSD style license. See + * the Copying file included with the OpenHPI distribution for + * full licensing terms. + * + * Authors: + * Chris Rinaldo <chr...@su...> + */ + +#include <string> +#include "ipmi_control_sun_led.h" +#include "ipmi_entity.h" +#include "ipmi_log.h" +#include "ipmi_mc_vendor.h" +#include "ipmi_mc_vendor_sun.h" +#include "ipmi_resource.h" +#include "ipmi_sdr.h" +#include "ipmi_text_buffer.h" +#include "SaHpi.h" + +cIpmiMcVendorSunBmc::cIpmiMcVendorSunBmc(unsigned int product_id) : + cIpmiMcVendor(0x2a, product_id, "Sun BMC") +{ +} + +cIpmiMcVendorSunBmc::~cIpmiMcVendorSunBmc() +{ +} + +bool +cIpmiMcVendorSunBmc::InitMc(cIpmiMc *mc, const cIpmiMsg &dvid) +{ + stdlog << "Sun BMC Init[" << mc->ManufacturerId() << "," + << mc->ProductId() << "]: addr = " << mc->GetAddress() << "\n"; + + mc->IsRmsBoard() = true; + + return true; +} + +bool +cIpmiMcVendorSunBmc::CreateControls(cIpmiDomain *dom, cIpmiMc *mc, + cIpmiSdrs *sdrs) +{ + cIpmiSdr *sdr; + + for (unsigned int i = 0; i < sdrs->NumSdrs(); i++) + { + sdr = sdrs->Sdr(i); + + if (sdr->m_type != eSdrTypeGenericDeviceLocatorRecord) continue; + + SaHpiEntityTypeT type = (SaHpiEntityTypeT) sdr->m_data[12]; + SaHpiEntityLocationT instance = (SaHpiEntityLocationT) sdr->m_data[13]; + SaHpiEntityTypeT parent_type; + SaHpiEntityLocationT parent_instance; + + unsigned int parent_fru_id; + parent_fru_id = sdrs->FindParentFru(type, instance, parent_type, + parent_instance); + + cIpmiResource *res = FindResource(dom, mc, parent_fru_id, parent_type, + parent_instance, sdrs); + + uint8_t dev_slave_addr = sdr->m_data[6]; + uint8_t dev_access_addr = sdr->m_data[5]; + uint8_t oem = sdr->m_data[14]; + uint8_t entity_id = sdr->m_data[12]; + uint8_t entity_inst = sdr->m_data[13]; + + cIpmiTextBuffer tb; + tb.SetIpmi(sdr->m_data + 15); + char id[16]; + tb.GetAscii(id, sizeof (id)); + + cIpmiControlSunLed *led = new cIpmiControlSunLed(mc, i, + dev_access_addr, dev_slave_addr, entity_id, entity_inst, oem, + SAHPI_FALSE); + led->EntityPath() = res->EntityPath(); + led->IdString().SetAscii(id, SAHPI_TL_TYPE_TEXT, SAHPI_LANG_ENGLISH); + res->AddRdr(led); + } + + return true; +} Copied: openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.h (from rev 7024, openhpi/trunk/plugins/ipmidirect/ipmi_mc_vendor_sun.h) =================================================================== --- openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.h (rev 0) +++ openhpi/branches/2.14.x/plugins/ipmidirect/ipmi_mc_vendor_sun.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2009 by Sun Microsystems, Inc. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. This + * file and program are licensed under a BSD style license. See + * the Copying file included with the OpenHPI distribution for + * full licensing terms. + * + * Authors: + * Chris Rinaldo <chr...@su...> + */ + +#ifndef dIpmiMcVendorSun_h +#define dIpmiMcVendorSun_h + +#include "ipmi_control.h" +#include "ipmi_mc.h" +#include "ipmi_mc_vendor.h" + +class cIpmiMcVendorSunBmc : public cIpmiMcVendor +{ +public: + cIpmiMcVendorSunBmc(unsigned int product_id); + virtual ~cIpmiMcVendorSunBmc(); + + virtual bool InitMc(cIpmiMc *mc, const cIpmiMsg &devid); + bool CreateControls(cIpmiDomain *domain, cIpmiMc *mc, cIpmiSdrs *sdrs); +}; + +#endif Modified: openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.c =================================================================== --- openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2008, Hewlett-Packard Development Company, LLP + * Copyright (C) 2007-2009, Hewlett-Packard Development Company, LLP * All rights reserved. * * Redistribution and use in source and binary forms, with or @@ -34,6 +34,7 @@ * Raja Kumar Thatte <raj...@hp...> * Sudesh Acharya <sud...@hp...> * Vivek Kumar <viv...@hp...> + * Mohan Devarajulu <mo...@fc...> * * This file implements the entry point of the oa soap plug-in. This handles * customer handler for oa soap interface for handling the any request for soap @@ -121,6 +122,7 @@ oa_handler->mutex = g_mutex_new(); oa_handler->oa_1 = NULL; oa_handler->oa_2 = NULL; + oa_handler->oa_switching=SAHPI_FALSE; oa_handler->shutdown_event_thread = SAHPI_FALSE; /* Initialize the oa_info structure */ Modified: openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.h =================================================================== --- openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.h 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/oa_soap/oa_soap.h 2009-11-08 21:38:40 UTC (rev 7025) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2008, Hewlett-Packard Development Company, LLP + * Copyright (C) 2007-2009, Hewlett-Packard Development Company, LLP * All rights reserved. * * Redistribution and use in source and binary forms, with or @@ -34,6 +34,7 @@ * Raja Kumar Thatte <raj...@hp...> * Vivek Kumar <viv...@hp...> * Shuah Khan <shu...@hp...> + * Mohan Devarajulu <mo...@fc...> */ #ifndef _OA_SOAP_H @@ -134,9 +135,9 @@ #define OA_2_21 2.21 /* OA switchover re-try wait period */ -#define WAIT_ON_SWITCHOVER 1 +#define WAIT_ON_SWITCHOVER 10 /* OA switchover max re-try */ -#define MAX_RETRY_ON_SWITCHOVER 1 +#define MAX_RETRY_ON_SWITCHOVER 10 /* Enum for storing the status of the plugin */ enum oa_soap_plugin_status { @@ -202,6 +203,7 @@ /* Type of the enclsoure */ SaHpiInt32T enc_type; SaHpiBoolT shutdown_event_thread; + SaHpiInt32T oa_switching; GMutex *mutex; }; Modified: openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_callsupport.c =================================================================== --- openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_callsupport.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_callsupport.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2008, Hewlett-Packard Development Company, LLP + * Copyright (C) 2007-2009, Hewlett-Packard Development Company, LLP * All rights reserved. * * Redistribution and use in source and binary forms, with or @@ -30,6 +30,7 @@ * * Author(s) * Bryan Sutula <Bry...@hp...> + * Mohan Devarajulu <mo...@fc...> * * * This file implements support functions that are used to perform SOAP @@ -530,7 +531,7 @@ /* Login to the OA, saving session information */ if (soap_login(connection)) { - err("OA login failed"); + err("OA login failed for server %s", connection->server); if (oh_ssl_ctx_free(connection->ctx)) { err("oh_ssl_ctx_free() failed"); } @@ -1095,7 +1096,7 @@ */ if (! connection->session_id[0]) { if (soap_login(connection)) { - err("OA login failed"); + err("OA login failed in soap call"); return(-1); } } /* If we don't have a session key */ Modified: openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_event.c =================================================================== --- openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_event.c 2009-11-06 23:40:20 UTC (rev 7024) +++ openhpi/branches/2.14.x/plugins/oa_soap/oa_soap_event.c 2009-11-08 21:38:40 UTC (rev 7025) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2008, Hewlett-Packard Development Company, LLP + * Copyright (C) 2007-2009, Hewlett-Packard Development Company, LLP * All rights reserved. * * Redistribution and use in source and binary forms, with or @@ -30,6 +30,7 @@ * * Author(s) * Raghavendra P.G. <rag...@hp...> + * Mohan Devarajulu <mo...@fc...> * * This file is having the code for handling the events which * are coming from OA. @@ -157,6 +158,20 @@ } } + /* If the OA server is NULL, do not even try to open the connection + just get out */ + if (!strcmp(oa->server,"")) { + err("oa->server is NULL. Exiting the thread"); + g_thread_exit((gpointer *)NULL); + } + + /* The following is an workaround for an OA bug, where the IP is + returned as 0.0.0.0 Just quit in that case also */ + if (!strcmp(oa->server,"0.0.0.0")) { + err("OA returned IP is 0.0.0.0."); + g_thread_exit((gpointer *)NULL); + } + /* Check whether OA Status is ABSENT * If yes, wait till the OA status becomes ACTIVE or STANDBY */ @@ -199,7 +214,7 @@ OA_SOAP_CHEK_SHUTDOWN_REQ(oa_handler, NULL... [truncated message content] |