[Pkg-net-snmp-devel] Bug#518898: [net-snmp PATCH] Use new libsensors API
Jonathan Nieder
jrnieder at gmail.com
Mon Mar 9 03:49:35 UTC 2009
Source: net-snmp
Version: 5.4.1~dfsg-12
Tags: patch
Severity: wishlist
I am not sure if this is the same as bug #292266, so I am filing it
separately. Here is a patch to use the newer libsensors4-dev instead
of libsensors-dev to build net-snmp. I have tested that with these
changes, net-snmp compiles (which is what I needed), but for all they
completely ruin some functionality. If there are tests I could run to
make sure I have not ruined anything, please let me know.
The patch is split into two parts: first come whitespace changes, then
actual changes to use the newer API. I changed "libsensors-dev
(>=2.8.5) [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64" to
"libsensors4-dev | not+linux-gnu" in debian/control and
'-Vos-specific-dev="libsensors-dev (>= 2.8.5)"' to
'-Vos-specific-dev="libsensors4-dev"' in debian/rules in addition to
these changes to agent/mibgroup/ucd-snmp/lmSensors.c.
-------------- next part --------------
diff --git a/agent/mibgroup/ucd-snmp/lmSensors.c b/agent/mibgroup/ucd-snmp/lmSensors.c
index d7dbd98..8f9fcd2 100644
--- a/agent/mibgroup/ucd-snmp/lmSensors.c
+++ b/agent/mibgroup/ucd-snmp/lmSensors.c
@@ -390,7 +390,7 @@ static int
sensor_load(void)
{
int rc = 0;
- time_t t = time(NULL);
+ time_t t = time(NULL);
if (t > timestamp + 7) /* this may require some tuning - currently 7 seconds*/
{
@@ -962,77 +962,78 @@ else{
} /* end for */
while ((chip = sensors_get_detected_chips(&chip_nr))) {
- int a = 0;
- int b = 0;
+ int a = 0;
+ int b = 0;
- while ((data = sensors_get_all_features(*chip, &a, &b))) {
- char *label = NULL;
- double val;
+ while ((data = sensors_get_all_features(*chip, &a, &b))) {
+ char *label = NULL;
+ double val;
- if ((data->mode & SENSORS_MODE_R) &&
- (data->mapping == SENSORS_NO_MAPPING) &&
- !sensors_get_label(*chip, data->number, &label) &&
- !sensors_get_feature(*chip, data->number, &val)) {
- int type = -1;
- float mul;
- _sensor_array *array;
+ if ((data->mode & SENSORS_MODE_R) &&
+ (data->mapping == SENSORS_NO_MAPPING) &&
+ !sensors_get_label(*chip, data->number, &label) &&
+ !sensors_get_feature(*chip, data->number, &val)) {
+ int type = -1;
+ float mul;
+ _sensor_array *array;
- /* The label, as determined for a given chip in sensors.conf,
- * is used to place each sensor in the appropriate bucket.
- * Volt, Fan, Temp, and Misc. If the text being looked for below
- * is not in the label of a given sensor (e.g., the temp1 sensor
- * has been labeled 'CPU' and not 'CPU temp') it will end up being
- * lumped in the MISC bucket. */
+ /* The label, as determined for a given chip in
+ * sensors.conf, is used to place each sensor in the
+ * appropriate bucket. Volt, Fan, Temp, and Misc.
+ * If the text being looked for below is not in the
+ * label of a given sensor (e.g., the temp1 sensor
+ * has been labeled 'CPU' and not 'CPU temp') it
+ * will end up being lumped in the MISC bucket. */
- if (strstr(label, "V")) {
- type = VOLT_TYPE;
- mul = 1000.0;
- }
- if (strstr(label, "fan") || strstr(label, "Fan")) {
- type = FAN_TYPE;
- mul = 1.0;
- }
- if (strstr(label, "temp") || strstr(label, "Temp")) {
- type = TEMP_TYPE;
- mul = 1000.0;
- }
- if (type == -1) {
- type = MISC_TYPE;
- mul = 1000.0;
- }
+ if (strstr(label, "V")) {
+ type = VOLT_TYPE;
+ mul = 1000.0;
+ }
+ if (strstr(label, "fan") || strstr(label, "Fan")) {
+ type = FAN_TYPE;
+ mul = 1.0;
+ }
+ if (strstr(label, "temp") || strstr(label, "Temp")) {
+ type = TEMP_TYPE;
+ mul = 1000.0;
+ }
+ if (type == -1) {
+ type = MISC_TYPE;
+ mul = 1000.0;
+ }
- array = &sensor_array[type];
- if ( array->current_len <= array->n) {
- _sensor* old_buffer = array->sensor;
- size_t new_size = (sizeof(_sensor) * array->current_len) + (sizeof(_sensor) * DEFAULT_SENSORS);
- array->sensor = (_sensor*)realloc(array->sensor, new_size);
- if (array->sensor == NULL)
- {
- /* Continuing would be unsafe */
- snmp_log(LOG_ERR, "too many sensors to fit, and failed to alloc more, failing on %s\n", label);
- free(old_buffer);
- old_buffer = NULL;
- if (label) {
- free(label);
- label = NULL;
- } /* end if label */
- return (rc=1);
- } /* end if array->sensor */
- array->current_len = new_size / sizeof(_sensor);
- DEBUGMSG(("ucd-snmp/lmSensors", "type #%d increased to %d elements\n", type, array->current_len));
- } /* end if array->current */
- strncpy(array->sensor[array->n].name, label, MAX_NAME);
- array->sensor[array->n].value = (int) (val * mul);
- DEBUGMSGTL(("sensors","sensor %d, value %d\n",
- array->sensor[array->n].name,
- array->sensor[array->n].value));
- array->n++;
- } /* end if data-mode */
- if (label) {
- free(label);
- label = NULL;
- } /* end if label */
- } /* end while data */
+ array = &sensor_array[type];
+ if ( array->current_len <= array->n) {
+ _sensor* old_buffer = array->sensor;
+ size_t new_size = (sizeof(_sensor) * array->current_len) + (sizeof(_sensor) * DEFAULT_SENSORS);
+ array->sensor = (_sensor*)realloc(array->sensor, new_size);
+ if (array->sensor == NULL)
+ {
+ /* Continuing would be unsafe */
+ snmp_log(LOG_ERR, "too many sensors to fit, and failed to alloc more, failing on %s\n", label);
+ free(old_buffer);
+ old_buffer = NULL;
+ if (label) {
+ free(label);
+ label = NULL;
+ } /* end if label */
+ return (rc=1);
+ } /* end if array->sensor */
+ array->current_len = new_size / sizeof(_sensor);
+ DEBUGMSG(("ucd-snmp/lmSensors", "type #%d increased to %d elements\n", type, array->current_len));
+ } /* end if array->current */
+ strncpy(array->sensor[array->n].name, label, MAX_NAME);
+ array->sensor[array->n].value = (int) (val * mul);
+ DEBUGMSGTL(("sensors","sensor %d, value %d\n",
+ array->sensor[array->n].name,
+ array->sensor[array->n].value));
+ array->n++;
+ } /* end if data-mode */
+ if (label) {
+ free(label);
+ label = NULL;
+ } /* end if label */
+ } /* end while data */
} /* end while chip */
return rc;
#endif /* end else ie. ifdef everything else */
diff --git a/agent/mibgroup/ucd-snmp/lmSensors.c b/agent/mibgroup/ucd-snmp/lmSensors.c
index 8f9fcd2..e42e0e2 100644
--- a/agent/mibgroup/ucd-snmp/lmSensors.c
+++ b/agent/mibgroup/ucd-snmp/lmSensors.c
@@ -89,7 +89,6 @@
#include </usr/platform/sun4u/include/sys/envctrl.h>
#else
#include <sensors/sensors.h>
- #define CONFIG_FILE_NAME "/etc/sensors.conf"
#endif
#include "lmSensors.h"
@@ -247,7 +246,7 @@ var_lmSensorsTable(struct variable *vp,
size_t * var_len, WriteMethod ** write_method)
{
static long long_ret;
- static unsigned char string[SPRINT_MAX_LEN];
+ static char string[SPRINT_MAX_LEN];
int s_index;
int s_type = -1;
@@ -352,9 +351,7 @@ sensor_init(void)
{
int res;
#ifndef solaris2
- char filename[] = CONFIG_FILE_NAME;
time_t t = time(NULL);
- FILE *fp = fopen(filename, "r");
int i = 0;
DEBUGMSG(("ucd-snmp/lmSensors", "=> sensor_init\n"));
@@ -366,13 +363,7 @@ sensor_init(void)
sensor_array[i].sensor = NULL;
}
- if (!fp)
- {
- res = 1;
- goto leaving;
- }
-
- if (sensors_init(fp))
+ if (sensors_init(NULL))
{
res = 2;
goto leaving;
@@ -940,7 +931,8 @@ else{
#else /* end solaris2 only ie. ifdef everything else */
const sensors_chip_name *chip;
- const sensors_feature_data *data;
+ const sensors_feature *feature;
+ const sensors_subfeature *subfeature;
int chip_nr = 0;
int rc = 0;
unsigned int i = 0;
@@ -961,18 +953,19 @@ else{
sensor_array[i].current_len = DEFAULT_SENSORS;
} /* end for */
- while ((chip = sensors_get_detected_chips(&chip_nr))) {
+ while ((chip = sensors_get_detected_chips(NULL, &chip_nr))) {
int a = 0;
+ while ((feature = sensors_get_features(chip, &a))) {
int b = 0;
-
- while ((data = sensors_get_all_features(*chip, &a, &b))) {
+ while ((subfeature = sensors_get_all_subfeatures(chip,
+ feature, &b))) {
char *label = NULL;
double val;
- if ((data->mode & SENSORS_MODE_R) &&
- (data->mapping == SENSORS_NO_MAPPING) &&
- !sensors_get_label(*chip, data->number, &label) &&
- !sensors_get_feature(*chip, data->number, &val)) {
+ if ((subfeature->flags & SENSORS_MODE_R) &&
+ (subfeature->mapping == 0) &&
+ (label = sensors_get_label(chip, feature)) &&
+ !sensors_get_value(chip, subfeature->number, &val)) {
int type = -1;
float mul;
_sensor_array *array;
@@ -1033,7 +1026,8 @@ else{
free(label);
label = NULL;
} /* end if label */
- } /* end while data */
+ } /* end while subfeature */
+ } /* end while feature */
} /* end while chip */
return rc;
#endif /* end else ie. ifdef everything else */
More information about the Pkg-net-snmp-devel
mailing list