Blob Blame History Raw
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,