====== 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.