Browse Source

adapt to new two-level sensor sysctl framework; by Constantine A. Murenin

OPENBSD_4_1
deraadt 18 years ago
parent
commit
44cfc5dfde
3 changed files with 49 additions and 46 deletions
  1. +8
    -8
      src/etc/sensorsd.conf
  2. +2
    -2
      src/usr.sbin/ntpd/ntpd.h
  3. +39
    -36
      src/usr.sbin/ntpd/sensors.c

+ 8
- 8
src/etc/sensorsd.conf View File

@ -1,26 +1,26 @@
# $OpenBSD: sensorsd.conf,v 1.3 2006/08/23 11:32:44 mickey Exp $
# $OpenBSD: sensorsd.conf,v 1.4 2006/12/23 17:49:53 deraadt Exp $
# #
# Sample sensorsd.conf file. See sensorsd.conf(5) for details. # Sample sensorsd.conf file. See sensorsd.conf(5) for details.
# #
# +5 voltage (volts) # +5 voltage (volts)
#hw.sensors.3:low=4.8V:high=5.2V
#hw.sensors.lm0.volt3:low=4.8V:high=5.2V
# +12 voltage (volts) # +12 voltage (volts)
#hw.sensors.4:low=11.5V:high=12.5V
#hw.sensors.lm0.volt4:low=11.5V:high=12.5V
# Chipset temperature (degrees Celsius) # Chipset temperature (degrees Celsius)
#hw.sensors.7:high=50C
#hw.sensors.lm0.temp0:high=50C
# CPU temperature (degrees Celsius) # CPU temperature (degrees Celsius)
#hw.sensors.8:high=60C
#hw.sensors.lm0.temp1:high=60C
# CPU fan (RPM) # CPU fan (RPM)
#hw.sensors.11:low=3000
#hw.sensors.lm0.fan1:low=3000
# Intrusion detection (on ipmi) # Intrusion detection (on ipmi)
#hw.sensors.17:
#hw.sensors.ipmi0.indicator0:
# RAID volume sd0 status # RAID volume sd0 status
#hw.sensors.18:
#hw.sensors.ami0.drive0:

+ 2
- 2
src/usr.sbin/ntpd/ntpd.h View File

@ -1,4 +1,4 @@
/* $OpenBSD: ntpd.h,v 1.79 2006/11/20 20:58:47 henning Exp $ */
/* $OpenBSD: ntpd.h,v 1.80 2006/12/23 17:49:53 deraadt Exp $ */
/* /*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org> * Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@ -140,7 +140,7 @@ struct ntp_sensor {
time_t next; time_t next;
time_t last; time_t last;
char *device; char *device;
int sensorid;
int sensordevid;
u_int8_t weight; u_int8_t weight;
u_int8_t shift; u_int8_t shift;
}; };


+ 39
- 36
src/usr.sbin/ntpd/sensors.c View File

@ -1,4 +1,4 @@
/* $OpenBSD: sensors.c,v 1.26 2006/11/20 20:58:47 henning Exp $ */
/* $OpenBSD: sensors.c,v 1.27 2006/12/23 17:49:53 deraadt Exp $ */
/* /*
* Copyright (c) 2006 Henning Brauer <henning@openbsd.org> * Copyright (c) 2006 Henning Brauer <henning@openbsd.org>
@ -31,11 +31,11 @@
#include "ntpd.h" #include "ntpd.h"
#define SENSORS_MAX 255
#define MAXDEVNAMLEN 16
#define _PATH_DEV_HOTPLUG "/dev/hotplug" #define _PATH_DEV_HOTPLUG "/dev/hotplug"
void sensor_probe(int);
void sensor_add(struct sensor *);
int sensor_probe(int, char *, struct sensor *);
void sensor_add(int, char *);
void sensor_remove(struct ntp_sensor *); void sensor_remove(struct ntp_sensor *);
void sensor_update(struct ntp_sensor *); void sensor_update(struct ntp_sensor *);
@ -52,47 +52,59 @@ void
sensor_scan(void) sensor_scan(void)
{ {
int i; int i;
char d[MAXDEVNAMLEN];
struct sensor s;
for (i = 0; i < SENSORS_MAX; i++)
sensor_probe(i);
for (i = 0; i < MAXSENSORDEVICES; i++)
if (sensor_probe(i, d, &s))
sensor_add(i, d);
} }
void
sensor_probe(int id)
int
sensor_probe(int devid, char *dxname, struct sensor *sensor)
{ {
int mib[3];
size_t len;
struct sensor sensor;
int mib[5];
size_t slen, sdlen;
struct sensordev sensordev;
mib[0] = CTL_HW; mib[0] = CTL_HW;
mib[1] = HW_SENSORS; mib[1] = HW_SENSORS;
mib[2] = id;
mib[2] = devid;
mib[3] = SENSOR_TIMEDELTA;
mib[4] = 0;
len = sizeof(sensor);
if (sysctl(mib, 3, &sensor, &len, NULL, 0) == -1) {
sdlen = sizeof(sensordev);
if (sysctl(mib, 3, &sensordev, &sdlen, NULL, 0) == -1) {
if (errno != ENOENT) if (errno != ENOENT)
log_warn("sensor_probe sysctl"); log_warn("sensor_probe sysctl");
return;
return (0);
}
strlcpy(dxname, sensordev.xname, MAXDEVNAMLEN);
slen = sizeof(sensor);
if (sysctl(mib, 5, sensor, &slen, NULL, 0) == -1) {
if (errno != ENOENT)
log_warn("sensor_probe sysctl");
return (0);
} }
if (sensor.type == SENSOR_TIMEDELTA)
sensor_add(&sensor);
return (1);
} }
void void
sensor_add(struct sensor *sensor)
sensor_add(int sensordev, char *dxname)
{ {
struct ntp_sensor *s; struct ntp_sensor *s;
struct ntp_conf_sensor *cs; struct ntp_conf_sensor *cs;
/* check wether it is already there */ /* check wether it is already there */
TAILQ_FOREACH(s, &conf->ntp_sensors, entry) TAILQ_FOREACH(s, &conf->ntp_sensors, entry)
if (!strcmp(s->device, sensor->device))
if (!strcmp(s->device, dxname))
return; return;
/* check wether it is requested in the config file */ /* check wether it is requested in the config file */
for (cs = TAILQ_FIRST(&conf->ntp_conf_sensors); cs != NULL && for (cs = TAILQ_FIRST(&conf->ntp_conf_sensors); cs != NULL &&
strcmp(cs->device, sensor->device) && strcmp(cs->device, "*");
strcmp(cs->device, dxname) && strcmp(cs->device, "*");
cs = TAILQ_NEXT(cs, entry)) cs = TAILQ_NEXT(cs, entry))
; /* nothing */ ; /* nothing */
if (cs == NULL) if (cs == NULL)
@ -103,9 +115,9 @@ sensor_add(struct sensor *sensor)
s->next = getmonotime(); s->next = getmonotime();
s->weight = cs->weight; s->weight = cs->weight;
if ((s->device = strdup(sensor->device)) == NULL)
if ((s->device = strdup(dxname)) == NULL)
fatal("sensor_add strdup"); fatal("sensor_add strdup");
s->sensorid = sensor->num;
s->sensordevid = sensordev;
TAILQ_INSERT_TAIL(&conf->ntp_sensors, s, entry); TAILQ_INSERT_TAIL(&conf->ntp_sensors, s, entry);
@ -123,10 +135,9 @@ sensor_remove(struct ntp_sensor *s)
void void
sensor_query(struct ntp_sensor *s) sensor_query(struct ntp_sensor *s)
{ {
char dxname[MAXDEVNAMLEN];
struct sensor sensor; struct sensor sensor;
u_int32_t refid; u_int32_t refid;
int mib[3];
size_t len;
s->next = getmonotime() + SENSOR_QUERY_INTERVAL; s->next = getmonotime() + SENSOR_QUERY_INTERVAL;
@ -134,15 +145,8 @@ sensor_query(struct ntp_sensor *s)
if (s->update.rcvd < time(NULL) - SENSOR_DATA_MAXAGE) if (s->update.rcvd < time(NULL) - SENSOR_DATA_MAXAGE)
s->update.good = 0; s->update.good = 0;
mib[0] = CTL_HW;
mib[1] = HW_SENSORS;
mib[2] = s->sensorid;
len = sizeof(sensor);
if (sysctl(mib, 3, &sensor, &len, NULL, 0) == -1) {
if (errno == ENOENT)
sensor_remove(s);
else
log_warn("sensor_query sysctl");
if (!sensor_probe(s->sensordevid, dxname, &sensor)) {
sensor_remove(s);
return; return;
} }
@ -150,8 +154,7 @@ sensor_query(struct ntp_sensor *s)
sensor.status != SENSOR_S_OK) sensor.status != SENSOR_S_OK)
return; return;
if (sensor.type != SENSOR_TIMEDELTA ||
strcmp(sensor.device, s->device)) {
if (strcmp(dxname, s->device)) {
sensor_remove(s); sensor_remove(s);
return; return;
} }
@ -249,7 +252,7 @@ sensor_hotplugevent(int fd)
switch (he.he_type) { switch (he.he_type) {
case HOTPLUG_DEVAT: case HOTPLUG_DEVAT:
if (he.he_devclass == DV_DULL && if (he.he_devclass == DV_DULL &&
!strcmp(he.he_devname, "sensor"))
!strcmp(he.he_devname, "sensordev"))
sensor_scan(); sensor_scan();
break; break;
default: /* ignore */ default: /* ignore */


Loading…
Cancel
Save