ipmi command implementation mismatch with the design document
Tung Nguyen OS
tungnguyen at os.amperecomputing.com
Mon Nov 23 17:39:27 AEDT 2020
Hi everyone,
I’m Tung Nguyen, developer for AmpereComputing - Altra system. While working with the IPMI commands I have a concern when comparing the design document and the implementation like the following:
The state-management-and-external-interfaces.md
The full mapping of Redfish and IPMI to xyz.openbmc_project.State.* is as follows:
Redfish IPMI xyz.openbmc_project.State.Transition
ForceOff power down Chassis.Off
ForceOn power up Host.On
ForceRestart hard reset Host.ForceWarmReboot
GracefulRestart Host.GracefulWarmReboot
GracefulShutdown soft off Host.Off
On power up Host.On
PowerCycle (host on) power cycle Host.Reboot
PowerCycle (host off) Chassis.PowerCycle
the IPMI – chassishandler.cpp:
ipmi::RspType<> ipmiChassisControl(uint8_t chassisControl)
{
int rc = 0;
switch (chassisControl)
{
case CMD_POWER_ON:
rc = initiate_state_transition(State::Host::Transition::On);
break;
case CMD_POWER_OFF:
// This path would be hit in 2 conditions.
// 1: When user asks for power off using ipmi chassis command 0x04
// 2: Host asking for power off post shutting down.
// If it's a host requested power off, then need to nudge Softoff
// application that it needs to stop the watchdog timer if running.
// If it is a user requested power off, then this is not really
// needed. But then we need to differentiate between user and host
// calling this same command
// For now, we are going ahead with trying to nudge the soft off and
// interpret the failure to do so as a non softoff case
rc = stop_soft_off_timer();
// Only request the Off transition if the soft power off
// application is not running
if (rc < 0)
{
// First create a file to indicate to the soft off application
// that it should not run. Not doing this will result in State
// manager doing a default soft power off when asked for power
// off.
indicate_no_softoff_needed();
// Now request the shutdown
rc = initiate_state_transition(State::Host::Transition::Off);
}
else
{
log<level::INFO>("Soft off is running, so let shutdown target "
"stop the host");
}
break;
The redfish – systems.hpp:
else if (resetType == "ForceOff")
{
command = "xyz.openbmc_project.State.Chassis.Transition.Off";
hostCommand = false;
}
Although the indicate_no_softoff_needed() can prevent the host from soft off, but it seems like a mismatch b/w the design document and the IPMI implementation.
So, my question: is it reasonable for IPMI command ?
Reference:
https://github.com/openbmc/docs/blob/master/designs/state-management-and-external-interfaces.md
Best regards,
Tung
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20201123/c5bb3ac6/attachment-0001.htm>
More information about the openbmc
mailing list