1 #pragma once
2 #include "types.hpp"
3 
4 #include <sdbusplus/bus.hpp>
5 #include <sdbusplus/message/native_types.hpp>
6 #include <sdbusplus/server/object.hpp>
7 #include <stdplus/pinned.hpp>
8 #include <xyz/openbmc_project/Network/Neighbor/server.hpp>
9 #include <xyz/openbmc_project/Object/Delete/server.hpp>
10 
11 #include <string_view>
12 
13 namespace phosphor
14 {
15 namespace network
16 {
17 
18 using NeighborIntf = sdbusplus::xyz::openbmc_project::Network::server::Neighbor;
19 
20 using NeighborObj = sdbusplus::server::object_t<
21     NeighborIntf, sdbusplus::xyz::openbmc_project::Object::server::Delete>;
22 
23 class EthernetInterface;
24 
25 /** @class Neighbor
26  *  @brief OpenBMC network neighbor implementation.
27  *  @details A concrete implementation for the
28  *  xyz.openbmc_project.Network.Neighbor dbus interface.
29  */
30 class Neighbor : public NeighborObj
31 {
32   public:
33     /** @brief Constructor to put object onto bus at a dbus path.
34      *  @param[in] bus - Bus to attach to.
35      *  @param[in] objRoot - Path to attach at.
36      *  @param[in] parent - Parent object.
37      *  @param[in] addr - IP address.
38      *  @param[in] lladdr - Low level MAC address.
39      *  @param[in] state - The state of the neighbor entry.
40      */
41     Neighbor(sdbusplus::bus_t& bus, std::string_view objRoot,
42              stdplus::PinnedRef<EthernetInterface> parent,
43              stdplus::InAnyAddr addr, stdplus::EtherAddr lladdr, State state);
44 
45     /** @brief Delete this d-bus object.
46      */
47     void delete_() override;
48 
49     using NeighborObj::ipAddress;
50     std::string ipAddress(std::string) override;
51     using NeighborObj::macAddress;
52     std::string macAddress(std::string) override;
53     using NeighborObj::state;
54     State state(State) override;
55 
56     inline const auto& getObjPath() const
57     {
58         return objPath;
59     }
60 
61   private:
62     /** @brief Parent Object. */
63     stdplus::PinnedRef<EthernetInterface> parent;
64 
65     /** @brief Dbus object path */
66     sdbusplus::message::object_path objPath;
67 
68     Neighbor(sdbusplus::bus_t& bus, sdbusplus::message::object_path objPath,
69              stdplus::PinnedRef<EthernetInterface> parent,
70              stdplus::InAnyAddr addr, stdplus::EtherAddr lladdr, State state);
71 };
72 
73 } // namespace network
74 } // namespace phosphor
75