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