diff options
Diffstat (limited to 'lib/ipmi_sel.c')
-rw-r--r-- | lib/ipmi_sel.c | 89 |
1 files changed, 53 insertions, 36 deletions
diff --git a/lib/ipmi_sel.c b/lib/ipmi_sel.c index 67e12e3..5df66a7 100644 --- a/lib/ipmi_sel.c +++ b/lib/ipmi_sel.c @@ -91,15 +91,22 @@ static int ipmi_sel_oem_readval(char *str) * reference to byte positions instead of array indexes which (hopefully) * helps make the code easier to read. */ -static int ipmi_sel_oem_match(uint8_t *evt, struct ipmi_sel_oem_msg_rec rec) +static int +ipmi_sel_oem_match(uint8_t *evt, const struct ipmi_sel_oem_msg_rec *rec) { - if (evt[2] == rec.value[SEL_BYTE(3)] && - ((rec.value[SEL_BYTE(4)] < 0) || (evt[3] == rec.value[SEL_BYTE(4)])) && - ((rec.value[SEL_BYTE(5)] < 0) || (evt[4] == rec.value[SEL_BYTE(5)])) && - ((rec.value[SEL_BYTE(6)] < 0) || (evt[5] == rec.value[SEL_BYTE(6)])) && - ((rec.value[SEL_BYTE(7)] < 0) || (evt[6] == rec.value[SEL_BYTE(7)])) && - ((rec.value[SEL_BYTE(11)] < 0) || (evt[10] == rec.value[SEL_BYTE(11)])) && - ((rec.value[SEL_BYTE(12)] < 0) || (evt[11] == rec.value[SEL_BYTE(12)]))) { + if (evt[2] == rec->value[SEL_BYTE(3)] + && ((rec->value[SEL_BYTE(4)] < 0) + || (evt[3] == rec->value[SEL_BYTE(4)])) + && ((rec->value[SEL_BYTE(5)] < 0) + || (evt[4] == rec->value[SEL_BYTE(5)])) + && ((rec->value[SEL_BYTE(6)] < 0) + || (evt[5] == rec->value[SEL_BYTE(6)])) + && ((rec->value[SEL_BYTE(7)] < 0) + || (evt[6] == rec->value[SEL_BYTE(7)])) + && ((rec->value[SEL_BYTE(11)] < 0) + || (evt[10] == rec->value[SEL_BYTE(11)])) + && ((rec->value[SEL_BYTE(12)] < 0) + || (evt[11] == rec->value[SEL_BYTE(12)]))) { return 1; } else { return 0; @@ -191,7 +198,7 @@ static void ipmi_sel_oem_message(struct sel_event_record * evt, int verbose) int i, j; for (i=0; i < sel_oem_nrecs; i++) { - if (ipmi_sel_oem_match((uint8_t *)evt, sel_oem_msg[i])) { + if (ipmi_sel_oem_match((uint8_t *)evt, &sel_oem_msg[i])) { printf (csv_output ? ",\"%s\"" : " | %s", sel_oem_msg[i].text); for (j=4; j<17; j++) { if (sel_oem_msg[i].value[SEL_BYTE(j)] == -3) { @@ -531,12 +538,10 @@ get_supermicro_evt_desc(struct ipmi_intf *intf, struct sel_event_record *rec) struct ipmi_rs *rsp; struct ipmi_rq req; char *desc = NULL; - char *str; int chipset_type = 1; int data1; int data2; int data3; - int length; int sensor_type; uint8_t i = 0; uint16_t oem_id = 0; @@ -551,12 +556,12 @@ get_supermicro_evt_desc(struct ipmi_intf *intf, struct sel_event_record *rec) return NULL; } /* Allocate mem for te Description string */ - desc = (char *)malloc(SIZE_OF_DESC); + desc = malloc(sizeof(char) * SIZE_OF_DESC); if (desc == NULL) { lprintf(LOG_ERR, "ipmitool: malloc failure"); return NULL; } - memset(desc,0,SIZE_OF_DESC); + memset(desc, '\0', SIZE_OF_DESC); sensor_type = rec->sel_type.standard_type.sensor_type; switch (sensor_type) { case SENSOR_TYPE_MEMORY: @@ -587,17 +592,19 @@ get_supermicro_evt_desc(struct ipmi_intf *intf, struct sel_event_record *rec) /* check the chipset type */ oem_id = ipmi_get_oem_id(intf); if (oem_id == 0) { + if (desc != NULL) { + free(desc); + desc = NULL; + } return NULL; } - length = sizeof(supermicro_X8); - for (i = 0; i < length; i++) { + for (i = 0; supermicro_X8[i] != 0xFFFF; i++) { if (oem_id == supermicro_X8[i]) { chipset_type = 0; break; } } - length = sizeof(supermicro_x9); - for (i = 0; i < length; i++) { + for (i = 0; supermicro_x9[i] != 0xFFFF; i++) { if (oem_id == supermicro_x9[i]) { chipset_type = 2; break; @@ -616,7 +623,8 @@ get_supermicro_evt_desc(struct ipmi_intf *intf, struct sel_event_record *rec) (data2 >> 4) + 0x40 + (data3 & 0x3) * 3, (data2 & 0xf) + 0x27, (data3 & 0x03) + 1); } else { - snprintf(desc, SIZE_OF_DESC, ""); + /* No description. */ + desc[0] = '\0'; } break; case SENSOR_TYPE_SUPERMICRO_OEM: @@ -650,17 +658,13 @@ char * get_dell_evt_desc(struct ipmi_intf * intf, struct sel_event_record * rec) unsigned char count; unsigned char node; - unsigned char num; unsigned char dimmNum; unsigned char dimmsPerNode; char dimmStr[MAX_DIMM_STR]; - char cardStr[MAX_CARD_STR]; - char numStr[MAX_CARDNO_STR]; char tmpdesc[SIZE_OF_DESC]; char* str; unsigned char incr = 0; unsigned char i=0,j = 0; - unsigned char postCode; struct ipmi_rs *rsp; struct ipmi_rq req; char tmpData; @@ -1234,6 +1238,8 @@ ipmi_get_event_desc(struct ipmi_intf * intf, struct sel_event_record * rec, char sfx = ipmi_get_oem_desc(intf, rec); break; /* add your oem sensor assignation here */ + default: + break; } if( evt == NULL ){ lprintf(LOG_DEBUG, "oem sensor type %x using standard type supplied description", @@ -1247,6 +1253,8 @@ ipmi_get_event_desc(struct ipmi_intf * intf, struct sel_event_record * rec, char code = rec->sel_type.standard_type.sensor_type; sfx = ipmi_get_oem_desc(intf, rec); break; + default: + break; } } if( evt == NULL ){ @@ -1915,6 +1923,8 @@ ipmi_sel_print_std_entry(struct ipmi_intf * intf, struct sel_event_record * evt) case IPMI_OEM_SUPERMICRO_47488: print_sensor = 0; break; + default: + break; } /* * Sensor-Specific Discrete @@ -2832,7 +2842,6 @@ ipmi_sel_delete(struct ipmi_intf * intf, int argc, char ** argv) for (; argc != 0; argc--) { - id = (uint16_t) strtoul(argv[argc-1], NULL, 0); if (str2ushort(argv[argc-1], &id) != 0) { lprintf(LOG_ERR, "Given SEL ID '%s' is invalid.", argv[argc-1]); @@ -2869,25 +2878,27 @@ ipmi_sel_delete(struct ipmi_intf * intf, int argc, char ** argv) static int ipmi_sel_show_entry(struct ipmi_intf * intf, int argc, char ** argv) { - uint16_t id; - int i, oldv; - struct sel_event_record evt; - struct sdr_record_list * sdr; struct entity_id entity; - struct sdr_record_list * list, * entry; + struct sdr_record_list *entry; + struct sdr_record_list *list; + struct sdr_record_list *sdr; + struct sel_event_record evt; + int i; + int oldv; int rc = 0; + uint16_t id; if (argc == 0 || strncmp(argv[0], "help", 4) == 0) { lprintf(LOG_ERR, "usage: sel get <id>...<id>"); - return -1; + return (-1); } if (ipmi_sel_reserve(intf) == 0) { lprintf(LOG_ERR, "Unable to reserve SEL"); - return -1; + return (-1); } - for (i=0; i<argc; i++) { + for (i = 0; i < argc; i++) { if (str2ushort(argv[i], &id) != 0) { lprintf(LOG_ERR, "Given SEL ID '%s' is invalid.", argv[i]); @@ -2903,23 +2914,28 @@ ipmi_sel_show_entry(struct ipmi_intf * intf, int argc, char ** argv) rc = (-1); continue; } - if (evt.sel_type.standard_type.sensor_num == 0 && evt.sel_type.standard_type.sensor_type == 0 && evt.record_type == 0) { + if (evt.sel_type.standard_type.sensor_num == 0 + && evt.sel_type.standard_type.sensor_type == 0 + && evt.record_type == 0) { lprintf(LOG_WARN, "SEL Entry 0x%x not found", id); - rc = -1; + rc = (-1); continue; } /* lookup SDR entry based on sensor number and type */ ipmi_sel_print_extended_entry_verbose(intf, &evt); - sdr = ipmi_sdr_find_sdr_bynumtype(intf, evt.sel_type.standard_type.gen_id, evt.sel_type.standard_type.sensor_num, evt.sel_type.standard_type.sensor_type); + sdr = ipmi_sdr_find_sdr_bynumtype(intf, + evt.sel_type.standard_type.gen_id, + evt.sel_type.standard_type.sensor_num, + evt.sel_type.standard_type.sensor_type); if (sdr == NULL) { continue; } /* print SDR entry */ oldv = verbose; - verbose = verbose ? : 1; + verbose = verbose ? verbose : 1; switch (sdr->type) { case SDR_RECORD_TYPE_FULL_SENSOR: case SDR_RECORD_TYPE_COMPACT_SENSOR: @@ -2947,8 +2963,9 @@ ipmi_sel_show_entry(struct ipmi_intf * intf, int argc, char ** argv) ipmi_fru_print(intf, entry->record.fruloc); } - if ((argc > 1) && (i<(argc-1))) + if ((argc > 1) && (i < (argc - 1))) { printf("----------------------\n\n"); + } } return rc; |