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::message& 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::message& msg) const override; 45 }; 46 47 /** @class SNMPTrap 48 * @brief SNMP trap callback implementation. 49 */ 50 template <typename T> class SNMPTrap : public Callback 51 { 52 public: 53 SNMPTrap(const SNMPTrap&) = delete; 54 SNMPTrap(SNMPTrap&&) = default; 55 SNMPTrap& operator=(const SNMPTrap&) = delete; 56 SNMPTrap& operator=(SNMPTrap&&) = default; 57 virtual ~SNMPTrap() = default; 58 SNMPTrap() : Callback() 59 { 60 } 61 62 /** @brief Callback interface implementation. 63 * @param[in] ctc - context. 64 */ 65 void operator()(Context ctx) 66 { 67 } 68 69 /** @brief Callback interface implementation. 70 * @param[in] ctc - context. 71 * @param[in] msg - sdbus message. 72 */ 73 void operator()(Context ctx, sdbusplus::message::message& msg) 74 { 75 event.trap(msg); 76 } 77 78 private: 79 T event; 80 }; 81 82 } // namespace monitoring 83 } // namespace dbus 84 } // namespace phosphor 85