network_manager: Add a mapping of interface ids
Change-Id: Ib0543b53c8cce77a0cedd49a4094c20ad1a28312
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index 9350ff7..b1ada82 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -1081,6 +1081,10 @@
// We need to forcibly delete the interface as systemd does not
deleteInterface(intf);
+ if (eth.ifIdx > 0)
+ {
+ eth.manager.interfacesByIdx.erase(eth.ifIdx);
+ }
eth.manager.interfaces.erase(intf);
}
diff --git a/src/network_manager.cpp b/src/network_manager.cpp
index c79c395..f69cd74 100644
--- a/src/network_manager.cpp
+++ b/src/network_manager.cpp
@@ -61,6 +61,7 @@
{
// clear all the interfaces first
interfaces.clear();
+ interfacesByIdx.clear();
for (auto& interface : system::getInterfaces())
{
config::Parser config(
@@ -71,7 +72,9 @@
intf->createStaticNeighborObjects();
intf->loadNameServers(config);
intf->loadNTPServers(config);
- this->interfaces.emplace(std::move(*interface.name), std::move(intf));
+ auto ptr = intf.get();
+ interfaces.emplace(std::move(*interface.name), std::move(intf));
+ interfacesByIdx.emplace(interface.idx, ptr);
}
}
diff --git a/src/network_manager.hpp b/src/network_manager.hpp
index ffac8ba..0f37134 100644
--- a/src/network_manager.hpp
+++ b/src/network_manager.hpp
@@ -127,6 +127,7 @@
/** @brief Persistent map of EthernetInterface dbus objects and their names
*/
string_umap<std::unique_ptr<EthernetInterface>> interfaces;
+ std::unordered_map<unsigned, EthernetInterface*> interfacesByIdx;
/** @brief Get the routing table owned by the manager
*