BMC Watchdog Timer Commands

The BMC implements a standardized ‘Watchdog Timer’ that can be used for a number of system timeout functions by system management software or by the BIOS. Setting a timeout value of ‘0’ allows the selected timeout action to occur immediately. This provides a standardized means for devices on the IPMB to performs emergency recovery actions. The IPMI standard defines the following BMC Watchdog Timer commands:

Command O/M Support API
Reset Watchdog Timer M Yes Yes
Set Watchdog Timer M Yes Yes
Get Watchdog Timer M Yes Yes

Note

  • O/M - Optional/Mandatory command as stated by the IPMI standard
  • Support - Supported command by send_message_with_name method
  • API - High level API support implemented in this library

Reset Watchdog Timer Command

This command is used for starting and restarting the Watchdog Timer from the initial countdown value that was specified with set_watchdog_timer method (see next command).

reset_watchdog_timer()

For example:

ipmi.reset_watchdog_timer()

Set Watchdog Timer Command

This command is used to initialize and configure the Watchdog Timer. This command is also used for stopping the timer.

set_watchdog_timer(watchdog_timer)

For example:

ipmi.set_watchdog_timer(watchdog_timer)

where the watchdog_timer has the attributes shown bellow for the next command.

Get Watchdog Timer Command

This command retrieves the current settings and present countdown of the watchdog timer.

get_watchdog_timer()

where the returned object has the following attributes shown in the order as they appear in the table of the IPMI standard:

  • dont_log
  • is_running (dont_stop)
  • timer_use
  • pre_timeout_interrupt
  • timeout_action
  • pre_timeout_interval
  • timer_use_expiration_flags
  • initial_countdown
  • present_countdown

The dont_stop attribute is not changed by the get_watchdog_timer method and used only by the set_watchdog_timer method.

For example:

watchdog_timer=ipmi.get_watchdog_timer()

print("--- Printing Watchdog Timer ---")
timer_use_const=['BIOS FRB2','BIOS/POST','OS Load','SMS/OS','OEM']
pretime_intr_const=['None','SMI','NMI','Msg intr']
timeout_act_const=['No action','Hard Reset','Power Down','Power Cycle']
print("""
Don't log:                  {0[dont_log]:}
Timer is running:           {0[is_running]:}
Pre-timout interval:        {0[pre_timeout_interval]:d}
Initial countdown value:    {0[initial_countdown]:d}
Present countdown value:    {0[present_countdown]:d}
"""[1:-1].format(wd_timer.__dict__),end='')
print("    Timer use:                 ",
      timer_use_const[watchdog_timer.__dict__['timer_use']-1])
print("    Timer use expiration flag: ",
      timer_use_const[watchdog_timer.__dict__['timer_use_expiration_flags']-1])
print("    Pre-timeout interrupt:     ",
      pretime_intr_const[watchdog_timer.__dict__['pre_timeout_interval']])
print("    Time out action:           ",
      timeout_act_const[watchdog_timer.__dict__['timeout_action']])