1 #pragma once 2 #include "callback.hpp" 3 4 namespace phosphor 5 { 6 namespace dbus 7 { 8 namespace monitoring 9 { 10 /** @class Trap 11 * @brief Raises SNMP trap 12 */ 13 class Trap 14 { 15 public: 16 Trap() = default; 17 Trap(const Trap&) = delete; 18 Trap(Trap&&) = default; 19 Trap& operator=(const Trap&) = delete; 20 Trap& operator=(Trap&&) = default; 21 virtual ~Trap() = default; 22 /** @brief Raise SNMP trap by parsing the sdbus message. 23 * @param[in] msg - sdbus message. 24 */ 25 virtual void trap(sdbusplus::message_t& msg) const = 0; 26 }; 27 28 /** @class ErrorTrap 29 * @brief Sends SNMP trap for the elog error 30 */ 31 class ErrorTrap : public Trap 32 { 33 public: 34 ErrorTrap() = default; 35 ErrorTrap(const ErrorTrap&) = delete; 36 ErrorTrap(ErrorTrap&&) = default; 37 ErrorTrap& operator=(const ErrorTrap&) = delete; 38 ErrorTrap& operator=(ErrorTrap&&) = default; 39 ~ErrorTrap() = default; 40 41 /** @brief Raise SNMP trap by parsing the sdbus message. 42 * @param[in] msg - sdbus message. 43 */ 44 void trap(sdbusplus::message_t& msg) const override; 45 }; 46 47 /** @class SNMPTrap 48 * @brief SNMP trap callback implementation. 49 */ 50 template <typename T> 51 class SNMPTrap : public Callback 52 { 53 public: 54 SNMPTrap(const SNMPTrap&) = delete; 55 SNMPTrap(SNMPTrap&&) = default; 56 SNMPTrap& operator=(const SNMPTrap&) = delete; 57 SNMPTrap& operator=(SNMPTrap&&) = default; 58 virtual ~SNMPTrap() = default; SNMPTrap()59 SNMPTrap() : Callback() {} 60 61 /** @brief Callback interface implementation. 62 * @param[in] ctc - context. 63 */ operator ()(Context)64 void operator()(Context /* ctx */) override {} 65 66 /** @brief Callback interface implementation. 67 * @param[in] ctc - context. 68 * @param[in] msg - sdbus message. 69 */ operator ()(Context,sdbusplus::message_t & msg)70 void operator()(Context /* ctx */, sdbusplus::message_t& msg) override 71 { 72 event.trap(msg); 73 } 74 75 private: 76 T event; 77 }; 78 79 } // namespace monitoring 80 } // namespace dbus 81 } // namespace phosphor 82