xref: /openbmc/phosphor-dbus-monitor/src/snmp_trap.hpp (revision 223c40931e4f413431ab2f84d92c5f404e2d9cf2)
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