1 #include <libpdbg.h>
2 
3 #include <phosphor-logging/log.hpp>
4 #include <sdbusplus/bus.hpp>
5 #include <watchdog_common.hpp>
6 #include <watchdog_logging.hpp>
7 
8 #include <map>
9 
10 namespace watchdog
11 {
12 namespace dump
13 {
14 
15 using namespace phosphor::logging;
16 
17 void transitionHost(const std::string& target)
18 {
19     constexpr auto systemdService = "org.freedesktop.systemd1";
20     constexpr auto systemdObjPath = "/org/freedesktop/systemd1";
21     constexpr auto systemdInterface = "org.freedesktop.systemd1.Manager";
22 
23     auto bus = sdbusplus::bus::new_system();
24     auto method = bus.new_method_call(systemdService, systemdObjPath,
25                                       systemdInterface, "StartUnit");
26 
27     method.append(target); // target unit to start
28     method.append("replace");
29 
30     bus.call_noreply(method); // start the service
31 }
32 
33 bool isAutoRebootEnabled()
34 {
35     constexpr auto settingsService = "xyz.openbmc_project.Settings";
36     constexpr auto settingsPath =
37         "/xyz/openbmc_project/control/host0/auto_reboot";
38     constexpr auto settingsIntf = "org.freedesktop.DBus.Properties";
39     constexpr auto rebootPolicy =
40         "xyz.openbmc_project.Control.Boot.RebootPolicy";
41 
42     auto bus = sdbusplus::bus::new_system();
43     auto method =
44         bus.new_method_call(settingsService, settingsPath, settingsIntf, "Get");
45 
46     method.append(rebootPolicy);
47     method.append("AutoReboot");
48 
49     bool autoReboot = false;
50     try
51     {
52         auto reply = bus.call(method);
53         std::variant<bool> result;
54         reply.read(result);
55         autoReboot = std::get<bool>(result);
56     }
57     catch (const sdbusplus::exception::SdBusError& e)
58     {
59         log<level::ERR>("Error in AutoReboot Get", entry("ERROR=%s", e.what()));
60     }
61 
62     return autoReboot;
63 }
64 
65 } // namespace dump
66 } // namespace watchdog
67