linamh/net-analyzer/net-snmp/files/net-snmp-lm_sensors.patch

476 lines
13 KiB
Diff
Raw Normal View History

diff -Naur net-snmp-5.1.1.old/agent/mibgroup/host/hr_sensor.c net-snmp-5.1.1/agent/mibgroup/host/hr_sensor.c
--- net-snmp-5.1.1.old/agent/mibgroup/host/hr_sensor.c 1970-01-01 02:00:00.000000000 +0200
+++ net-snmp-5.1.1/agent/mibgroup/host/hr_sensor.c 2003-10-21 12:49:57.000000000 +0300
@@ -0,0 +1,322 @@
+/* This file was generated by mib2c and is intended for use as a mib module
+ for the ucd-snmp snmpd agent. */
+
+#include <net-snmp/net-snmp-config.h>
+
+#include <stdio.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STRING_H
+#include <string.h>
+#else
+#include <strings.h>
+#endif
+
+#include <getopt.h>
+#include <errno.h>
+#include <dlfcn.h>
+
+#include "sensors/sensors.h"
+#include "sensors/error.h"
+
+#include "host_res.h"
+#include "hr_sensor.h"
+
+
+/*
+ * hr_sensor_variables_oid:
+ * this is the top level oid that we want to register under. This
+ * is essentially a prefix, with the suffix appearing in the
+ * variable below.
+ */
+
+
+oid hr_sensor_variables_oid[] = { 1,3,6,1,2,1,25,8 };
+
+
+/*
+ * variable2 hr_sensor_variables:
+ * this variable defines function callbacks and type return information
+ * for the hr_sensor mib section
+ */
+
+
+struct variable2 hr_sensor_variables[] = {
+ /* magic number , variable type , ro/rw , callback fn , L, oidsuffix */
+#define HRSENSORMAPPING 2
+ { HRSENSORMAPPING, ASN_INTEGER , RONLY , var_hr_sensor, 2, { 1,1 } },
+#define HRSENSORNUMBER 3
+ { HRSENSORNUMBER, ASN_INTEGER , RONLY , var_hr_sensor, 2, { 1,2 } },
+#define HRSENSORNAME 4
+ { HRSENSORNAME , ASN_OCTET_STR , RONLY , var_hr_sensor, 2, { 1,3 } },
+#define HRSENSORLABEL 5
+ { HRSENSORLABEL , ASN_OCTET_STR , RONLY , var_hr_sensor, 2, { 1,4 } },
+#define HRSENSORVALUE 6
+ { HRSENSORVALUE , ASN_OCTET_STR , RONLY , var_hr_sensor, 2, { 1,5 } },
+
+};
+/* (L = length of the oidsuffix) */
+
+
+#define DEFAULT_CONFIG_FILE_NAME "sensors.conf"
+
+static char *config_file_name;
+FILE *config_file;
+static const char *config_file_path[] =
+{ "/etc", "/usr/lib/sensors", "/usr/local/lib/sensors", "/usr/lib",
+ "/usr/local/lib", ".", 0 };
+
+static void open_config_file(void);
+static int open_this_config_file(char *filename);
+
+
+/*
+ * functions that are dynamically loaded if the lm_sensors library is
+ * installed.
+ */
+static int (*sensors_get_label_dl)(sensors_chip_name name, int feature,
+ char **result);
+static int (*sensors_init_dl)(FILE *input);
+static int (*sensors_get_feature_dl)(sensors_chip_name name, int feature,
+ double *result);
+static const sensors_feature_data *(*sensors_get_all_features_dl)
+ (sensors_chip_name name, int *nr1,int *nr2);
+static const sensors_chip_name *(*sensors_get_detected_chips_dl)(int *nr);
+
+#define CHIPS_MAX 20
+static sensors_chip_name chips[CHIPS_MAX];
+static int chips_count=0;
+static int do_sets;
+
+/* This examines global var config_file, and leaves the name there too.
+ It also opens config_file. */
+static void open_config_file(void)
+{
+#define MAX_FILENAME_LEN 1024
+ char *filename;
+ char buffer[MAX_FILENAME_LEN];
+ int res,i;
+
+ if (config_file_name && !strcmp(config_file_name,"-")) {
+ config_file = stdin;
+ return;
+ } else if (config_file_name && index(config_file_name,'/')) {
+ if ((res = open_this_config_file(config_file_name))) {
+ fprintf(stderr,"Could not locate or open config file\n");
+ fprintf(stderr,"%s: %s\n",config_file_name,strerror(res));
+ exit(1);
+ }
+ }
+ else {
+ if (config_file_name)
+ filename = config_file_name;
+ else
+ filename = strdup(DEFAULT_CONFIG_FILE_NAME);
+ for (i = 0; config_file_path[i]; i++) {
+ if ((snprintf(buffer,MAX_FILENAME_LEN,
+ "%s/%s",config_file_path[i],filename)) < 1) {
+ fprintf(stderr,
+ "open_config_file: ridiculous long config file name!\n");
+ exit(1);
+ }
+ if (!open_this_config_file(buffer)) {
+ free(config_file_name);
+ config_file_name = strdup(buffer);
+ return;
+ }
+ }
+ fprintf(stderr,"Could not locate or open config file!\n");
+ exit(1);
+ }
+}
+
+static int open_this_config_file(char *filename)
+{
+ config_file = fopen(filename,"r");
+ if (! config_file)
+ return -errno;
+ return 0;
+}
+
+static long *sensor_tbl = 0;
+sensors_chip_name *chip_tbl = 0;
+static int sensor_maxnum = 0;
+
+static void do_register(sensors_chip_name name)
+{
+ const char *algo,*adap;
+
+ {
+ const sensors_feature_data *sensor;
+ const char *map=0;
+ int index0 = 0, index1 = 0;
+
+ printf("%s\n", name);
+
+ while ((sensor = sensors_get_all_features_dl (name, &index0, &index1))
+ != NULL) {
+ if(sensor_tbl = realloc(sensor_tbl, sizeof(long) * (sensor_maxnum+2)))
+ sensor_tbl[sensor_maxnum] = sensor->number;
+ if (chip_tbl = realloc(chip_tbl, sizeof(sensors_chip_name) * (sensor_maxnum+2)))
+ chip_tbl[sensor_maxnum] = name;
+ sensor_maxnum++;
+ }
+ }
+}
+
+/*
+ * init_hr_sensor():
+ * Initialization routine. This is called when the agent starts up.
+ * At a minimum, registration of your variables should take place here.
+ */
+void init_hr_sensor(void) {
+
+ const sensors_chip_name *chip;
+ int chip_nr,i;
+ int c,res;
+ void *sensors_library;
+
+ /* This could probably due with a bit more error reporting. */
+ sensors_library=dlopen("libsensors.so",RTLD_LAZY);
+ if(sensors_library==NULL)
+ return; // return before anything is registered
+
+ sensors_get_label_dl=dlsym(sensors_library,"sensors_get_label");
+ sensors_init_dl=dlsym(sensors_library,"sensors_init");
+ sensors_get_feature_dl=dlsym(sensors_library,"sensors_get_feature");
+ sensors_get_all_features_dl=dlsym(sensors_library,
+ "sensors_get_all_features");
+ sensors_get_detected_chips_dl=dlsym(sensors_library,
+ "sensors_get_detected_chips");
+ if(sensors_get_label_dl==NULL || sensors_init_dl==NULL ||
+ sensors_get_feature_dl==NULL || sensors_get_all_features_dl==NULL ||
+ sensors_get_detected_chips_dl==NULL)
+ return; // return before anything is registered
+
+ /* register ourselves with the agent to handle our mib tree */
+ REGISTER_MIB("hr_sensor", hr_sensor_variables, variable2,
+ hr_sensor_variables_oid);
+
+
+ /* place any other initialization junk you need here */
+
+
+ chips[0].prefix = SENSORS_CHIP_NAME_PREFIX_ANY;
+ chips[0].bus = SENSORS_CHIP_NAME_BUS_ANY;
+ chips[0].addr = SENSORS_CHIP_NAME_ADDR_ANY;
+ chips_count = 1;
+
+ open_config_file();
+
+ if ((res = sensors_init_dl(config_file))) {
+ return;
+ }
+
+ for (chip_nr = 0; (chip = sensors_get_detected_chips_dl(&chip_nr));)
+ do_register (*chip);
+}
+
+
+/*
+ * var_hr_sensor():
+ * This function is called every time the agent gets a request for
+ * a scalar variable that might be found within your mib section
+ * registered above. It is up to you to do the right thing and
+ * return the correct value.
+ * You should also correct the value of "var_len" if necessary.
+ *
+ * Please see the documentation for more information about writing
+ * module extensions, and check out the examples in the examples
+ * and mibII directories.
+ */
+unsigned char *
+var_hr_sensor(struct variable *vp,
+ oid *name,
+ size_t *length,
+ int exact,
+ size_t *var_len,
+ WriteMethod **write_method)
+{
+ /* variables we may use later */
+ static long long_ret;
+ static char *string = 0;
+ static oid objid[MAX_OID_LEN];
+ static struct counter64 c64;
+
+ const sensors_feature_data *sensor;
+ const char *map=0;
+ int index0 = 0, index1 = 0;
+ int sensor_idx = 0, sensor_num = 0;
+ sensors_chip_name chip_name;
+ double value;
+
+
+ if (header_simple_table(vp,name,length,exact,var_len,write_method,sensor_maxnum)
+ == MATCH_FAILED )
+ return NULL;
+
+ sensor_idx = name[*length - 1] - 1;
+ sensor_num = sensor_tbl[sensor_idx];
+ chip_name = chip_tbl[sensor_idx];
+
+ while ((sensor = sensors_get_all_features_dl (chip_name, &index0, &index1))
+ != NULL) {
+ if(sensor_num == sensor->number) {
+ /*
+ * this is where we do the value assignments for the mib results.
+ */
+ switch(vp->magic) {
+
+
+ case HRSENSORMAPPING:
+
+ long_ret = sensor->mapping;
+ return (unsigned char *) &long_ret;
+
+ case HRSENSORNUMBER:
+
+ long_ret = sensor_num;
+ return (unsigned char *) &long_ret;
+
+ case HRSENSORNAME:
+
+ string = malloc(SPRINT_MAX_LEN);
+ strncpy(string, sensor->name, SPRINT_MAX_LEN);
+ *var_len = strlen(string);
+ return (unsigned char *) string;
+
+ case HRSENSORLABEL:
+
+ string = malloc(SPRINT_MAX_LEN);
+
+ if (sensors_get_label_dl (chip_name, sensor->number, &string)) {
+ return 0;
+ }
+
+ *var_len = strlen(string);
+ return (unsigned char *) string;
+
+ case HRSENSORVALUE:
+
+ if (!(sensor->mode & SENSORS_MODE_R)) {
+ return 0;
+ } else if (!(sensor->mode & SENSORS_MODE_R)) {
+ return 0;
+ } else if (sensors_get_feature_dl (chip_name, sensor->number, &value)){
+ return 0;
+ }
+ string = malloc(SPRINT_MAX_LEN);
+ snprintf(string, SPRINT_MAX_LEN, "%f", value);
+ *var_len = strlen(string);
+ return (unsigned char *) string;
+
+ default:
+ ERROR_MSG("");
+ return NULL;
+ }
+ }
+ }
+ return NULL;
+}
+
diff -Naur net-snmp-5.1.1.old/agent/mibgroup/host/hr_sensor.h net-snmp-5.1.1/agent/mibgroup/host/hr_sensor.h
--- net-snmp-5.1.1.old/agent/mibgroup/host/hr_sensor.h 1970-01-01 02:00:00.000000000 +0200
+++ net-snmp-5.1.1/agent/mibgroup/host/hr_sensor.h 2003-10-21 12:47:04.000000000 +0300
@@ -0,0 +1,24 @@
+/* This file was generated by mib2c and is intended for use as a mib module
+ for the ucd-snmp snmpd agent. */
+
+
+#ifndef _MIBGROUP_HRSENSOR_H
+#define _MIBGROUP_HRSENSOR_H
+
+
+/* we may use header_generic and header_simple_table from the util_funcs module */
+
+
+config_require(util_funcs)
+
+
+/* function prototypes */
+
+
+extern void init_hr_sensor(void);
+extern FindVarMethod var_hr_sensor;
+
+
+
+
+#endif /* _MIBGROUP_HRSENSOR_H */
diff -Naur net-snmp-5.1.1.old/agent/mibgroup/host.h net-snmp-5.1.1/agent/mibgroup/host.h
--- net-snmp-5.1.1.old/agent/mibgroup/host.h 2002-04-20 10:30:00.000000000 +0300
+++ net-snmp-5.1.1/agent/mibgroup/host.h 2003-10-21 12:47:04.000000000 +0300
@@ -15,6 +15,7 @@
config_require(host/hr_filesys)
config_require(host/hr_swrun)
config_require(host/hr_swinst)
+ config_require(host/hr_sensor)
/* add the host resources mib to the default mibs to load */
config_add_mib(HOST-RESOURCES-MIB)
diff -Naur net-snmp-5.1.1.old/mibs/HOST-RESOURCES-MIB.txt net-snmp-5.1.1/mibs/HOST-RESOURCES-MIB.txt
--- net-snmp-5.1.1.old/mibs/HOST-RESOURCES-MIB.txt 2002-04-20 10:30:15.000000000 +0300
+++ net-snmp-5.1.1/mibs/HOST-RESOURCES-MIB.txt 2003-10-21 12:47:04.000000000 +0300
@@ -106,6 +106,7 @@
hrSWRunPerf OBJECT IDENTIFIER ::= { host 5 }
hrSWInstalled OBJECT IDENTIFIER ::= { host 6 }
hrMIBAdminInfo OBJECT IDENTIFIER ::= { host 7 }
+hrSensor OBJECT IDENTIFIER ::= { host 8 }
-- textual conventions
@@ -1390,6 +1391,66 @@
(hex)'00 00 01 01 00 00 00 00'."
::= { hrSWInstalledEntry 5 }
+
+hrSensorEntry OBJECT-TYPE
+ SYNTAX hrSensorEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "The CPU temperature sensor settings."
+ INDEX { hrSensor }
+ ::= { hrSensor 1 }
+
+hrSensorEntry ::= SEQUENCE {
+ hrSensorNumber Integer32,
+ hrSensorMapping Integer32,
+ hrSensorName DisplayString,
+ hrSensorLabel DisplayString,
+ hrSensorValue DisplayString
+ }
+
+
+
+hrSensorMapping OBJECT-TYPE
+ SYNTAX Integer32 (1..2147483647)
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The mapping"
+ ::= { hrSensorEntry 1 }
+
+hrSensorNumber OBJECT-TYPE
+ SYNTAX Integer32 (1..2147483647)
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The Number"
+ ::= { hrSensorEntry 2 }
+
+hrSensorName OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The name of the sensor."
+ ::= { hrSensorEntry 3 }
+
+hrSensorLabel OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The label of the sensor."
+ ::= { hrSensorEntry 4 }
+
+hrSensorValue OBJECT-TYPE
+ SYNTAX DisplayString
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The value of the sensor"
+ ::= { hrSensorEntry 5 }
+
-- Conformance information
hrMIBCompliances OBJECT IDENTIFIER ::= { hrMIBAdminInfo 2 }
@@ -1456,6 +1517,13 @@
"The Installed Software Group.
Implementation of this group is at the discretion
of the implementor."
+
+ GROUP hrSensorGroup
+ DESCRIPTION
+ "The Sensors Group.
+ Implementation of this group is at the discretion
+ of the implementor."
+
::= { hrMIBCompliances 1 }
hrSystemGroup OBJECT-GROUP
@@ -1537,4 +1605,17 @@
"The Host Resources Installed Software Group."
::= { hrMIBGroups 6 }
+ hrSensorGroup OBJECT-GROUP
+ OBJECTS {
+ hrSensorEntry,
+ hrSensorNumber,
+ hrSensorMapping,
+ hrSensorName,
+ hrSensorLabel,
+ hrSensorValue
+ }
+ STATUS current
+ DESCRIPTION
+ "The Sensor Resources Group."
+ ::= { hrMIBGroups 7 }
END