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> 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; 59 SNMPTrap() : Callback() 60 { 61 } 62 63 /** @brief Callback interface implementation. 64 * @param[in] ctc - context. 65 */ 66 void operator()(Context ctx) 67 { 68 } 69 70 /** @brief Callback interface implementation. 71 * @param[in] ctc - context. 72 * @param[in] msg - sdbus message. 73 */ 74 void operator()(Context ctx, sdbusplus::message::message& msg) 75 { 76 event.trap(msg); 77 } 78 79 private: 80 T event; 81 }; 82 83 } // namespace monitoring 84 } // namespace dbus 85 } // namespace phosphor 86