blob: 4ac89afa1cbec36bf8e8fd0ac589467293377058 [file] [log] [blame]
Jayanth Othayotha320c7c2017-06-14 07:17:21 -05001#include "config.h"
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -05002
Jayanth Othayotha320c7c2017-06-14 07:17:21 -05003#include "dump_internal.hpp"
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -05004#include "dump_manager.hpp"
Dhruvaraj Subhashchandranfef66a92020-09-06 13:10:59 -05005#include "dump_manager_bmc.hpp"
6#include "dump_manager_system.hpp"
Jayanth Othayothd0f00642017-09-04 06:26:30 -05007#include "elog_watch.hpp"
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -05008#include "watch.hpp"
9#include "xyz/openbmc_project/Common/error.hpp"
10
11#include <phosphor-logging/elog-errors.hpp>
12#include <sdbusplus/bus.hpp>
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050013
Ramesh Iyyarbb410df2020-08-03 03:13:04 -050014int main()
Jayanth Othayoth224882b2017-05-04 05:46:45 -050015{
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050016 using namespace phosphor::logging;
17 using InternalFailure =
18 sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
19
Jayanth Othayoth671fc7f2017-06-14 08:01:41 -050020 auto bus = sdbusplus::bus::new_default();
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050021 sd_event* event = nullptr;
22 auto rc = sd_event_default(&event);
23 if (rc < 0)
24 {
25 log<level::ERR>("Error occurred during the sd_event_default",
Gunnar Mills11eaab72017-10-19 16:07:31 -050026 entry("RC=%d", rc));
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050027 report<InternalFailure>();
28 return rc;
29 }
30 phosphor::dump::EventPtr eventP{event};
31 event = nullptr;
Jayanth Othayoth224882b2017-05-04 05:46:45 -050032
Alexander Filippov19ad0e82020-06-26 13:22:01 +030033 // Blocking SIGCHLD is needed for calling sd_event_add_child
34 sigset_t mask;
35 if (sigemptyset(&mask) < 0)
36 {
37 log<level::ERR>("Unable to initialize signal set",
38 entry("ERRNO=%d", errno));
39 return EXIT_FAILURE;
40 }
41
42 if (sigaddset(&mask, SIGCHLD) < 0)
43 {
44 log<level::ERR>("Unable to add signal to signal set",
45 entry("ERRNO=%d", errno));
46 return EXIT_FAILURE;
47 }
48
49 // Block SIGCHLD first, so that the event loop can handle it
50 if (sigprocmask(SIG_BLOCK, &mask, nullptr) < 0)
51 {
52 log<level::ERR>("Unable to block signal", entry("ERRNO=%d", errno));
53 return EXIT_FAILURE;
54 }
55
Jayanth Othayoth224882b2017-05-04 05:46:45 -050056 // Add sdbusplus ObjectManager for the 'root' path of the DUMP manager.
57 sdbusplus::server::manager::manager objManager(bus, DUMP_OBJPATH);
Jayanth Othayoth224882b2017-05-04 05:46:45 -050058 bus.request_name(DUMP_BUSNAME);
59
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050060 try
Jayanth Othayoth224882b2017-05-04 05:46:45 -050061 {
Dhruvaraj Subhashchandranfef66a92020-09-06 13:10:59 -050062 phosphor::dump::bmc::Manager bmcDumpMgr(
63 bus, eventP, BMC_DUMP_OBJPATH, BMC_DUMP_OBJ_ENTRY, BMC_DUMP_PATH);
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050064 // Restore dump d-bus objects.
Dhruvaraj Subhashchandranfef66a92020-09-06 13:10:59 -050065 bmcDumpMgr.restore();
66 phosphor::dump::bmc::internal::Manager mgr(bus, bmcDumpMgr,
67 OBJ_INTERNAL);
68 phosphor::dump::system::Manager systemDumpMgr(bus, SYSTEM_DUMP_OBJPATH,
69 SYSTEM_DUMP_OBJ_ENTRY);
Jayanth Othayothd0f00642017-09-04 06:26:30 -050070 phosphor::dump::elog::Watch eWatch(bus, mgr);
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050071 bus.attach_event(eventP.get(), SD_EVENT_PRIORITY_NORMAL);
Jayanth Othayothbcb174b2017-07-02 06:29:24 -050072
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050073 auto rc = sd_event_loop(eventP.get());
74 if (rc < 0)
75 {
76 log<level::ERR>("Error occurred during the sd_event_loop",
Gunnar Mills11eaab72017-10-19 16:07:31 -050077 entry("RC=%d", rc));
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050078 elog<InternalFailure>();
79 }
80 }
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050081 catch (InternalFailure& e)
82 {
83 commit<InternalFailure>();
84 return -1;
Jayanth Othayoth224882b2017-05-04 05:46:45 -050085 }
86
87 return 0;
88}