Add support to enable dump collection for core dump
Implemented d-bus internal create function.
Change-Id: I34088d4c084a5a086189f4bc9e84e53a39193501
Signed-off-by: Jayanth Othayoth <ojayanth@in.ibm.com>
diff --git a/core_manager.cpp b/core_manager.cpp
index 8a91a27..f48e8dc 100644
--- a/core_manager.cpp
+++ b/core_manager.cpp
@@ -1,7 +1,7 @@
-#include <unistd.h>
-#include <sys/inotify.h>
+#include <phosphor-logging/log.hpp>
#include "core_manager.hpp"
+#include "config.h"
namespace phosphor
{
@@ -12,16 +12,67 @@
namespace manager
{
+using namespace phosphor::logging;
+using namespace std;
+
void watchCallback(const UserMap& fileInfo)
{
+ vector<string> files;
+
for (const auto& i : fileInfo)
{
- // For any new dump file create dump entry object.
+ // Get list of debug files.
if (IN_CLOSE_WRITE == i.second)
{
- //TODO openbmc/openbmc#1795 Enable Dump collection function here
+ files.push_back(i.first.string());
}
}
+ if(!files.empty())
+ {
+ createHelper(files);
+ }
+}
+
+void createHelper(const vector<string>& files)
+{
+ constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
+ constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper";
+ constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper";
+ constexpr auto IFACE_INTERNAL("xyz.openbmc_project.Dump.Internal.Create");
+ constexpr auto APPLICATION_CORED =
+ "xyz.openbmc_project.Dump.Internal.Create.Type.ApplicationCored";
+
+ auto b = sdbusplus::bus::new_default();
+ auto mapper = b.new_method_call(
+ MAPPER_BUSNAME,
+ MAPPER_PATH,
+ MAPPER_INTERFACE,
+ "GetObject");
+ mapper.append(OBJ_INTERNAL, vector<string>({IFACE_INTERNAL}));
+
+ auto mapperResponseMsg = b.call(mapper);
+ if (mapperResponseMsg.is_method_error())
+ {
+ log<level::ERR>("Error in mapper call");
+ return;
+ }
+
+ map<string, vector<string>> mapperResponse;
+ mapperResponseMsg.read(mapperResponse);
+ if (mapperResponse.empty())
+ {
+ log<level::ERR>("Error reading mapper response");
+ return;
+ }
+
+ const auto& host = mapperResponse.cbegin()->first;
+ auto m = b.new_method_call(
+ host.c_str(),
+ OBJ_INTERNAL,
+ IFACE_INTERNAL,
+ "Create");
+ m.append(APPLICATION_CORED, files);
+ b.call_noreply(m);
}
} // namespace manager
diff --git a/core_manager.hpp b/core_manager.hpp
index 19658a5..84818e5 100644
--- a/core_manager.hpp
+++ b/core_manager.hpp
@@ -21,6 +21,12 @@
*/
void watchCallback(const UserMap& fileInfo);
+/** @brief Helper function for initiating dump request using
+ * D-bus internal create interface.
+ * @param [in] files - Core files list
+ */
+void createHelper(const std::vector<std::string>& files);
+
} // namespace manager
} // namepsace core
} // namespace dump
diff --git a/dump_internal.hpp b/dump_internal.hpp
index 0688b78..d13ae24 100644
--- a/dump_internal.hpp
+++ b/dump_internal.hpp
@@ -14,6 +14,7 @@
using CreateIface = sdbusplus::server::object::object<
sdbusplus::xyz::openbmc_project::Dump::Internal::server::Create>;
+using Mgr = phosphor::dump::Manager;
/** @class Manager
* @brief Implementation for the
@@ -31,10 +32,12 @@
/** @brief Constructor to put object onto bus at a dbus path.
* @param[in] bus - Bus to attach to.
+ * @param[in] dumpMgr - Dump Manager object
* @param[in] path - Path to attach at.
*/
- Manager(sdbusplus::bus::bus& bus, const char* path) :
- CreateIface(bus, path) {};
+ Manager(sdbusplus::bus::bus& bus, Mgr& dumpMgr, const char* path):
+ CreateIface(bus, path),
+ dumpMgr(dumpMgr) {};
/** @brief Implementation for Create
* Create BMC Dump based on the Dump type.
@@ -46,7 +49,9 @@
void create(
Type type,
std::vector<std::string> fullPaths) override;
-
+ private:
+ /** @brief Dump Manager object. */
+ Mgr& dumpMgr;
};
} // namespace internal
diff --git a/dump_manager.cpp b/dump_manager.cpp
index d5150d3..571ced5 100644
--- a/dump_manager.cpp
+++ b/dump_manager.cpp
@@ -23,8 +23,7 @@
Type type,
std::vector<std::string> fullPaths)
{
- // TODO openbmc/openbmc#1795
- // Add implementaion of internal create function.
+ dumpMgr.phosphor::dump::Manager::captureDump(type, fullPaths);
}
} //namepsace internal
diff --git a/dump_manager_main.cpp b/dump_manager_main.cpp
index 2cb6d2b..89aa6d4 100644
--- a/dump_manager_main.cpp
+++ b/dump_manager_main.cpp
@@ -33,7 +33,7 @@
try
{
phosphor::dump::Manager manager(bus, eventP, DUMP_OBJPATH);
- phosphor::dump::internal::Manager mgr(bus, OBJ_INTERNAL);
+ phosphor::dump::internal::Manager mgr(bus, manager, OBJ_INTERNAL);
bus.attach_event(eventP.get(), SD_EVENT_PRIORITY_NORMAL);
auto rc = sd_event_loop(eventP.get());