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