1d02153c9SJayanth Othayoth #pragma once 2d02153c9SJayanth Othayoth 3d02153c9SJayanth Othayoth #include <map> 4d02153c9SJayanth Othayoth 5d02153c9SJayanth Othayoth #include "dump_utils.hpp" 6d02153c9SJayanth Othayoth #include "watch.hpp" 7bf6ec600SJayanth Othayoth #include "config.h" 8d02153c9SJayanth Othayoth 9d02153c9SJayanth Othayoth namespace phosphor 10d02153c9SJayanth Othayoth { 11d02153c9SJayanth Othayoth namespace dump 12d02153c9SJayanth Othayoth { 13d02153c9SJayanth Othayoth namespace core 14d02153c9SJayanth Othayoth { 15bf6ec600SJayanth Othayoth using Watch = phosphor::dump::inotify::Watch; 16d02153c9SJayanth Othayoth using UserMap = phosphor::dump::inotify::UserMap; 17d02153c9SJayanth Othayoth 18*7f2f8027SJayanth Othayoth /** workaround: Watches for IN_CREATE event for the 19*7f2f8027SJayanth Othayoth * ubi filesystem based systemd-coredump core path 20*7f2f8027SJayanth Othayoth * Refer openbmc/issues/#2287 for more details. 21*7f2f8027SJayanth Othayoth */ 22*7f2f8027SJayanth Othayoth #ifdef UBI_CORE_FILE_WORKAROUND 23*7f2f8027SJayanth Othayoth static constexpr auto coreFileEvent = IN_CREATE; 24*7f2f8027SJayanth Othayoth #else 25*7f2f8027SJayanth Othayoth static constexpr auto coreFileEvent = IN_CLOSE_WRITE; 26*7f2f8027SJayanth Othayoth #endif 27*7f2f8027SJayanth Othayoth 28bf6ec600SJayanth Othayoth /** @class Manager 29bf6ec600SJayanth Othayoth * @brief OpenBMC Core manager implementation. 30d02153c9SJayanth Othayoth */ 31bf6ec600SJayanth Othayoth class Manager 32bf6ec600SJayanth Othayoth { 33bf6ec600SJayanth Othayoth public: 34bf6ec600SJayanth Othayoth Manager() = delete; 35bf6ec600SJayanth Othayoth Manager(const Manager&) = default; 36bf6ec600SJayanth Othayoth Manager& operator=(const Manager&) = delete; 37bf6ec600SJayanth Othayoth Manager(Manager&&) = delete; 38bf6ec600SJayanth Othayoth Manager& operator=(Manager&&) = delete; 39bf6ec600SJayanth Othayoth virtual ~Manager() = default; 40d02153c9SJayanth Othayoth 41bf6ec600SJayanth Othayoth /** @brief Constructor to create core watch object. 42bf6ec600SJayanth Othayoth * @param[in] event - Dump manager sd_event loop. 43bf6ec600SJayanth Othayoth */ 44bf6ec600SJayanth Othayoth Manager(const EventPtr& event) : 45bf6ec600SJayanth Othayoth eventLoop(event.get()), 46bf6ec600SJayanth Othayoth coreWatch(eventLoop, 47bf6ec600SJayanth Othayoth IN_NONBLOCK, 48*7f2f8027SJayanth Othayoth coreFileEvent, 49bf6ec600SJayanth Othayoth EPOLLIN, 50bf6ec600SJayanth Othayoth CORE_FILE_DIR, 51bf6ec600SJayanth Othayoth std::bind( 52bf6ec600SJayanth Othayoth std::mem_fn( 53bf6ec600SJayanth Othayoth &phosphor::dump::core::Manager::watchCallback), 54bf6ec600SJayanth Othayoth this, std::placeholders::_1)) 55bf6ec600SJayanth Othayoth {} 56bf6ec600SJayanth Othayoth 57bf6ec600SJayanth Othayoth private: 58d3273eadSJayanth Othayoth /** @brief Helper function for initiating dump request using 59d3273eadSJayanth Othayoth * D-bus internal create interface. 60d3273eadSJayanth Othayoth * @param [in] files - Core files list 61d3273eadSJayanth Othayoth */ 62d3273eadSJayanth Othayoth void createHelper(const std::vector<std::string>& files); 63d3273eadSJayanth Othayoth 64bf6ec600SJayanth Othayoth 65bf6ec600SJayanth Othayoth /** @brief Implementation of core watch call back 66bf6ec600SJayanth Othayoth * @param [in] fileInfo - map of file info path:event 67bf6ec600SJayanth Othayoth */ 68bf6ec600SJayanth Othayoth void watchCallback(const UserMap& fileInfo); 69bf6ec600SJayanth Othayoth 70bf6ec600SJayanth Othayoth /** @brief sdbusplus Dump event loop */ 71bf6ec600SJayanth Othayoth EventPtr eventLoop; 72bf6ec600SJayanth Othayoth 73bf6ec600SJayanth Othayoth /** @brief Core watch object */ 74bf6ec600SJayanth Othayoth Watch coreWatch; 75bf6ec600SJayanth Othayoth }; 76bf6ec600SJayanth Othayoth 77d02153c9SJayanth Othayoth } // namepsace core 78d02153c9SJayanth Othayoth } // namespace dump 79d02153c9SJayanth Othayoth } // namespace phosphor 80