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>
88e61ca9dSWilliam A. Kennington III #include <xyz/openbmc_project/Common/error.hpp>
91bbe3d1eSWilliam A. Kennington III 
1089d734b9SPatrick Williams #include <string>
1189d734b9SPatrick Williams 
121bbe3d1eSWilliam A. Kennington III namespace phosphor
131bbe3d1eSWilliam A. Kennington III {
141bbe3d1eSWilliam A. Kennington III namespace network
151bbe3d1eSWilliam A. Kennington III {
161bbe3d1eSWilliam A. Kennington III 
makeObjPath(std::string_view root,stdplus::InAnyAddr addr)17*9b2a20d3SWilliam A. Kennington III static auto makeObjPath(std::string_view root, stdplus::InAnyAddr addr)
181bbe3d1eSWilliam A. Kennington III {
19434a943cSWilliam A. Kennington III     auto ret = sdbusplus::message::object_path(std::string(root));
20*9b2a20d3SWilliam A. Kennington III     stdplus::ToStrHandle<stdplus::ToStr<stdplus::InAnyAddr>> tsh;
21*9b2a20d3SWilliam A. Kennington III     ret /= tsh(addr);
22434a943cSWilliam A. Kennington III     return ret;
23434a943cSWilliam A. Kennington III }
24434a943cSWilliam A. Kennington III 
Neighbor(sdbusplus::bus_t & bus,std::string_view objRoot,stdplus::PinnedRef<EthernetInterface> parent,stdplus::InAnyAddr addr,stdplus::EtherAddr lladdr,State state)25434a943cSWilliam A. Kennington III Neighbor::Neighbor(sdbusplus::bus_t& bus, std::string_view objRoot,
26*9b2a20d3SWilliam A. Kennington III                    stdplus::PinnedRef<EthernetInterface> parent,
27*9b2a20d3SWilliam A. Kennington III                    stdplus::InAnyAddr addr, stdplus::EtherAddr lladdr,
28*9b2a20d3SWilliam A. Kennington III                    State state) :
29434a943cSWilliam A. Kennington III     Neighbor(bus, makeObjPath(objRoot, addr), parent, addr, lladdr, state)
3089d734b9SPatrick Williams {}
31434a943cSWilliam A. Kennington III 
Neighbor(sdbusplus::bus_t & bus,sdbusplus::message::object_path objPath,stdplus::PinnedRef<EthernetInterface> parent,stdplus::InAnyAddr addr,stdplus::EtherAddr lladdr,State state)32434a943cSWilliam A. Kennington III Neighbor::Neighbor(sdbusplus::bus_t& bus,
33434a943cSWilliam A. Kennington III                    sdbusplus::message::object_path objPath,
34*9b2a20d3SWilliam A. Kennington III                    stdplus::PinnedRef<EthernetInterface> parent,
35*9b2a20d3SWilliam A. Kennington III                    stdplus::InAnyAddr addr, stdplus::EtherAddr lladdr,
36*9b2a20d3SWilliam A. Kennington III                    State state) :
37434a943cSWilliam A. Kennington III     NeighborObj(bus, objPath.str.c_str(), NeighborObj::action::defer_emit),
38434a943cSWilliam A. Kennington III     parent(parent), objPath(std::move(objPath))
39434a943cSWilliam A. Kennington III {
40*9b2a20d3SWilliam A. Kennington III     NeighborObj::ipAddress(stdplus::toStr(addr), true);
41b7d6a1a7SWilliam A. Kennington III     NeighborObj::macAddress(stdplus::toStr(lladdr), true);
42d99e6dbaSWilliam A. Kennington III     NeighborObj::state(state, true);
431bbe3d1eSWilliam A. Kennington III     emit_object_added();
441bbe3d1eSWilliam A. Kennington III }
451bbe3d1eSWilliam A. Kennington III 
delete_()461bbe3d1eSWilliam A. Kennington III void Neighbor::delete_()
471bbe3d1eSWilliam A. Kennington III {
489ede1b74SWilliam A. Kennington III     auto& neighbors = parent.get().staticNeighbors;
49434a943cSWilliam A. Kennington III     std::unique_ptr<Neighbor> ptr;
50434a943cSWilliam A. Kennington III     for (auto it = neighbors.begin(); it != neighbors.end(); ++it)
51434a943cSWilliam A. Kennington III     {
52434a943cSWilliam A. Kennington III         if (it->second.get() == this)
53434a943cSWilliam A. Kennington III         {
54434a943cSWilliam A. Kennington III             ptr = std::move(it->second);
55434a943cSWilliam A. Kennington III             neighbors.erase(it);
56434a943cSWilliam A. Kennington III             break;
57434a943cSWilliam A. Kennington III         }
58434a943cSWilliam A. Kennington III     }
59434a943cSWilliam A. Kennington III 
609ede1b74SWilliam A. Kennington III     parent.get().writeConfigurationFile();
619ede1b74SWilliam A. Kennington III     parent.get().manager.get().reloadConfigs();
621bbe3d1eSWilliam A. Kennington III }
631bbe3d1eSWilliam A. Kennington III 
648e61ca9dSWilliam A. Kennington III using sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
658e61ca9dSWilliam A. Kennington III using REASON =
668e61ca9dSWilliam A. Kennington III     phosphor::logging::xyz::openbmc_project::Common::NotAllowed::REASON;
678e61ca9dSWilliam A. Kennington III using phosphor::logging::elog;
688e61ca9dSWilliam A. Kennington III 
ipAddress(std::string)698e61ca9dSWilliam A. Kennington III std::string Neighbor::ipAddress(std::string /*ipAddress*/)
708e61ca9dSWilliam A. Kennington III {
718e61ca9dSWilliam A. Kennington III     elog<NotAllowed>(REASON("Property update is not allowed"));
728e61ca9dSWilliam A. Kennington III }
738e61ca9dSWilliam A. Kennington III 
macAddress(std::string)748e61ca9dSWilliam A. Kennington III std::string Neighbor::macAddress(std::string /*macAddress*/)
758e61ca9dSWilliam A. Kennington III {
768e61ca9dSWilliam A. Kennington III     elog<NotAllowed>(REASON("Property update is not allowed"));
778e61ca9dSWilliam A. Kennington III }
788e61ca9dSWilliam A. Kennington III 
state(State)798e61ca9dSWilliam A. Kennington III Neighbor::State Neighbor::state(State /*state*/)
808e61ca9dSWilliam A. Kennington III {
818e61ca9dSWilliam A. Kennington III     elog<NotAllowed>(REASON("Property update is not allowed"));
828e61ca9dSWilliam A. Kennington III }
838e61ca9dSWilliam A. Kennington III 
841bbe3d1eSWilliam A. Kennington III } // namespace network
851bbe3d1eSWilliam A. Kennington III } // namespace phosphor
86