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>>; 18*34d129a9SRatan Gupta namespace fs = std::filesystem; 191dc9178dSRatan Gupta 201dc9178dSRatan Gupta namespace details 211dc9178dSRatan Gupta { 221dc9178dSRatan Gupta 231dc9178dSRatan Gupta using CreateIface = sdbusplus::server::object::object< 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 */ 461dc9178dSRatan Gupta ConfManager(sdbusplus::bus::bus& 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. */ 791dc9178dSRatan Gupta sdbusplus::bus::bus& 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