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