11dc9178dSRatan Gupta #pragma once
21dc9178dSRatan Gupta 
31dc9178dSRatan Gupta #include "snmp_client.hpp"
41dc9178dSRatan Gupta 
51dc9178dSRatan Gupta #include <sdbusplus/bus.hpp>
6*1334b7b3SPatrick Williams #include <xyz/openbmc_project/Network/Client/Create/server.hpp>
71dc9178dSRatan Gupta 
8212f53e8SRatan 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 {
17212f53e8SRatan Gupta 
18a7ff3850SRatan Gupta using ClientList = std::map<Id, std::unique_ptr<Client>>;
19212f53e8SRatan Gupta namespace fs = std::experimental::filesystem;
201dc9178dSRatan Gupta 
211dc9178dSRatan Gupta namespace details
221dc9178dSRatan Gupta {
231dc9178dSRatan Gupta 
241dc9178dSRatan Gupta using CreateIface = sdbusplus::server::object::object<
251dc9178dSRatan Gupta     sdbusplus::xyz::openbmc_project::Network::Client::server::Create>;
261dc9178dSRatan Gupta 
271dc9178dSRatan Gupta } // namespace details
281dc9178dSRatan Gupta 
291dc9178dSRatan Gupta class TestSNMPConfManager;
301dc9178dSRatan Gupta /** @class Manager
311dc9178dSRatan Gupta  *  @brief OpenBMC SNMP config  implementation.
321dc9178dSRatan Gupta  */
331dc9178dSRatan Gupta class ConfManager : public details::CreateIface
341dc9178dSRatan Gupta {
351dc9178dSRatan Gupta   public:
361dc9178dSRatan Gupta     ConfManager() = delete;
371dc9178dSRatan Gupta     ConfManager(const ConfManager&) = delete;
381dc9178dSRatan Gupta     ConfManager& operator=(const ConfManager&) = delete;
391dc9178dSRatan Gupta     ConfManager(ConfManager&&) = delete;
401dc9178dSRatan Gupta     ConfManager& operator=(ConfManager&&) = delete;
411dc9178dSRatan Gupta     virtual ~ConfManager() = default;
421dc9178dSRatan Gupta 
43212f53e8SRatan Gupta     /** @brief Constructor to put object onto bus at a D-Bus path.
441dc9178dSRatan Gupta      *  @param[in] bus - Bus to attach to.
451dc9178dSRatan Gupta      *  @param[in] objPath - Path to attach at.
461dc9178dSRatan Gupta      */
471dc9178dSRatan Gupta     ConfManager(sdbusplus::bus::bus& bus, const char* objPath);
481dc9178dSRatan Gupta 
491dc9178dSRatan Gupta     /** @brief Function to create snmp manager details D-Bus object.
501dc9178dSRatan Gupta      *  @param[in] address- IP address/Hostname.
511dc9178dSRatan Gupta      *  @param[in] port - network port.
52d84e327dSRatan Gupta      *  @returns D-Bus object path
531dc9178dSRatan Gupta      */
54d84e327dSRatan Gupta     std::string client(std::string address, uint16_t port) override;
551dc9178dSRatan Gupta 
56a7ff3850SRatan Gupta     /* @brief delete the D-Bus object of the given ID.
57a7ff3850SRatan Gupta      * @param[in] id - client identifier.
581dc9178dSRatan Gupta      */
59a7ff3850SRatan Gupta     void deleteSNMPClient(Id id);
601dc9178dSRatan Gupta 
61212f53e8SRatan Gupta     /** @brief Construct manager/client D-Bus objects from their persisted
62212f53e8SRatan Gupta      *         representations.
63212f53e8SRatan Gupta      */
64212f53e8SRatan Gupta     void restoreClients();
65212f53e8SRatan Gupta 
669c4fed6dSRatan Gupta     /** @brief Check if client is already configured or not.
679c4fed6dSRatan Gupta      *
689c4fed6dSRatan Gupta      *  @param[in] address - SNMP manager address.
699c4fed6dSRatan Gupta      *  @param[in] port -    SNMP manager port.
709c4fed6dSRatan Gupta      *
719c4fed6dSRatan Gupta      *  @return throw exception if client is already configured.
729c4fed6dSRatan Gupta      */
739c4fed6dSRatan Gupta     void checkClientConfigured(const std::string& address, uint16_t port);
749c4fed6dSRatan Gupta 
75212f53e8SRatan Gupta     /** @brief location of the persisted D-Bus object.*/
76212f53e8SRatan Gupta     fs::path dbusPersistentLocation;
77212f53e8SRatan Gupta 
781dc9178dSRatan Gupta   private:
791dc9178dSRatan Gupta     /** @brief sdbusplus DBus bus object. */
801dc9178dSRatan Gupta     sdbusplus::bus::bus& bus;
811dc9178dSRatan Gupta 
821dc9178dSRatan Gupta     /** @brief Path of Object. */
831dc9178dSRatan Gupta     std::string objectPath;
841dc9178dSRatan Gupta 
85a7ff3850SRatan Gupta     /** @brief map of SNMP Client dbus objects and their ID */
861dc9178dSRatan Gupta     ClientList clients;
871dc9178dSRatan Gupta 
88a7ff3850SRatan Gupta     /** @brief Id of the last SNMP manager entry */
89a7ff3850SRatan Gupta     Id lastClientId = 0;
90a7ff3850SRatan Gupta 
911dc9178dSRatan Gupta     friend class TestSNMPConfManager;
921dc9178dSRatan Gupta };
931dc9178dSRatan Gupta 
941dc9178dSRatan Gupta } // namespace snmp
951dc9178dSRatan Gupta } // namespace network
961dc9178dSRatan Gupta } // namespace phosphor
97