11dc9178dSRatan Gupta #pragma once
21dc9178dSRatan Gupta 
31dc9178dSRatan Gupta #include "snmp_client.hpp"
41dc9178dSRatan Gupta 
51dc9178dSRatan Gupta #include <sdbusplus/bus.hpp>
61334b7b3SPatrick Williams #include <xyz/openbmc_project/Network/Client/Create/server.hpp>
71dc9178dSRatan Gupta 
81dc9178dSRatan Gupta #include <string>
91dc9178dSRatan Gupta 
101dc9178dSRatan Gupta namespace phosphor
111dc9178dSRatan Gupta {
121dc9178dSRatan Gupta namespace network
131dc9178dSRatan Gupta {
141dc9178dSRatan Gupta namespace snmp
151dc9178dSRatan Gupta {
16212f53e8SRatan Gupta 
17a7ff3850SRatan Gupta using ClientList = std::map<Id, std::unique_ptr<Client>>;
1834d129a9SRatan Gupta namespace fs = std::filesystem;
191dc9178dSRatan Gupta 
201dc9178dSRatan Gupta namespace details
211dc9178dSRatan Gupta {
221dc9178dSRatan Gupta 
23*87d3edd6SPatrick Williams using CreateIface = sdbusplus::server::object_t<
241dc9178dSRatan Gupta     sdbusplus::xyz::openbmc_project::Network::Client::server::Create>;
251dc9178dSRatan Gupta 
261dc9178dSRatan Gupta } // namespace details
271dc9178dSRatan Gupta 
281dc9178dSRatan Gupta class TestSNMPConfManager;
291dc9178dSRatan Gupta /** @class Manager
301dc9178dSRatan Gupta  *  @brief OpenBMC SNMP config  implementation.
311dc9178dSRatan Gupta  */
321dc9178dSRatan Gupta class ConfManager : public details::CreateIface
331dc9178dSRatan Gupta {
341dc9178dSRatan Gupta   public:
351dc9178dSRatan Gupta     ConfManager() = delete;
361dc9178dSRatan Gupta     ConfManager(const ConfManager&) = delete;
371dc9178dSRatan Gupta     ConfManager& operator=(const ConfManager&) = delete;
381dc9178dSRatan Gupta     ConfManager(ConfManager&&) = delete;
391dc9178dSRatan Gupta     ConfManager& operator=(ConfManager&&) = delete;
401dc9178dSRatan Gupta     virtual ~ConfManager() = default;
411dc9178dSRatan Gupta 
42212f53e8SRatan Gupta     /** @brief Constructor to put object onto bus at a D-Bus path.
431dc9178dSRatan Gupta      *  @param[in] bus - Bus to attach to.
441dc9178dSRatan Gupta      *  @param[in] objPath - Path to attach at.
451dc9178dSRatan Gupta      */
46*87d3edd6SPatrick Williams     ConfManager(sdbusplus::bus_t& bus, const char* objPath);
471dc9178dSRatan Gupta 
481dc9178dSRatan Gupta     /** @brief Function to create snmp manager details D-Bus object.
491dc9178dSRatan Gupta      *  @param[in] address- IP address/Hostname.
501dc9178dSRatan Gupta      *  @param[in] port - network port.
51d84e327dSRatan Gupta      *  @returns D-Bus object path
521dc9178dSRatan Gupta      */
53d84e327dSRatan Gupta     std::string client(std::string address, uint16_t port) override;
541dc9178dSRatan Gupta 
55a7ff3850SRatan Gupta     /* @brief delete the D-Bus object of the given ID.
56a7ff3850SRatan Gupta      * @param[in] id - client identifier.
571dc9178dSRatan Gupta      */
58a7ff3850SRatan Gupta     void deleteSNMPClient(Id id);
591dc9178dSRatan Gupta 
60212f53e8SRatan Gupta     /** @brief Construct manager/client D-Bus objects from their persisted
61212f53e8SRatan Gupta      *         representations.
62212f53e8SRatan Gupta      */
63212f53e8SRatan Gupta     void restoreClients();
64212f53e8SRatan Gupta 
659c4fed6dSRatan Gupta     /** @brief Check if client is already configured or not.
669c4fed6dSRatan Gupta      *
679c4fed6dSRatan Gupta      *  @param[in] address - SNMP manager address.
689c4fed6dSRatan Gupta      *  @param[in] port -    SNMP manager port.
699c4fed6dSRatan Gupta      *
709c4fed6dSRatan Gupta      *  @return throw exception if client is already configured.
719c4fed6dSRatan Gupta      */
729c4fed6dSRatan Gupta     void checkClientConfigured(const std::string& address, uint16_t port);
739c4fed6dSRatan Gupta 
74212f53e8SRatan Gupta     /** @brief location of the persisted D-Bus object.*/
75212f53e8SRatan Gupta     fs::path dbusPersistentLocation;
76212f53e8SRatan Gupta 
771dc9178dSRatan Gupta   private:
781dc9178dSRatan Gupta     /** @brief sdbusplus DBus bus object. */
79*87d3edd6SPatrick Williams     sdbusplus::bus_t& bus;
801dc9178dSRatan Gupta 
811dc9178dSRatan Gupta     /** @brief Path of Object. */
821dc9178dSRatan Gupta     std::string objectPath;
831dc9178dSRatan Gupta 
84a7ff3850SRatan Gupta     /** @brief map of SNMP Client dbus objects and their ID */
851dc9178dSRatan Gupta     ClientList clients;
861dc9178dSRatan Gupta 
87a7ff3850SRatan Gupta     /** @brief Id of the last SNMP manager entry */
88a7ff3850SRatan Gupta     Id lastClientId = 0;
89a7ff3850SRatan Gupta 
901dc9178dSRatan Gupta     friend class TestSNMPConfManager;
911dc9178dSRatan Gupta };
921dc9178dSRatan Gupta 
931dc9178dSRatan Gupta } // namespace snmp
941dc9178dSRatan Gupta } // namespace network
951dc9178dSRatan Gupta } // namespace phosphor
96