Envsys

The envsys framework is a kernel-level hardware monitoring sensors framework in NetBSD. , the framework is used by close to 85 device drivers to export various environmental monitoring sensors, as evidenced by references of the codice_1 symbol within the codice_2 path of NetBSD; with temperature sensors, codice_3, being the most likely type to be exported by any given driver. Sensors are registered with the kernel through codice_4 API. Consumption and monitoring of sensors from the userland is performed with the help of codice_5 utility through codice_6 through codice_7 against the codice_8 pseudo-device file, the codice_9 power management daemon that responds to kernel events by running scripts from codice_10, as well as third-party tools like codice_11 and GKrellM from pkgsrc.
Features.
The framework allows the user to amend the monitoring limits specified by the driver, and for the driver to perform monitoring of the sensors in kernel space, or even to programme a hardware chip to do the monitoring for the system automatically. Two levels of limits are defined: "critical" and "warning", both of which additionally extend to an "over" and an "under" categorisation. If limit thresholds are crossed, a kernel event may be generated, which can be caught in the userland by codice_9 to execute a pre-defined user script. By comparison, in OpenBSD's hw.sensors, the monitoring of user-defined values is performed in userspace by codice_13.
, the framework itself does not facilitate computer fan control, although the drivers could still implement interfacing with the fan-controlling capabilities of their chips through other means, for example, through a driver-specific sysctl interface, which is the approach taken by the codice_14 driver. However, the drivers for the most popular Super I/O chips like codice_15 and codice_16 do not implement any fan control at all (in fact, historically, in all of OpenBSD, NetBSD and DragonFly, these drivers don't even report the duty cycle of the fans — only the actual RPM values are reported).
History.
The framework undergone two major revisions: the first version of codice_17 was committed on ; with codice_18 man page following on . Between 2000 and 2007, the manual page for envsys(4) in NetBSD stated that the "API is experimental", and that the "entire API should be replaced by a sysctl(8)", "should one be developed"; it can be noted that in 2003 this was the exact approach taken by OpenBSD with sysctl hw.sensors when some of the envsys(4) drivers were ported to OpenBSD.
The second revision came about on . The serialisation with userland was reimplemented using property lists with the help of NetBSD's new proplib(3) library (the underlying transport layer between the kernel and userland still being done through ioctl).
The envsys framework was the precursor to OpenBSD's sysctl hw.sensors framework in 2003, and many drivers, as well as some sensor types, have been ported back and forth between NetBSD and OpenBSD. Support for sensors of codice_19 type has been added to NetBSD on , similar to codice_19 type in OpenBSD, which was at the same time when bio(4) and bioctl were ported from OpenBSD to NetBSD.