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;
39bf6ec600SJayanth Othayoth     Manager(const Manager&) = default;
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
58*1615b824SDhruvaraj 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