blob: 0e4576d19cf4ffe47327807efcf2db74be01b863 [file] [log] [blame]
#include "common/instance_id.hpp"
#include "common/utils.hpp"
#include "softoff.hpp"
#include <phosphor-logging/lg2.hpp>
PHOSPHOR_LOG2_USING;
int main()
{
// Get a default event loop
auto event = sdeventplus::Event::get_default();
// Get a handle to system D-Bus.
auto& bus = pldm::utils::DBusHandler::getBus();
// Obtain the instance database
pldm::InstanceIdDb instanceIdDb;
// Attach the bus to sd_event to service user requests
bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
pldm::SoftPowerOff softPower(bus, event.get(), instanceIdDb);
if (softPower.isError())
{
error(
"Failure in gracefully shutdown by remote terminus, exiting pldm-softpoweroff app");
return -1;
}
if (softPower.isCompleted())
{
error(
"Remote terminus current state is not Running, exiting pldm-softpoweroff app");
return 0;
}
// Send the gracefully shutdown request to the host and
// wait the host gracefully shutdown.
if (softPower.hostSoftOff(event))
{
error(
"Failure in sending soft off request to the remote terminus. Exiting pldm-softpoweroff app");
return -1;
}
if (softPower.isTimerExpired() && softPower.isReceiveResponse())
{
pldm::utils::reportError(
"xyz.openbmc_project.PLDM.Error.SoftPowerOff.HostSoftOffTimeOut");
error(
"ERROR! Waiting for the host soft off timeout. Exit the pldm-softpoweroff");
return -1;
}
return 0;
}