diff options
Diffstat (limited to 'src/snmp_trap.hpp')
-rw-r--r-- | src/snmp_trap.hpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/src/snmp_trap.hpp b/src/snmp_trap.hpp new file mode 100644 index 0000000..2f93189 --- /dev/null +++ b/src/snmp_trap.hpp @@ -0,0 +1,84 @@ +#pragma once +#include "callback.hpp" + +namespace phosphor +{ +namespace dbus +{ +namespace monitoring +{ +/** @class Trap + * @brief Raises SNMP trap + */ +class Trap +{ + public: + Trap() = default; + Trap(const Trap&) = delete; + Trap(Trap&&) = default; + Trap& operator=(const Trap&) = delete; + Trap& operator=(Trap&&) = default; + virtual ~Trap() = default; + /** @brief Raise SNMP trap by parsing the sdbus message. + * @param[in] msg - sdbus message. + */ + virtual void trap(sdbusplus::message::message& msg) const = 0; +}; + +/** @class ErrorTrap + * @brief Sends SNMP trap for the elog error + */ +class ErrorTrap : public Trap +{ + public: + ErrorTrap() = default; + ErrorTrap(const ErrorTrap&) = delete; + ErrorTrap(ErrorTrap&&) = default; + ErrorTrap& operator=(const ErrorTrap&) = delete; + ErrorTrap& operator=(ErrorTrap&&) = default; + ~ErrorTrap() = default; + + /** @brief Raise SNMP trap by parsing the sdbus message. + * @param[in] msg - sdbus message. + */ + void trap(sdbusplus::message::message& msg) const override; +}; + +/** @class SNMPTrap + * @brief SNMP trap callback implementation. + */ +template <typename T> class SNMPTrap : public Callback +{ + public: + SNMPTrap(const SNMPTrap&) = delete; + SNMPTrap(SNMPTrap&&) = default; + SNMPTrap& operator=(const SNMPTrap&) = delete; + SNMPTrap& operator=(SNMPTrap&&) = default; + virtual ~SNMPTrap() = default; + SNMPTrap() : Callback() + { + } + + /** @brief Callback interface implementation. + * @param[in] ctc - context. + */ + void operator()(Context ctx) + { + } + + /** @brief Callback interface implementation. + * @param[in] ctc - context. + * @param[in] msg - sdbus message. + */ + void operator()(Context ctx, sdbusplus::message::message& msg) + { + event.trap(msg); + } + + private: + T event; +}; + +} // namespace monitoring +} // namespace dbus +} // namespace phosphor |