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