diff -up nut-2.6.5/drivers/nut-libfreeipmi.c.ipmifix nut-2.6.5/drivers/nut-libfreeipmi.c --- nut-2.6.5/drivers/nut-libfreeipmi.c.ipmifix 2012-07-31 19:38:59.000000000 +0200 +++ nut-2.6.5/drivers/nut-libfreeipmi.c 2012-09-04 09:42:48.000000000 +0200 @@ -49,6 +49,36 @@ #include "nut-ipmi.h" #include "dstate.h" +#ifdef HAVE_FREEIPMI_11X_12X +#define ipmi_fru_parse_ctx_t ipmi_fru_ctx_t +#define nut_ipmi_fru_parse_close_device_id nut_ipmi_fru_close_device_id +#define nut_ipmi_fru_parse_ctx_destroy nut_ipmi_fru_ctx_destroy +#define nut_ipmi_fru_parse_ctx_create nut_ipmi_fru_ctx_create +#define nut_ipmi_fru_parse_ctx_set_flags nut_ipmi_fru_ctx_set_flags +#define nut_ipmi_fru_parse_open_device_id nut_ipmi_fru_open_device_id +#define nut_ipmi_fru_parse_ctx_errormsg nut_ipmi_fru_ctx_errormsg +#define nut_ipmi_fru_parse_next nut_ipmi_fru_next +#define IPMI_FRU_PARSE_AREA_SIZE_MAX IPMI_FRU_AREA_SIZE_MAX +#define IPMI_FRU_PARSE_FLAGS_SKIP_CHECKSUM_CHECKS IPMI_FRU_FLAGS_SKIP_CHECKSUM_CHECKS +#define IPMI_FRU_PARSE_AREA_TYPE_MULTIRECORD_POWER_SUPPLY_INFORMATION IPMI_FRU_AREA_TYPE_MULTIRECORD_POWER_SUPPLY_INFORMATION +#define IPMI_FRU_PARSE_AREA_TYPE_BOARD_INFO_AREA IPMI_FRU_AREA_TYPE_BOARD_INFO_AREA +#define ipmi_fru_parse_field_t ipmi_fru_field_t +#define ipmi_fru_parse_ctx_create ipmi_fru_ctx_create +#define ipmi_fru_parse_ctx_set_flags ipmi_fru_ctx_set_flags +#define ipmi_fru_parse_ctx_strerror ipmi_fru_ctx_strerror +#define ipmi_fru_parse_ctx_errnum ipmi_fru_ctx_errnum +#define ipmi_fru_parse_open_device_id ipmi_fru_open_device_id +#define ipmi_fru_parse_ctx_errormsg ipmi_fru_ctx_errormsg +#define ipmi_fru_parse_read_data_area ipmi_fru_read_data_area +#define ipmi_fru_parse_type_length_field_to_string ipmi_fru_type_length_field_to_string +#define ipmi_fru_parse_close_device_id ipmi_fru_close_device_id +#define ipmi_fru_parse_ctx_destroy ipmi_fru_ctx_destroy +#define ipmi_fru_parse_multirecord_power_supply_information ipmi_fru_multirecord_power_supply_information +#define ipmi_fru_parse_board_info_area ipmi_fru_board_info_area +#define ipmi_fru_parse_next ipmi_fru_next +#define IPMI_FRU_PARSE_AREA_STRING_MAX IPMI_FRU_AREA_STRING_MAX +#endif + /* FreeIPMI defines */ #define IPMI_FRU_STR_BUFLEN 1024 /* haven't seen a motherboard with more than 2-3 so far, diff -up nut-2.6.5/m4/nut_check_libfreeipmi.m4.ipmifix nut-2.6.5/m4/nut_check_libfreeipmi.m4 --- nut-2.6.5/m4/nut_check_libfreeipmi.m4.ipmifix 2012-07-31 19:38:56.000000000 +0200 +++ nut-2.6.5/m4/nut_check_libfreeipmi.m4 2012-09-04 09:45:45.399328962 +0200 @@ -66,15 +66,23 @@ if test -z "${nut_have_libfreeipmi_seen} dnl when version cannot be tested (prior to 1.0.5, with no pkg-config) dnl we have to check for some specific functions AC_SEARCH_LIBS([ipmi_ctx_find_inband], [freeipmi], [], [nut_have_freeipmi=no]) - AC_SEARCH_LIBS([ipmi_fru_parse_ctx_create], [freeipmi], [], [nut_have_freeipmi=no]) AC_SEARCH_LIBS([ipmi_monitoring_init], [ipmimonitoring], [nut_have_freeipmi_monitoring=yes], [nut_have_freeipmi_monitoring=no]) AC_SEARCH_LIBS([ipmi_monitoring_sensor_read_record_id], [ipmimonitoring], [], [nut_have_freeipmi_monitoring=no]) dnl Check for FreeIPMI 1.1.X / 1.2.X which implies API changes! - AC_SEARCH_LIBS([ipmi_sdr_cache_ctx_destroy], [freeipmi], [nut_have_freeipmi_11x_12x=no], []) + nut_have_freeipmi_old="${nut_have_freeipmi}" + AC_SEARCH_LIBS([ipmi_fru_parse_ctx_create], [freeipmi], [nut_have_freeipmi_11x_12x=no], [nut_have_freeipmi_old=no]) + AC_SEARCH_LIBS([ipmi_sdr_cache_ctx_destroy], [freeipmi], [nut_have_freeipmi_11x_12x=no], [nut_have_freeipmi_old=no]) + AC_SEARCH_LIBS([ipmi_fru_ctx_create], [freeipmi], [nut_have_freeipmi_11x_12x=yes], [nut_have_freeipmi_11x_12x=no]) AC_SEARCH_LIBS([ipmi_sdr_ctx_destroy], [freeipmi], [nut_have_freeipmi_11x_12x=yes], [nut_have_freeipmi_11x_12x=no]) + if test "${nut_have_freeipmi}${nut_have_freeipmi_11x_12x}" = "yesyes"; then + AC_DEFINE(HAVE_FREEIPMI_11X_12X, 1, [Define if FreeIPMI 1.1.X / 1.2.X support is available]) + elif test "${nut_have_freeipmi_old}" = "no"; then + nut_have_freeipmi="no" + fi + if test "${nut_have_freeipmi}" = "yes"; then nut_with_ipmi="yes" nut_ipmi_lib="(FreeIPMI)" @@ -84,10 +92,6 @@ if test -z "${nut_have_libfreeipmi_seen} LIBIPMI_LIBS="${LIBS}" fi - if test "${nut_have_freeipmi_11x_12x}" = "yes"; then - AC_DEFINE(HAVE_FREEIPMI_11X_12X, 1, [Define if FreeIPMI 1.1.X / 1.2.X support is available]) - fi - if test "${nut_have_freeipmi_monitoring}" = "yes"; then AC_DEFINE(HAVE_FREEIPMI_MONITORING, 1, [Define if FreeIPMI monitoring support is available]) fi diff -up nut-2.6.5/tools/nut-scanner/scan_ipmi.c.ipmifix nut-2.6.5/tools/nut-scanner/scan_ipmi.c --- nut-2.6.5/tools/nut-scanner/scan_ipmi.c.ipmifix 2012-07-31 19:38:58.000000000 +0200 +++ nut-2.6.5/tools/nut-scanner/scan_ipmi.c 2012-09-04 09:42:35.000000000 +0200 @@ -34,24 +34,50 @@ static char * libname = "libfreeipmi"; static lt_dlhandle dl_handle = NULL; static const char *dl_error = NULL; -static int (*nut_ipmi_fru_parse_close_device_id) (ipmi_fru_parse_ctx_t ctx); -static void (*nut_ipmi_fru_parse_ctx_destroy) (ipmi_fru_parse_ctx_t ctx); #ifdef HAVE_FREEIPMI_11X_12X static void (*nut_ipmi_sdr_ctx_destroy) (ipmi_sdr_ctx_t ctx); +static int (*nut_ipmi_fru_close_device_id) (ipmi_fru_ctx_t ctx); +static void (*nut_ipmi_fru_ctx_destroy) (ipmi_fru_ctx_t ctx); +static ipmi_fru_ctx_t (*nut_ipmi_fru_ctx_create) (ipmi_ctx_t ipmi_ctx); +static int (*nut_ipmi_fru_ctx_set_flags) (ipmi_fru_ctx_t ctx, unsigned int flags); +static int (*nut_ipmi_fru_open_device_id) (ipmi_fru_ctx_t ctx, uint8_t fru_device_id); +static char * (*nut_ipmi_fru_ctx_errormsg) (ipmi_fru_ctx_t ctx); +static int (*nut_ipmi_fru_next) (ipmi_fru_ctx_t ctx); #else /* HAVE_FREEIPMI_11X_12X */ +static int (*nut_ipmi_fru_parse_close_device_id) (ipmi_fru_parse_ctx_t ctx); +static void (*nut_ipmi_fru_parse_ctx_destroy) (ipmi_fru_parse_ctx_t ctx); static void (*nut_ipmi_sdr_cache_ctx_destroy) (ipmi_sdr_cache_ctx_t ctx); static void (*nut_ipmi_sdr_parse_ctx_destroy) (ipmi_sdr_parse_ctx_t ctx); -#endif /* HAVE_FREEIPMI_11X_12X */ static ipmi_fru_parse_ctx_t (*nut_ipmi_fru_parse_ctx_create) (ipmi_ctx_t ipmi_ctx); static int (*nut_ipmi_fru_parse_ctx_set_flags) (ipmi_fru_parse_ctx_t ctx, unsigned int flags); static int (*nut_ipmi_fru_parse_open_device_id) (ipmi_fru_parse_ctx_t ctx, uint8_t fru_device_id); static char * (*nut_ipmi_fru_parse_ctx_errormsg) (ipmi_fru_parse_ctx_t ctx); +static int (*nut_ipmi_fru_parse_next) (ipmi_fru_parse_ctx_t ctx); +#endif /* HAVE_FREEIPMI_11X_12X */ + +#ifndef ipmi_fru_parse_ctx_t +#define ipmi_fru_parse_ctx_t ipmi_fru_ctx_t +#endif + +#ifndef nut_ipmi_fru_parse_close_device_id +#define nut_ipmi_fru_parse_close_device_id nut_ipmi_fru_close_device_id +#endif + +#define nut_ipmi_fru_parse_ctx_destroy nut_ipmi_fru_ctx_destroy +#define nut_ipmi_fru_parse_ctx_create nut_ipmi_fru_ctx_create +#define nut_ipmi_fru_parse_ctx_set_flags nut_ipmi_fru_ctx_set_flags +#define nut_ipmi_fru_parse_open_device_id nut_ipmi_fru_open_device_id +#define nut_ipmi_fru_parse_ctx_errormsg nut_ipmi_fru_ctx_errormsg +#define nut_ipmi_fru_parse_next nut_ipmi_fru_next +#define IPMI_FRU_PARSE_AREA_SIZE_MAX IPMI_FRU_AREA_SIZE_MAX +#define IPMI_FRU_PARSE_FLAGS_SKIP_CHECKSUM_CHECKS IPMI_FRU_FLAGS_SKIP_CHECKSUM_CHECKS +#define IPMI_FRU_PARSE_AREA_TYPE_MULTIRECORD_POWER_SUPPLY_INFORMATION IPMI_FRU_AREA_TYPE_MULTIRECORD_POWER_SUPPLY_INFORMATION + static int (*nut_ipmi_fru_parse_read_data_area) (ipmi_fru_parse_ctx_t ctx, unsigned int *area_type, unsigned int *area_length, void *areabuf, unsigned int areabuflen); -static int (*nut_ipmi_fru_parse_next) (ipmi_fru_parse_ctx_t ctx); static ipmi_ctx_t (*nut_ipmi_ctx_create) (void); static int (*nut_ipmi_ctx_find_inband) (ipmi_ctx_t ctx, ipmi_driver_type_t *driver_type,