1*1dc9178dSRatan Gupta #pragma once
2*1dc9178dSRatan Gupta 
3*1dc9178dSRatan Gupta #include "snmp_client.hpp"
4*1dc9178dSRatan Gupta 
5*1dc9178dSRatan Gupta #include <xyz/openbmc_project/Network/Client/Create/server.hpp>
6*1dc9178dSRatan Gupta #include <sdbusplus/bus.hpp>
7*1dc9178dSRatan Gupta 
8*1dc9178dSRatan Gupta #include <string>
9*1dc9178dSRatan Gupta 
10*1dc9178dSRatan Gupta namespace phosphor
11*1dc9178dSRatan Gupta {
12*1dc9178dSRatan Gupta namespace network
13*1dc9178dSRatan Gupta {
14*1dc9178dSRatan Gupta namespace snmp
15*1dc9178dSRatan Gupta {
16*1dc9178dSRatan Gupta using IPAddress = std::string;
17*1dc9178dSRatan Gupta using ClientList = std::map<IPAddress, std::unique_ptr<Client>>;
18*1dc9178dSRatan Gupta 
19*1dc9178dSRatan Gupta namespace details
20*1dc9178dSRatan Gupta {
21*1dc9178dSRatan Gupta 
22*1dc9178dSRatan Gupta using CreateIface = sdbusplus::server::object::object<
23*1dc9178dSRatan Gupta     sdbusplus::xyz::openbmc_project::Network::Client::server::Create>;
24*1dc9178dSRatan Gupta 
25*1dc9178dSRatan Gupta } // namespace details
26*1dc9178dSRatan Gupta 
27*1dc9178dSRatan Gupta class TestSNMPConfManager;
28*1dc9178dSRatan Gupta /** @class Manager
29*1dc9178dSRatan Gupta  *  @brief OpenBMC SNMP config  implementation.
30*1dc9178dSRatan Gupta  */
31*1dc9178dSRatan Gupta class ConfManager : public details::CreateIface
32*1dc9178dSRatan Gupta {
33*1dc9178dSRatan Gupta   public:
34*1dc9178dSRatan Gupta     ConfManager() = delete;
35*1dc9178dSRatan Gupta     ConfManager(const ConfManager&) = delete;
36*1dc9178dSRatan Gupta     ConfManager& operator=(const ConfManager&) = delete;
37*1dc9178dSRatan Gupta     ConfManager(ConfManager&&) = delete;
38*1dc9178dSRatan Gupta     ConfManager& operator=(ConfManager&&) = delete;
39*1dc9178dSRatan Gupta     virtual ~ConfManager() = default;
40*1dc9178dSRatan Gupta 
41*1dc9178dSRatan Gupta     /** @brief Constructor to put object onto bus at a dbus path.
42*1dc9178dSRatan Gupta      *  @param[in] bus - Bus to attach to.
43*1dc9178dSRatan Gupta      *  @param[in] objPath - Path to attach at.
44*1dc9178dSRatan Gupta      */
45*1dc9178dSRatan Gupta     ConfManager(sdbusplus::bus::bus& bus, const char* objPath);
46*1dc9178dSRatan Gupta 
47*1dc9178dSRatan Gupta     /** @brief Function to create snmp manager details D-Bus object.
48*1dc9178dSRatan Gupta      *  @param[in] address- IP address/Hostname.
49*1dc9178dSRatan Gupta      *  @param[in] port - network port.
50*1dc9178dSRatan Gupta      */
51*1dc9178dSRatan Gupta     void client(std::string address, uint16_t port) override;
52*1dc9178dSRatan Gupta 
53*1dc9178dSRatan Gupta     /* @brief delete the dbus object of the given ipaddress.
54*1dc9178dSRatan Gupta      * @param[in] address - IP address/Hostname.
55*1dc9178dSRatan Gupta      */
56*1dc9178dSRatan Gupta     void deleteSNMPClient(const std::string& address);
57*1dc9178dSRatan Gupta 
58*1dc9178dSRatan Gupta   protected:
59*1dc9178dSRatan Gupta     /** @brief generates the id by doing hash of ipaddress, port
60*1dc9178dSRatan Gupta      *  @param[in] address - IP address/Hostname.
61*1dc9178dSRatan Gupta      *  @param[in] port - network port.
62*1dc9178dSRatan Gupta      *  @return hash string.
63*1dc9178dSRatan Gupta      */
64*1dc9178dSRatan Gupta     static std::string generateId(const std::string& address, uint16_t port);
65*1dc9178dSRatan Gupta 
66*1dc9178dSRatan Gupta   private:
67*1dc9178dSRatan Gupta     /** @brief sdbusplus DBus bus object. */
68*1dc9178dSRatan Gupta     sdbusplus::bus::bus& bus;
69*1dc9178dSRatan Gupta 
70*1dc9178dSRatan Gupta     /** @brief Path of Object. */
71*1dc9178dSRatan Gupta     std::string objectPath;
72*1dc9178dSRatan Gupta 
73*1dc9178dSRatan Gupta     /** @brief map of IPAddress dbus objects and their names */
74*1dc9178dSRatan Gupta     ClientList clients;
75*1dc9178dSRatan Gupta 
76*1dc9178dSRatan Gupta     friend class TestSNMPConfManager;
77*1dc9178dSRatan Gupta };
78*1dc9178dSRatan Gupta 
79*1dc9178dSRatan Gupta } // namespace snmp
80*1dc9178dSRatan Gupta } // namespace network
81*1dc9178dSRatan Gupta } // namespace phosphor
82