blob: 34169b8e15027b21849777e19c39b0113cfedf4f [file] [log] [blame]
Marri Devender Rao70aafbb2018-04-12 01:11:48 -05001#pragma once
2#include "callback.hpp"
3
4namespace phosphor
5{
6namespace dbus
7{
8namespace monitoring
9{
10/** @class Trap
11 * @brief Raises SNMP trap
12 */
13class 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 */
31class 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 */
Patrick Venture3d6d3182018-08-31 09:33:09 -070050template <typename T>
51class SNMPTrap : public Callback
Marri Devender Rao70aafbb2018-04-12 01:11:48 -050052{
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()
George Liu3fe976c2022-06-21 09:37:04 +080060 {}
Marri Devender Rao70aafbb2018-04-12 01:11:48 -050061
62 /** @brief Callback interface implementation.
63 * @param[in] ctc - context.
64 */
65 void operator()(Context ctx)
George Liu3fe976c2022-06-21 09:37:04 +080066 {}
Marri Devender Rao70aafbb2018-04-12 01:11:48 -050067
68 /** @brief Callback interface implementation.
69 * @param[in] ctc - context.
70 * @param[in] msg - sdbus message.
71 */
72 void operator()(Context ctx, sdbusplus::message::message& msg)
73 {
74 event.trap(msg);
75 }
76
77 private:
78 T event;
79};
80
81} // namespace monitoring
82} // namespace dbus
83} // namespace phosphor