xref: /openbmc/phosphor-networkd/src/ipaddress.hpp (revision 9b2a20d3cfa1131521456b9ebfde7a7bb8b234bb)
11bbe3d1eSWilliam A. Kennington III #pragma once
2c2e5e0e9SWilliam A. Kennington III #include "types.hpp"
31bbe3d1eSWilliam A. Kennington III 
41bbe3d1eSWilliam A. Kennington III #include <sdbusplus/bus.hpp>
559e5b91dSWilliam A. Kennington III #include <sdbusplus/message/native_types.hpp>
61bbe3d1eSWilliam A. Kennington III #include <sdbusplus/server/object.hpp>
79ede1b74SWilliam A. Kennington III #include <stdplus/pinned.hpp>
81bbe3d1eSWilliam A. Kennington III #include <xyz/openbmc_project/Network/IP/server.hpp>
91bbe3d1eSWilliam A. Kennington III #include <xyz/openbmc_project/Object/Delete/server.hpp>
101bbe3d1eSWilliam A. Kennington III 
1189d734b9SPatrick Williams #include <string_view>
1289d734b9SPatrick Williams 
131bbe3d1eSWilliam A. Kennington III namespace phosphor
141bbe3d1eSWilliam A. Kennington III {
151bbe3d1eSWilliam A. Kennington III namespace network
161bbe3d1eSWilliam A. Kennington III {
171bbe3d1eSWilliam A. Kennington III 
18c38b0710SPatrick Williams using IPIfaces = sdbusplus::server::object_t<
191bbe3d1eSWilliam A. Kennington III     sdbusplus::xyz::openbmc_project::Network::server::IP,
201bbe3d1eSWilliam A. Kennington III     sdbusplus::xyz::openbmc_project::Object::server::Delete>;
211bbe3d1eSWilliam A. Kennington III 
221bbe3d1eSWilliam A. Kennington III using IP = sdbusplus::xyz::openbmc_project::Network::server::IP;
231bbe3d1eSWilliam A. Kennington III 
241bbe3d1eSWilliam A. Kennington III class EthernetInterface;
251bbe3d1eSWilliam A. Kennington III 
261bbe3d1eSWilliam A. Kennington III /** @class IPAddress
271bbe3d1eSWilliam A. Kennington III  *  @brief OpenBMC IPAddress implementation.
281bbe3d1eSWilliam A. Kennington III  *  @details A concrete implementation for the
291bbe3d1eSWilliam A. Kennington III  *  xyz.openbmc_project.Network.IPProtocol
301bbe3d1eSWilliam A. Kennington III  *  xyz.openbmc_project.Network.IP Dbus interfaces.
311bbe3d1eSWilliam A. Kennington III  */
321bbe3d1eSWilliam A. Kennington III class IPAddress : public IPIfaces
331bbe3d1eSWilliam A. Kennington III {
341bbe3d1eSWilliam A. Kennington III   public:
351bbe3d1eSWilliam A. Kennington III     /** @brief Constructor to put object onto bus at a dbus path.
361bbe3d1eSWilliam A. Kennington III      *  @param[in] bus - Bus to attach to.
3759e5b91dSWilliam A. Kennington III      *  @param[in] objRoot - Path to attach at.
381bbe3d1eSWilliam A. Kennington III      *  @param[in] parent - Parent object.
3959e5b91dSWilliam A. Kennington III      *  @param[in] addr - The ip address and prefix.
401bbe3d1eSWilliam A. Kennington III      *  @param[in] origin - origin of ipaddress(dhcp/static/SLAAC/LinkLocal).
411bbe3d1eSWilliam A. Kennington III      */
4259e5b91dSWilliam A. Kennington III     IPAddress(sdbusplus::bus_t& bus, std::string_view objRoot,
43*9b2a20d3SWilliam A. Kennington III               stdplus::PinnedRef<EthernetInterface> parent,
44*9b2a20d3SWilliam A. Kennington III               stdplus::SubnetAny addr, IP::AddressOrigin origin);
451bbe3d1eSWilliam A. Kennington III 
465e72d085SWilliam A. Kennington III     std::string address(std::string ipAddress) override;
475e72d085SWilliam A. Kennington III     uint8_t prefixLength(uint8_t) override;
485e72d085SWilliam A. Kennington III     std::string gateway(std::string gateway) override;
495e72d085SWilliam A. Kennington III     IP::Protocol type(IP::Protocol type) override;
505e72d085SWilliam A. Kennington III     IP::AddressOrigin origin(IP::AddressOrigin origin) override;
515e72d085SWilliam A. Kennington III 
521bbe3d1eSWilliam A. Kennington III     /** @brief Delete this d-bus object.
531bbe3d1eSWilliam A. Kennington III      */
541bbe3d1eSWilliam A. Kennington III     void delete_() override;
551bbe3d1eSWilliam A. Kennington III 
561bbe3d1eSWilliam A. Kennington III     using IP::address;
571bbe3d1eSWilliam A. Kennington III     using IP::gateway;
581bbe3d1eSWilliam A. Kennington III     using IP::origin;
591bbe3d1eSWilliam A. Kennington III     using IP::prefixLength;
601bbe3d1eSWilliam A. Kennington III     using IP::type;
611bbe3d1eSWilliam A. Kennington III 
getObjPath() const6259e5b91dSWilliam A. Kennington III     inline const auto& getObjPath() const
6359e5b91dSWilliam A. Kennington III     {
6459e5b91dSWilliam A. Kennington III         return objPath;
6559e5b91dSWilliam A. Kennington III     }
6659e5b91dSWilliam A. Kennington III 
671bbe3d1eSWilliam A. Kennington III   private:
681bbe3d1eSWilliam A. Kennington III     /** @brief Parent Object. */
699ede1b74SWilliam A. Kennington III     stdplus::PinnedRef<EthernetInterface> parent;
7059e5b91dSWilliam A. Kennington III 
7159e5b91dSWilliam A. Kennington III     /** @brief Dbus object path */
7259e5b91dSWilliam A. Kennington III     sdbusplus::message::object_path objPath;
7359e5b91dSWilliam A. Kennington III 
7459e5b91dSWilliam A. Kennington III     IPAddress(sdbusplus::bus_t& bus, sdbusplus::message::object_path objPath,
75*9b2a20d3SWilliam A. Kennington III               stdplus::PinnedRef<EthernetInterface> parent,
76*9b2a20d3SWilliam A. Kennington III               stdplus::SubnetAny addr, IP::AddressOrigin origin);
771bbe3d1eSWilliam A. Kennington III };
781bbe3d1eSWilliam A. Kennington III 
791bbe3d1eSWilliam A. Kennington III } // namespace network
801bbe3d1eSWilliam A. Kennington III } // namespace phosphor
81