11bbe3d1eSWilliam A. Kennington III #include "neighbor.hpp"
21bbe3d1eSWilliam A. Kennington III 
31bbe3d1eSWilliam A. Kennington III #include "ethernet_interface.hpp"
4434a943cSWilliam A. Kennington III #include "network_manager.hpp"
51bbe3d1eSWilliam A. Kennington III 
68e61ca9dSWilliam A. Kennington III #include <phosphor-logging/elog-errors.hpp>
78e61ca9dSWilliam A. Kennington III #include <phosphor-logging/elog.hpp>
8be3bd2fcSWilliam A. Kennington III #include <string>
98e61ca9dSWilliam A. Kennington III #include <xyz/openbmc_project/Common/error.hpp>
101bbe3d1eSWilliam A. Kennington III 
111bbe3d1eSWilliam A. Kennington III namespace phosphor
121bbe3d1eSWilliam A. Kennington III {
131bbe3d1eSWilliam A. Kennington III namespace network
141bbe3d1eSWilliam A. Kennington III {
151bbe3d1eSWilliam A. Kennington III 
16434a943cSWilliam A. Kennington III static auto makeObjPath(std::string_view root, InAddrAny addr)
171bbe3d1eSWilliam A. Kennington III {
18434a943cSWilliam A. Kennington III     auto ret = sdbusplus::message::object_path(std::string(root));
19434a943cSWilliam A. Kennington III     ret /= std::to_string(addr);
20434a943cSWilliam A. Kennington III     return ret;
21434a943cSWilliam A. Kennington III }
22434a943cSWilliam A. Kennington III 
23434a943cSWilliam A. Kennington III Neighbor::Neighbor(sdbusplus::bus_t& bus, std::string_view objRoot,
24*9ede1b74SWilliam A. Kennington III                    stdplus::PinnedRef<EthernetInterface> parent, InAddrAny addr,
25*9ede1b74SWilliam A. Kennington III                    ether_addr lladdr, State state) :
26434a943cSWilliam A. Kennington III     Neighbor(bus, makeObjPath(objRoot, addr), parent, addr, lladdr, state)
27434a943cSWilliam A. Kennington III {
28434a943cSWilliam A. Kennington III }
29434a943cSWilliam A. Kennington III 
30434a943cSWilliam A. Kennington III Neighbor::Neighbor(sdbusplus::bus_t& bus,
31434a943cSWilliam A. Kennington III                    sdbusplus::message::object_path objPath,
32*9ede1b74SWilliam A. Kennington III                    stdplus::PinnedRef<EthernetInterface> parent, InAddrAny addr,
33*9ede1b74SWilliam A. Kennington III                    ether_addr lladdr, State state) :
34434a943cSWilliam A. Kennington III     NeighborObj(bus, objPath.str.c_str(), NeighborObj::action::defer_emit),
35434a943cSWilliam A. Kennington III     parent(parent), objPath(std::move(objPath))
36434a943cSWilliam A. Kennington III {
37d99e6dbaSWilliam A. Kennington III     NeighborObj::ipAddress(std::to_string(addr), true);
38d99e6dbaSWilliam A. Kennington III     NeighborObj::macAddress(std::to_string(lladdr), true);
39d99e6dbaSWilliam A. Kennington III     NeighborObj::state(state, true);
401bbe3d1eSWilliam A. Kennington III     emit_object_added();
411bbe3d1eSWilliam A. Kennington III }
421bbe3d1eSWilliam A. Kennington III 
431bbe3d1eSWilliam A. Kennington III void Neighbor::delete_()
441bbe3d1eSWilliam A. Kennington III {
45*9ede1b74SWilliam A. Kennington III     auto& neighbors = parent.get().staticNeighbors;
46434a943cSWilliam A. Kennington III     std::unique_ptr<Neighbor> ptr;
47434a943cSWilliam A. Kennington III     for (auto it = neighbors.begin(); it != neighbors.end(); ++it)
48434a943cSWilliam A. Kennington III     {
49434a943cSWilliam A. Kennington III         if (it->second.get() == this)
50434a943cSWilliam A. Kennington III         {
51434a943cSWilliam A. Kennington III             ptr = std::move(it->second);
52434a943cSWilliam A. Kennington III             neighbors.erase(it);
53434a943cSWilliam A. Kennington III             break;
54434a943cSWilliam A. Kennington III         }
55434a943cSWilliam A. Kennington III     }
56434a943cSWilliam A. Kennington III 
57*9ede1b74SWilliam A. Kennington III     parent.get().writeConfigurationFile();
58*9ede1b74SWilliam A. Kennington III     parent.get().manager.get().reloadConfigs();
591bbe3d1eSWilliam A. Kennington III }
601bbe3d1eSWilliam A. Kennington III 
618e61ca9dSWilliam A. Kennington III using sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
628e61ca9dSWilliam A. Kennington III using REASON =
638e61ca9dSWilliam A. Kennington III     phosphor::logging::xyz::openbmc_project::Common::NotAllowed::REASON;
648e61ca9dSWilliam A. Kennington III using phosphor::logging::elog;
658e61ca9dSWilliam A. Kennington III 
668e61ca9dSWilliam A. Kennington III std::string Neighbor::ipAddress(std::string /*ipAddress*/)
678e61ca9dSWilliam A. Kennington III {
688e61ca9dSWilliam A. Kennington III     elog<NotAllowed>(REASON("Property update is not allowed"));
698e61ca9dSWilliam A. Kennington III }
708e61ca9dSWilliam A. Kennington III 
718e61ca9dSWilliam A. Kennington III std::string Neighbor::macAddress(std::string /*macAddress*/)
728e61ca9dSWilliam A. Kennington III {
738e61ca9dSWilliam A. Kennington III     elog<NotAllowed>(REASON("Property update is not allowed"));
748e61ca9dSWilliam A. Kennington III }
758e61ca9dSWilliam A. Kennington III 
768e61ca9dSWilliam A. Kennington III Neighbor::State Neighbor::state(State /*state*/)
778e61ca9dSWilliam A. Kennington III {
788e61ca9dSWilliam A. Kennington III     elog<NotAllowed>(REASON("Property update is not allowed"));
798e61ca9dSWilliam A. Kennington III }
808e61ca9dSWilliam A. Kennington III 
811bbe3d1eSWilliam A. Kennington III } // namespace network
821bbe3d1eSWilliam A. Kennington III } // namespace phosphor
83