ipmiutil getevt [-abosx -t secs -N node -U user -P/-R pswd -EFJTVY]
ipmiutil getevt is a program that uses IPMI commands to wait for IPMI events sent from the BMC firmware. These events are also sent to the IPMI System Event Log (SEL). This utility can use either the /dev/ipmi0 driver from OpenIPMI, the /dev/imb driver from Intel, the /dev/ipmikcs driver from valinux, direct user-space IOs, or the IPMI LAN interface if -N.
Some server management functions want to trigger custom actions or alerts when IPMI hardware-related events occur, but do not want to track all events, just newly occurring events. This utility waits a specified timeout period for any events, and returns interpreted output for each event. It is designed as a scriptable command-line utility, but if the timeout is infinite (-t 0), then this code could be used for a sample service as well.
There are several methods to do this which are implemented here.
The SEL method:
This method polls the SEL once a second, keeps track of the last SEL event read, and only new events are processed. This ensures that in a series of rapid events, all events are received in order, however, some transition-to-OK events may not be configured to write to the SEL on certain platforms. This method is used if getevent -s is specified. This is the only method supported over IPMI LAN, i.e. with -N.
The ReadEventMessageBuffer method:
This uses an IPMI Message Buffer in the BMC firmware to read each new event. This receives any event, but if two events occur nearly simultaneously, only the most recent of the two will be returned with this method. An example of simultaneous events might be, if a fan stops/fails, both the non-critical and critical fan threshold events would occur at that time. This is the default method for getevent.
The OpenIPMI custom method:
Different IPMI drivers may have varying behavior. For instance, the OpenIPMI driver uses the IPMI GetMessage commands internally and does not allow client programs to use those commands. It has its own custom mechanism, see getevent_mv(). This method is used if the OpenIPMI driver is detected, and no other method is specified.
The Async Event method:
This only gets certain Asynchronous requests from the BMC to an SMS OS service, like a remote OS shutdown, and get_software_id. This method is disabled by default and only turned on if the getevent -a option is specified. This method is only supported via the Intel IMB and OpenIPMI driver interfaces. There is an init script provided with ipmiutil to automate the task of starting this async event daemon.
# chkconfig --add ipmiutil_asy (skip this if no chkconfig)
# /etc/init.d/ipmiutil_asy start
This listens for IPMI LAN requests for soft-shutdown, and logs the output to /var/log/ipmiutil_asy.log
Command line options are described below.
Use the Async request method, which receives SMS OS requests from the BMC using the IMB or OpenIPMI driver interface. This services remote SMS bridge agent requests, like remote OS shutdown and get software_id.
Run in Background as a daemon. If this option is specified, normal output will be redirected to /var/log/ipmiutil_getevt.log. The default is to run in foreground.
Show output in a canonical format, with a delimiter of '|'.
- -e N
Wait for a specific event sensor type N. The parameter can be in hex (0x23) or decimal (35). The default is 0xFF which means wait for any event.
- -r F
Run script file F when an event occurs. The filename can include a full path. The script will be passed the event description as a parameter. A sample evt.sh script is included with the ipmiutil package.
Only run one pass to wait for the first event. Default is to loop for multiple events for the timeout period.
Use the SEL method to get events. This polls the SEL once a second for new events. The last SEL record read is saved in /usr/share/ipmiutil/evt.idx. Otherwise, the default is to use the ReadEventMessageBuffer method to get new events.
- -t N
Set the timeout period to N seconds. Default is 120 seconds. A timeout of 0 means an infinite period.
Causes extra debug messages to be displayed.
- -N nodename
Nodename or IP address of the remote target system. If a nodename is specified, IPMI LAN interface is used. Otherwise the local system management interface is used.
- -P/-R rmt_pswd
Remote password for the nodename given. The default is a null password.
- -U rmt_user
Remote username for the nodename given. The default is a null username.
Use the remote password from Environment variable IPMI_PASSWORD.
- -F drv_t
Force the driver type to one of the followng: imb, va, open, gnu, landesk, lan, lan2, lan2i, kcs, smb. Note that lan2i means lan2 with intelplus. The default is to detect any available driver type and use it.
Use the specified LanPlus cipher suite (0 thru 17): 0=none/none/none, 1=sha1/none/none, 2=sha1/sha1/none, 3=sha1/sha1/cbc128, 4=sha1/sha1/xrc4_128, 5=sha1/sha1/xrc4_40, 6=md5/none/none, ... 14=md5/md5/xrc4_40. Default is 3.
Use a specified IPMI LAN Authentication Type: 0=None, 1=MD2, 2=MD5, 4=Straight Password, 5=OEM.
Use a specified IPMI LAN privilege level. 1=Callback level, 2=User level, 3=Operator level, 4=Administrator level (default), 5=OEM level.
Yes, do prompt the user for the IPMI LAN remote password. Alternatives for the password are -E or -P.
ipmiutil(8) ialarms(8) iconfig(8) icmd(8) idiscover(8) ievents(8) ifru(8) ihealth(8) ilan(8) ireset(8) isel(8) isensor(8) iserial(8) isol(8) iwdt(8)
See http://ipmiutil.sourceforge.net/ for the latest version of ipmiutil and any bug fix list.
Copyright (C) 2009 Kontron America, Inc.
See the file COPYING in the distribution for more details regarding redistribution.
This utility is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY.
Andy Cress <arcress at users.sourceforge.net>
ialarms(8), icmd(8), iconfig(8), idcmi(8), idelloem(8), idiscover(8), iekanalyzer(8), ievents(8), ifirewall(8), ifru(8), ifwum(8), ihealth(8), ihpm(8), ilan(8), ipicmg(8), ipmi_port(8), ipmiutil(8), ireset(8), isel(8), iseltime(8), isensor(8), iserial(8), ismcoem(8), isol(8), isunoem(8), itsol(8), iuser(8), iwdt(8).