diff --git a/ipmitool/include/ipmitool/Makefile.am b/ipmitool/include/ipmitool/Makefile.am index 99c46b1..ba49c21 100644 --- a/ipmitool/include/ipmitool/Makefile.am +++ b/ipmitool/include/ipmitool/Makefile.am @@ -38,5 +38,5 @@ ipmitooldir = $(includedir)/ipmitool ipmitool_HEADERS = bswap.h helper.h ipmi.h ipmi_intf.h \ ipmi_chassis.h ipmi_entity.h ipmi_fru.h ipmi_lanp.h \ - ipmi_sdr.h ipmi_sel.h ipmi_sol.h ipmi_bmc.h + ipmi_sdr.h ipmi_sel.h ipmi_sol.h ipmi_bmc.h ipmi_sensor.h diff --git a/ipmitool/include/ipmitool/ipmi_sdr.h b/ipmitool/include/ipmitool/ipmi_sdr.h index 87e17db..249179b 100644 --- a/ipmitool/include/ipmitool/ipmi_sdr.h +++ b/ipmitool/include/ipmitool/ipmi_sdr.h @@ -436,5 +436,10 @@ struct ipmi_sdr_iterator * ipmi_sdr_start(struct ipmi_intf * intf); struct sdr_get_rs * ipmi_sdr_get_next_header(struct ipmi_intf * intf, struct ipmi_sdr_iterator * i); unsigned char * ipmi_sdr_get_record(struct ipmi_intf * intf, struct sdr_get_rs * header, struct ipmi_sdr_iterator * i); void ipmi_sdr_end(struct ipmi_intf * intf, struct ipmi_sdr_iterator * i); +void ipmi_sdr_print_sdr(struct ipmi_intf * intf, unsigned char type); +const char * ipmi_sdr_get_status(unsigned char stat); +float sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor, unsigned char val); +struct ipmi_rs * ipmi_sdr_get_sensor_reading(struct ipmi_intf * intf, unsigned char sensor); + #endif /* IPMI_SDR_H */ diff --git a/ipmitool/lib/Makefile.am b/ipmitool/lib/Makefile.am index 1defdc3..31ae171 100644 --- a/ipmitool/lib/Makefile.am +++ b/ipmitool/lib/Makefile.am @@ -37,7 +37,8 @@ MAINTAINERCLEANFILES = Makefile.in noinst_LTLIBRARIES = libipmitool.la libipmitool_la_SOURCES = helper.c ipmi_sdr.c ipmi_sel.c ipmi_sol.c ipmi_lanp.c \ - ipmi_fru.c ipmi_chassis.c ipmi_bmc.c ipmi_intf.c dimm_spd.c + ipmi_fru.c ipmi_chassis.c ipmi_bmc.c ipmi_intf.c dimm_spd.c \ + ipmi_sensor.c libipmitool_la_LDFLAGS = -export-dynamic libipmitool_la_LIBADD = -lm $(LIBLTDL) libipmitool_la_DEPENDENCIES = $(LIBLTDL) diff --git a/ipmitool/lib/ipmi_sdr.c b/ipmitool/lib/ipmi_sdr.c index 00a4db3..090bf55 100644 --- a/ipmitool/lib/ipmi_sdr.c +++ b/ipmitool/lib/ipmi_sdr.c @@ -55,7 +55,7 @@ int utos(unsigned val, unsigned bits) else return val; } -static float +float sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor, unsigned char val) { int m, b, k1, k2; @@ -88,7 +88,7 @@ sdr_convert_sensor_reading(struct sdr_record_full_sensor * sensor, unsigned char #define GET_SENSOR_THRES 0x27 #define GET_SENSOR_TYPE 0x2f -static inline struct ipmi_rs * +struct ipmi_rs * ipmi_sdr_get_sensor_reading(struct ipmi_intf * intf, unsigned char sensor) { struct ipmi_rs * rsp; @@ -117,7 +117,7 @@ ipmi_sdr_get_sensor_type_desc(const unsigned char type) return "OEM reserved"; } -static const char * +const char * ipmi_sdr_get_status(unsigned char stat) { /* cr = critical @@ -187,7 +187,7 @@ ipmi_sdr_get_next_header(struct ipmi_intf * intf, struct ipmi_sdr_iterator * itr { struct sdr_get_rs *header; - if (itr->next >= itr->total) + if (itr->next > itr->total) return NULL; if (!(header = ipmi_sdr_get_header(intf, itr->reservation, itr->next))) @@ -232,7 +232,7 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf * intf, rsp = ipmi_sdr_get_sensor_reading(intf, sensor->keys.sensor_num); if (!rsp) { - printf("Error reading sensor %d\n", sensor->keys.sensor_num); + printf("Error reading sensor %s (#%02x)\n", desc, sensor->keys.sensor_num); return; } @@ -242,7 +242,8 @@ ipmi_sdr_print_sensor_full(struct ipmi_intf * intf, val = 0.0; validread = 0; } else { - printf("Error reading sensor %d, %s\n", + printf("Error reading sensor %s (#%02x), %s\n", + desc, sensor->keys.sensor_num, val2str(rsp->ccode, completion_code_vals)); return; @@ -751,7 +752,7 @@ ipmi_sdr_print_fru_locator(struct ipmi_intf * intf, printf("\n"); } -static void +void ipmi_sdr_print_sdr(struct ipmi_intf * intf, unsigned char type) { struct sdr_get_rs * header; diff --git a/ipmitool/src/ipmitool.c b/ipmitool/src/ipmitool.c index 5e849b5..6f34107 100644 --- a/ipmitool/src/ipmitool.c +++ b/ipmitool/src/ipmitool.c @@ -55,6 +55,7 @@ #include #include #include +#include struct ipmi_session lan_session; int csv_output = 0; @@ -350,6 +351,9 @@ int main(int argc, char ** argv) else if (!strncmp(argv[optind], "sel", 3)) { submain = ipmi_sel_main; } + else if (!strncmp(argv[optind], "sensor", 6)) { + submain = ipmi_sensor_main; + } else if (!strncmp(argv[optind], "sol", 3)) { submain = ipmi_sol_main; }