====== Using IPMItool ======
===== Intro =====
''ipmitool'' is a command line program used in unix-like oses to examine the current environmental states (and many other things) on the mainboard, if supported. Note that this is only available on FreeBSD 6.X and, as of this writing, I have only tested on 6.2.
===== Enabling =====
To enable IPMI usage, you first need to load the appropriate kernel module.
# kldload ipmi
To make sure it loaded correctly:
# kldstat
Id Refs Address Size Name
1 6 0xc0400000 70794c kernel
2 2 0xc0b08000 59f20 acpi.ko
3 1 0xc989f000 2d000 pf.ko
4 1 0xce122000 9000 ipmi.ko
5 1 0xce03b000 2000 smbus.ko
If you wish to make sure it's loaded on boot, add the following line to ''/boot/loader.conf''.
impi_load="YES"
===== Installing IPMItool =====
Now, all you need to do is install ''ipmitool''.
# cd /usr/ports/sysutils/ipmitool
# make install clean
===== Using IPMItool =====
Below are some basic uses to get you started. ''man ipmitool'' has a lot more info, of course.
To see a wide layout of all the available sensor info:
# ipmitool sensor
sys.id | 0x0 | discrete | 0x0200| na | na | na | na | na | na
sys.intsw | 0x0 | discrete | 0x0000| na | na | na | na | na | na
sys.psfail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
sys.tempfail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
sys.fanfail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
mb.t_amb | 29.000 | degrees C | ok | 0.000 | 0.000 | 0.000 | 35.000 | 40.000 | 45.000
mb.v_bat | 3.120 | Volts | ok | 2.400 | 2.592 | 2.688 | 3.392 | 3.600 | 3.792
mb.v_+3v3stby | 3.287 | Volts | ok | 2.595 | 2.785 | 2.993 | 3.598 | 3.789 | 3.996
mb.v_+3v3 | 3.304 | Volts | ok | 2.595 | 2.785 | 2.993 | 3.598 | 3.789 | 3.996
mb.v_+5v | 4.992 | Volts | ok | 3.484 | 3.978 | 4.498 | 5.486 | 5.980 | 6.500
mb.v_+12v | 12.222 | Volts | ok | 8.946 | 9.954 | 10.962 | 12.978 | 13.986 | 14.994
mb.v_-12v | -12.277 | Volts | ok | -15.051 | -14.029 | -13.007 | -11.036 | -10.014 | -9.065
mb.v_+2v5core | 2.556 | Volts | ok | 1.800 | 1.992 | 2.196 | 2.796 | 2.892 | 3.000
mb.v_+1v8core | 1.840 | Volts | ok | 1.100 | 1.300 | 1.500 | 2.100 | 2.300 | 2.500
mb.v_+1v2core | 1.220 | Volts | ok | 0.600 | 0.800 | 1.000 | 1.500 | 1.700 | 1.900
bp.power | 0x0 | discrete | 0x0200| na | na | na | na | na | na
bp.locate | 0x0 | discrete | 0x0100| na | na | na | na | na | na
bp.locate.btn | 0x0 | discrete | 0x0100| na | na | na | na | na | na
bp.alert | 0x0 | discrete | 0x0100| na | na | na | na | na | na
fp.prsnt | 0x0 | discrete | 0x0200| na | na | na | na | na | na
fp.t_amb | 24.000 | degrees C | ok | 0.000 | 0.000 | 0.000 | 30.000 | 35.000 | 45.000
fp.usbfail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
fp.power | 0x0 | discrete | 0x0200| na | na | na | na | na | na
fp.locate | 0x0 | discrete | 0x0100| na | na | na | na | na | na
fp.locate.btn | 0x0 | discrete | 0x0100| na | na | na | na | na | na
fp.alert | 0x0 | discrete | 0x0100| na | na | na | na | na | na
fp.ledbd.prsnt | 0x0 | discrete | 0x0200| na | na | na | na | na | na
pdb.t_amb | 23.000 | degrees C | ok | 0.000 | 0.000 | 0.000 | 32.000 | 37.000 | 42.000
ps0.prsnt | 0x0 | discrete | 0x0200| na | na | na | na | na | na
ps0.pwrok | 0x0 | discrete | 0x0200| na | na | na | na | na | na
ps0.vinok | 0x0 | discrete | 0x0200| na | na | na | na | na | na
ps1.prsnt | 0x0 | discrete | 0x0100| na | na | na | na | na | na
ps1.pwrok | na | discrete | na | na | na | na | na | na | na
ps1.vinok | na | discrete | na | na | na | na | na | na | na
io.t_amb | 23.000 | degrees C | ok | 0.000 | 0.000 | 0.000 | 32.000 | 37.000 | 42.000
io.id0.prsnt | 0x0 | discrete | 0x0100| na | na | na | na | na | na
io.id1.prsnt | 0x0 | discrete | 0x0200| na | na | na | na | na | na
io.hdd0.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
io.hdd1.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
io.hdd2.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
io.hdd3.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
p0.t_core | 44.000 | degrees C | ok | 0.000 | 0.000 | 0.000 | 60.000 | 65.000 | 75.000
p0.v_vdd | 1.380 | Volts | ok | 0.792 | 0.900 | 0.996 | 1.596 | 1.692 | 1.800
p0.v_vddio | 2.616 | Volts | ok | 1.800 | 1.992 | 2.196 | 2.796 | 2.892 | 3.000
p0.v_vtt | 1.296 | Volts | ok | 0.696 | 0.900 | 1.092 | 1.500 | 1.692 | 1.896
p0.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
p0.d0.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
p0.d1.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
p0.d2.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
p0.d3.fail | 0x0 | discrete | 0x0100| na | na | na | na | na | na
p1.t_core | 44.000 | degrees C | ok | 0.000 | 0.000 | 0.000 | 60.000 | 65.000 | 75.000
p1.v_vdd | 1.392 | Volts | ok | 0.792 | 0.900 | 0.996 | 1.596 | 1.692 | 1.800
p1.v_vddio | 2.628 | Volts | ok | 1.800 | 1.992 | 2.196 | 2.796 | 2.892 | 3.000
p1.v_vtt | 1.308 | Volts | ok | 0.696 | 0.900 | 1.092 | 1.500 | 1.692 | 1.896
p1.fail | 0x0 | discrete | 0x0100| na | na | na
p1.d0.fail | 0x0 | discrete | 0x0100| na | na | na
p1.d1.fail | 0x0 | discrete | 0x0100| na | na | na
p1.d2.fail | 0x0 | discrete | 0x0100| na | na | na
p1.d3.fail | 0x0 | discrete | 0x0100| na | na | na
ft0.fm0.fail | 0x0 | discrete | 0x0100| na | na | na
ft0.fm1.fail | 0x0 | discrete | 0x0100| na | na | na
ft0.fm2.fail | 0x0 | discrete | 0x0100| na | na | na
ft1.fm0.fail | 0x0 | discrete | 0x0100| na | na | na
ft1.fm1.fail | 0x0 | discrete | 0x0100| na | na | na
ft1.fm2.fail | 0x0 | discrete | 0x0100| na | na | na
ft0.fm0.f0.speed | 10000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft0.fm1.f0.speed | 10000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft0.fm2.f0.speed | 10000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft1.fm0.f0.speed | 11000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft1.fm1.f0.speed | 11000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft1.fm2.f0.speed | 10000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft0.fm0.f1.speed | 9000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft0.fm1.f1.speed | 10000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft0.fm2.f1.speed | 10000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft1.fm0.f1.speed | 11000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft1.fm1.f1.speed | 11000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
ft1.fm2.f1.speed | 11000.000 | RPM | ok | 1000.000 | 0.000 | 0.0
To see a smaller, more concise version of the above:
# ipmitool sdr list
sys.id | 0x02 | ok
sys.intsw | 0x00 | ok
sys.psfail | 0x01 | ok
sys.tempfail | 0x01 | ok
sys.fanfail | 0x01 | ok
mb.t_amb | 29 degrees C | ok
mb.v_bat | 3.10 Volts | ok
mb.v_+3v3stby | 3.29 Volts | ok
mb.v_+3v3 | 3.30 Volts | ok
mb.v_+5v | 4.99 Volts | ok
mb.v_+12v | 12.22 Volts | ok
mb.v_-12v | -12.28 Volts | ok
mb.v_+2v5core | 2.56 Volts | ok
mb.v_+1v8core | 1.84 Volts | ok
mb.v_+1v2core | 1.22 Volts | ok
bp.power | 0x02 | ok
bp.locate | 0x01 | ok
bp.locate.btn | 0x01 | ok
bp.alert | 0x01 | ok
fp.prsnt | 0x02 | ok
fp.t_amb | 24 degrees C | ok
fp.usbfail | 0x01 | ok
fp.power | 0x02 | ok
fp.locate | 0x01 | ok
fp.locate.btn | 0x01 | ok
fp.alert | 0x01 | ok
fp.ledbd.prsnt | 0x02 | ok
pdb.t_amb | 23 degrees C | ok
ps0.prsnt | 0x02 | ok
ps0.pwrok | 0x02 | ok
ps0.vinok | 0x02 | ok
ps1.prsnt | 0x01 | ok
ps1.pwrok | Not Readable | ns
ps1.vinok | Not Readable | ns
io.t_amb | 22 degrees C | ok
io.id0.prsnt | 0x01 | ok
io.id1.prsnt | 0x02 | ok
io.hdd0.fail | 0x01 | ok
io.hdd1.fail | 0x01 | ok
io.hdd2.fail | 0x01 | ok
io.hdd3.fail | 0x01 | ok
p0.t_core | 42 degrees C | ok
p0.v_vdd | 1.39 Volts | ok
p0.v_vddio | 2.62 Volts | ok
p0.v_vtt | 1.30 Volts | ok
p0.fail | 0x01 | ok
p0.d0.fail | 0x01 | ok
p0.d1.fail | 0x01 | ok
p0.d2.fail | 0x01 | ok
p0.d3.fail | 0x01 | ok
p1.t_core | 42 degrees C | ok
p1.v_vdd | 1.39 Volts | ok
p1.v_vddio | 2.63 Volts | ok
p1.v_vtt | 1.31 Volts | ok
p1.fail | 0x01 | ok
p1.d0.fail | 0x01 | ok
p1.d1.fail | 0x01 | ok
p1.d2.fail | 0x01 | ok
p1.d3.fail | 0x01 | ok
ft0.fm0.fail | 0x01 | ok
ft0.fm1.fail | 0x01 | ok
ft0.fm2.fail | 0x01 | ok
ft1.fm0.fail | 0x01 | ok
ft1.fm1.fail | 0x01 | ok
ft1.fm2.fail | 0x01 | ok
ft0.fm0.f0.speed | 10000 RPM | ok
ft0.fm1.f0.speed | 10000 RPM | ok
ft0.fm2.f0.speed | 10000 RPM | ok
ft1.fm0.f0.speed | 11000 RPM | ok
ft1.fm1.f0.speed | 10000 RPM | ok
ft1.fm2.f0.speed | 10000 RPM | ok
ft0.fm0.f1.speed | 10000 RPM | ok
ft0.fm1.f1.speed | 10000 RPM | ok
ft0.fm2.f1.speed | 10000 RPM | ok
ft1.fm0.f1.speed | 11000 RPM | ok
ft1.fm1.f1.speed | 11000 RPM | ok
ft1.fm2.f1.speed | 11000 RPM | ok
To "drill down" into one of the above MIBS:
# ipmitool sensor get ft1.fm2.f1.speed
Locating sensor record...
Sensor ID : ft1.fm2.f1.speed (0x4c)
Entity ID : 29.5
Sensor Type (Analog) : Fan
Sensor Reading : 11000 (+/- 0) RPM
Status : ok
Lower Non-Recoverable : 1000.000
Lower Critical : 0.000
Lower Non-Critical : 0.000
Upper Non-Critical : 0.000
Upper Critical : 0.000
Upper Non-Recoverable : 22000.000
Assertions Enabled : lnr- unr+
Deassertions Enabled : lnr- unr+
This barely scratches the surface of what can be done with ''ipmitool''. Again, see the ''man'' page for more info.