|  | #pragma once | 
|  |  | 
|  | #include <map> | 
|  |  | 
|  | #include "dump_utils.hpp" | 
|  | #include "watch.hpp" | 
|  | #include "config.h" | 
|  |  | 
|  | namespace phosphor | 
|  | { | 
|  | namespace dump | 
|  | { | 
|  | namespace core | 
|  | { | 
|  | using Watch = phosphor::dump::inotify::Watch; | 
|  | using UserMap = phosphor::dump::inotify::UserMap; | 
|  |  | 
|  | /** workaround: Watches for IN_CREATE event for the | 
|  | *  ubi filesystem based systemd-coredump core path | 
|  | *  Refer openbmc/issues/#2287 for more details. | 
|  | */ | 
|  | #ifdef UBI_CORE_FILE_WORKAROUND | 
|  | static constexpr auto coreFileEvent = IN_CREATE; | 
|  | #else | 
|  | static constexpr auto coreFileEvent = IN_CLOSE_WRITE; | 
|  | #endif | 
|  |  | 
|  | /** @class Manager | 
|  | *  @brief OpenBMC Core manager implementation. | 
|  | */ | 
|  | class Manager | 
|  | { | 
|  | public: | 
|  | Manager() = delete; | 
|  | Manager(const Manager&) = default; | 
|  | Manager& operator=(const Manager&) = delete; | 
|  | Manager(Manager&&) = delete; | 
|  | Manager& operator=(Manager&&) = delete; | 
|  | virtual ~Manager() = default; | 
|  |  | 
|  | /** @brief Constructor to create core watch object. | 
|  | *  @param[in] event - Dump manager sd_event loop. | 
|  | */ | 
|  | Manager(const EventPtr& event) : | 
|  | eventLoop(event.get()), | 
|  | coreWatch(eventLoop, | 
|  | IN_NONBLOCK, | 
|  | coreFileEvent, | 
|  | EPOLLIN, | 
|  | CORE_FILE_DIR, | 
|  | std::bind( | 
|  | std::mem_fn( | 
|  | &phosphor::dump::core::Manager::watchCallback), | 
|  | this, std::placeholders::_1)) | 
|  | {} | 
|  |  | 
|  | private: | 
|  | /** @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); | 
|  |  | 
|  |  | 
|  | /** @brief Implementation of core watch call back | 
|  | * @param [in] fileInfo - map of file info  path:event | 
|  | */ | 
|  | void watchCallback(const UserMap& fileInfo); | 
|  |  | 
|  | /** @brief sdbusplus Dump event loop */ | 
|  | EventPtr eventLoop; | 
|  |  | 
|  | /** @brief Core watch object */ | 
|  | Watch coreWatch; | 
|  | }; | 
|  |  | 
|  | } // namepsace core | 
|  | } // namespace dump | 
|  | } // namespace phosphor |