Search code examples
ipmi

IPMI command reference?


I manage a largish number of servers, and I am trying to write a bash script to inspect their BMCs using ipmitool. This is the essence of what I'm doing:

...
admin=$(ipmitool -U user -P pasw -I lanplus -H $ipmi user list | grep " user " | awk '{print $1}')
chn=$(ipmitool -U user -P pasw -I lanplus -H 10.100.10.3 channel info | grep -e '^Channel.*info:' | awk '{print $2}')
ipmitool -U user -P pasw -I lanplus -H $ipmi user priv $admin 4 $chn
ipmitool -U user -P pasw -I lanplus -H $ipmi channel setaccess $chn $admin callin=on ipmi=on link=on privilege=4
ipmitool -U user -P pasw -I lanplus -H $ipmi sol payload enable $chn $admin
ipmitool -U user -P pasw -I lanplus -H $ipmi sol set volatile-bit-rate 115.2 $chn
ipmitool -U user -P pasw -I lanplus -H $ipmi sol set non-volatile-bit-rate 115.2 $chn
ipmitool -U user -P pasw -I lanplus -H $ipmi sol looptest 1
...

It works fine until I reach the sol set ... commands, which fail:

Error setting SOL parameter 'set-in-progress': Attempt to set set-in-progress when not in set-complete state
Error: set of parameter "volatile-bit-rate" failed

Looking at sol set ... from the ipmi shell:

ipmitool -U user -P pasw -I lanplus -H $ipmi shell

I see:

ipmitool> sol set

SOL set usage: 

  sol set <parameter> <value> [channel] [noguard]


SOL set parameters and values: 

  set-in-progress             set-complete | set-in-progress | commit-write
  enabled                     true | false
  force-encryption            true | false
  force-authentication        true | false
  privilege-level             user | operator | admin | oem
  character-accumulate-level  <in 5 ms increments>
  character-send-threshold    N
  retry-count                 N
  retry-interval              <in 10 ms increments>
  non-volatile-bit-rate       serial | 9.6 | 19.2 | 38.4 | 57.6 | 115.2
  volatile-bit-rate           serial | 9.6 | 19.2 | 38.4 | 57.6 | 115.2

So it looks as if one can manually set it to complete - but is it as simple as that? Is there a reference manual for what these commands do?


Solution

  • The following is a description of [Set In Progress] in the IPMI specification.

    This parameter is used to indicate when any of the following parameters are being updated, and when the updates are completed. The bit is primarily provided to alert software than some other software or utility is in the process of making changes to the data.

    An implementation can also elect to provide a ‘rollback’ feature that uses this information to decide whether to ‘roll back’ to the previous configuration information, or to accept the configuration change.

    If used, the roll back shall restore all parameters to their previous state. Otherwise, the change shall take effect when the write occurs.


    If your BMC supports this feature, the order of settings is as follows:

    ipmitool sol set set-in-progress set-in-progress
    ipmitool sol set xxxx
    ipmitool sol set set-in-progress commit-write
    ipmitool sol set set-in-progress set-complete
    

    IPMI Spec: https://www.intel.com/content/www/us/en/servers/ipmi/ipmi-second-gen-interface-spec-v2-rev1-1.html