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
      *