11dc9178dSRatan Gupta #pragma once
21dc9178dSRatan Gupta 
31dc9178dSRatan Gupta #include "snmp_client.hpp"
41dc9178dSRatan Gupta 
51dc9178dSRatan Gupta #include <xyz/openbmc_project/Network/Client/Create/server.hpp>
61dc9178dSRatan Gupta #include <sdbusplus/bus.hpp>
71dc9178dSRatan Gupta 
8*212f53e8SRatan Gupta #include <experimental/filesystem>
91dc9178dSRatan Gupta #include <string>
101dc9178dSRatan Gupta 
111dc9178dSRatan Gupta namespace phosphor
121dc9178dSRatan Gupta {
131dc9178dSRatan Gupta namespace network
141dc9178dSRatan Gupta {
151dc9178dSRatan Gupta namespace snmp
161dc9178dSRatan Gupta {
17*212f53e8SRatan Gupta 
181dc9178dSRatan Gupta using IPAddress = std::string;
191dc9178dSRatan Gupta using ClientList = std::map<IPAddress, std::unique_ptr<Client>>;
20*212f53e8SRatan Gupta namespace fs = std::experimental::filesystem;
211dc9178dSRatan Gupta 
221dc9178dSRatan Gupta namespace details
231dc9178dSRatan Gupta {
241dc9178dSRatan Gupta 
251dc9178dSRatan Gupta using CreateIface = sdbusplus::server::object::object<
261dc9178dSRatan Gupta     sdbusplus::xyz::openbmc_project::Network::Client::server::Create>;
271dc9178dSRatan Gupta 
281dc9178dSRatan Gupta } // namespace details
291dc9178dSRatan Gupta 
301dc9178dSRatan Gupta class TestSNMPConfManager;
311dc9178dSRatan Gupta /** @class Manager
321dc9178dSRatan Gupta  *  @brief OpenBMC SNMP config  implementation.
331dc9178dSRatan Gupta  */
341dc9178dSRatan Gupta class ConfManager : public details::CreateIface
351dc9178dSRatan Gupta {
361dc9178dSRatan Gupta   public:
371dc9178dSRatan Gupta     ConfManager() = delete;
381dc9178dSRatan Gupta     ConfManager(const ConfManager&) = delete;
391dc9178dSRatan Gupta     ConfManager& operator=(const ConfManager&) = delete;
401dc9178dSRatan Gupta     ConfManager(ConfManager&&) = delete;
411dc9178dSRatan Gupta     ConfManager& operator=(ConfManager&&) = delete;
421dc9178dSRatan Gupta     virtual ~ConfManager() = default;
431dc9178dSRatan Gupta 
44*212f53e8SRatan Gupta     /** @brief Constructor to put object onto bus at a D-Bus path.
451dc9178dSRatan Gupta      *  @param[in] bus - Bus to attach to.
461dc9178dSRatan Gupta      *  @param[in] objPath - Path to attach at.
471dc9178dSRatan Gupta      */
481dc9178dSRatan Gupta     ConfManager(sdbusplus::bus::bus& bus, const char* objPath);
491dc9178dSRatan Gupta 
501dc9178dSRatan Gupta     /** @brief Function to create snmp manager details D-Bus object.
511dc9178dSRatan Gupta      *  @param[in] address- IP address/Hostname.
521dc9178dSRatan Gupta      *  @param[in] port - network port.
531dc9178dSRatan Gupta      */
541dc9178dSRatan Gupta     void client(std::string address, uint16_t port) override;
551dc9178dSRatan Gupta 
56*212f53e8SRatan Gupta     /* @brief delete the D-Bus object of the given ipaddress.
571dc9178dSRatan Gupta      * @param[in] address - IP address/Hostname.
581dc9178dSRatan Gupta      */
591dc9178dSRatan Gupta     void deleteSNMPClient(const std::string& address);
601dc9178dSRatan Gupta 
61*212f53e8SRatan Gupta     /** @brief Construct manager/client D-Bus objects from their persisted
62*212f53e8SRatan Gupta      *         representations.
63*212f53e8SRatan Gupta      */
64*212f53e8SRatan Gupta     void restoreClients();
65*212f53e8SRatan Gupta 
66*212f53e8SRatan Gupta     /** @brief location of the persisted D-Bus object.*/
67*212f53e8SRatan Gupta     fs::path dbusPersistentLocation;
68*212f53e8SRatan Gupta 
691dc9178dSRatan Gupta   protected:
701dc9178dSRatan Gupta     /** @brief generates the id by doing hash of ipaddress, port
711dc9178dSRatan Gupta      *  @param[in] address - IP address/Hostname.
721dc9178dSRatan Gupta      *  @param[in] port - network port.
731dc9178dSRatan Gupta      *  @return hash string.
741dc9178dSRatan Gupta      */
751dc9178dSRatan Gupta     static std::string generateId(const std::string& address, uint16_t port);
761dc9178dSRatan Gupta 
771dc9178dSRatan Gupta   private:
781dc9178dSRatan Gupta     /** @brief sdbusplus DBus bus object. */
791dc9178dSRatan Gupta     sdbusplus::bus::bus& bus;
801dc9178dSRatan Gupta 
811dc9178dSRatan Gupta     /** @brief Path of Object. */
821dc9178dSRatan Gupta     std::string objectPath;
831dc9178dSRatan Gupta 
841dc9178dSRatan Gupta     /** @brief map of IPAddress dbus objects and their names */
851dc9178dSRatan Gupta     ClientList clients;
861dc9178dSRatan Gupta 
871dc9178dSRatan Gupta     friend class TestSNMPConfManager;
881dc9178dSRatan Gupta };
891dc9178dSRatan Gupta 
901dc9178dSRatan Gupta } // namespace snmp
911dc9178dSRatan Gupta } // namespace network
921dc9178dSRatan Gupta } // namespace phosphor
93