xref: /openbmc/phosphor-snmp/snmp_client.hpp (revision c0d7cd47d4b198f752be3f497bc3c9ae98bb7141)
11dc9178dSRatan Gupta #pragma once
21dc9178dSRatan Gupta #include "xyz/openbmc_project/Network/Client/server.hpp"
31dc9178dSRatan Gupta #include "xyz/openbmc_project/Object/Delete/server.hpp"
41dc9178dSRatan Gupta 
51dc9178dSRatan Gupta #include <sdbusplus/bus.hpp>
61dc9178dSRatan Gupta #include <sdbusplus/server/object.hpp>
71dc9178dSRatan Gupta 
834d129a9SRatan Gupta #include <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 {
171dc9178dSRatan Gupta 
181dc9178dSRatan Gupta class ConfManager;
191dc9178dSRatan Gupta 
2087d3edd6SPatrick Williams using Ifaces = sdbusplus::server::object_t<
211dc9178dSRatan Gupta     sdbusplus::xyz::openbmc_project::Network::server::Client,
221dc9178dSRatan Gupta     sdbusplus::xyz::openbmc_project::Object::server::Delete>;
231dc9178dSRatan Gupta 
24a7ff3850SRatan Gupta using Id = size_t;
25a7ff3850SRatan Gupta 
261dc9178dSRatan Gupta /** @class Client
271dc9178dSRatan Gupta  *  @brief represents the snmp client configuration
281dc9178dSRatan Gupta  *  @details A concrete implementation for the
291dc9178dSRatan Gupta  *  xyz.openbmc_project.Network.Client Dbus interface.
301dc9178dSRatan Gupta  */
311dc9178dSRatan Gupta class Client : public Ifaces
321dc9178dSRatan Gupta {
331dc9178dSRatan Gupta   public:
341dc9178dSRatan Gupta     Client() = delete;
351dc9178dSRatan Gupta     Client(const Client&) = delete;
361dc9178dSRatan Gupta     Client& operator=(const Client&) = delete;
371dc9178dSRatan Gupta     Client(Client&&) = delete;
381dc9178dSRatan Gupta     Client& operator=(Client&&) = delete;
391dc9178dSRatan Gupta     virtual ~Client() = default;
401dc9178dSRatan Gupta 
411dc9178dSRatan Gupta     /** @brief Constructor to put object onto bus at a dbus path.
421dc9178dSRatan Gupta      *  @param[in] bus - Bus to attach to.
431dc9178dSRatan Gupta      *  @param[in] objPath - Path to attach at.
441dc9178dSRatan Gupta      *  @param[in] parent - Parent D-bus Object.
451dc9178dSRatan Gupta      *  @param[in] address - IPaddress/Hostname.
461dc9178dSRatan Gupta      *  @param[in] port - network port.
471dc9178dSRatan Gupta      */
4887d3edd6SPatrick Williams     Client(sdbusplus::bus_t& bus, const char* objPath, ConfManager& parent,
491dc9178dSRatan Gupta            const std::string& address, uint16_t port);
501dc9178dSRatan Gupta 
51212f53e8SRatan Gupta     /** @brief Constructor to put object onto bus at a dbus path.
52212f53e8SRatan Gupta      *  @param[in] bus - Bus to attach to.
53212f53e8SRatan Gupta      *  @param[in] objPath - Path to attach at.
54212f53e8SRatan Gupta      *  @param[in] parent - Parent D-bus Object.
55212f53e8SRatan Gupta      */
Client(sdbusplus::bus_t & bus,const char * objPath,ConfManager & parent)5687d3edd6SPatrick Williams     Client(sdbusplus::bus_t& bus, const char* objPath, ConfManager& parent) :
57b9b4c7dbSPatrick Williams         Ifaces(bus, objPath, Ifaces::action::defer_emit),
5834d129a9SRatan Gupta         id(std::stol(std::filesystem::path(objPath).filename())), parent(parent)
591334b7b3SPatrick Williams     {}
60212f53e8SRatan Gupta 
619d18e562SRatan Gupta     /** @brief Update the address of the object.
629d18e562SRatan Gupta      *
639d18e562SRatan Gupta      *  @param[in] value - IP address
649d18e562SRatan Gupta      *
659d18e562SRatan Gupta      *  @return On success the updated IP address
669d18e562SRatan Gupta      */
679d18e562SRatan Gupta     std::string address(std::string value) override;
689d18e562SRatan Gupta 
699d18e562SRatan Gupta     /** @brief Update the port
709d18e562SRatan Gupta      *
719d18e562SRatan Gupta      *  @param[in] value - port number
729d18e562SRatan Gupta      *
739d18e562SRatan Gupta      *  @return On success the updated port number
749d18e562SRatan Gupta      */
759d18e562SRatan Gupta     uint16_t port(uint16_t value) override;
769d18e562SRatan Gupta 
779d18e562SRatan Gupta     using sdbusplus::xyz::openbmc_project::Network::server::Client::address;
789d18e562SRatan Gupta 
799d18e562SRatan Gupta     using sdbusplus::xyz::openbmc_project::Network::server::Client::port;
809d18e562SRatan Gupta 
811dc9178dSRatan Gupta     /** @brief Delete this d-bus object.
821dc9178dSRatan Gupta      */
831dc9178dSRatan Gupta     void delete_() override;
841dc9178dSRatan Gupta 
85a7ff3850SRatan Gupta     /** Client ID. */
86a7ff3850SRatan Gupta     Id id;
87*c0d7cd47SGeorge Liu 
88*c0d7cd47SGeorge Liu   private:
891dc9178dSRatan Gupta     /** @brief Parent D-Bus Object. */
901dc9178dSRatan Gupta     ConfManager& parent;
911dc9178dSRatan Gupta };
921dc9178dSRatan Gupta 
931dc9178dSRatan Gupta } // namespace snmp
941dc9178dSRatan Gupta } // namespace network
951dc9178dSRatan Gupta } // namespace phosphor
96