xref: /openbmc/pldm/softoff/main.cpp (revision 19ea04c3)
1 #include "common/utils.hpp"
2 #include "softoff.hpp"
3 
4 #include <phosphor-logging/lg2.hpp>
5 
6 #include <iostream>
7 
8 PHOSPHOR_LOG2_USING;
9 
10 int main()
11 {
12     // Get a default event loop
13     auto event = sdeventplus::Event::get_default();
14 
15     // Get a handle to system D-Bus.
16     auto& bus = pldm::utils::DBusHandler::getBus();
17 
18     // Attach the bus to sd_event to service user requests
19     bus.attach_event(event.get(), SD_EVENT_PRIORITY_NORMAL);
20 
21     pldm::SoftPowerOff softPower(bus, event.get());
22 
23     if (softPower.isError())
24     {
25         error(
26             "Host failed to gracefully shutdown, exiting pldm-softpoweroff app");
27         return -1;
28     }
29 
30     if (softPower.isCompleted())
31     {
32         error(
33             "Host current state is not Running, exiting pldm-softpoweroff app");
34         return 0;
35     }
36 
37     // Send the gracefully shutdown request to the host and
38     // wait the host gracefully shutdown.
39     if (softPower.hostSoftOff(event))
40     {
41         error(
42             "pldm-softpoweroff:Failure in sending soft off request to the host. Exiting pldm-softpoweroff app");
43         return -1;
44     }
45 
46     if (softPower.isTimerExpired() && softPower.isReceiveResponse())
47     {
48         pldm::utils::reportError(
49             "pldm soft off: Waiting for the host soft off timeout");
50         error(
51             "PLDM host soft off: ERROR! Wait for the host soft off timeout. Exit the pldm-softpoweroff");
52         return -1;
53     }
54 
55     return 0;
56 }
57