network_manager: Move interface validation

This will be required so the rtnetlink_server can add new interfaces.

Change-Id: I72f8687515ff92bdc339689da0c07788ef664504
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/network_manager.cpp b/src/network_manager.cpp
index 79a4e41..62ca491 100644
--- a/src/network_manager.cpp
+++ b/src/network_manager.cpp
@@ -6,6 +6,9 @@
 #include "ipaddress.hpp"
 #include "system_queries.hpp"
 #include "types.hpp"
+#include "util.hpp"
+
+#include <net/if.h>
 
 #include <filesystem>
 #include <fstream>
@@ -141,6 +144,22 @@
 
 void Manager::addInterface(const InterfaceInfo& info)
 {
+    if (info.flags & IFF_LOOPBACK)
+    {
+        return;
+    }
+    if (!info.name)
+    {
+        throw std::invalid_argument("Interface missing name");
+    }
+    const auto& ignored = internal::getIgnoredInterfaces();
+    if (ignored.find(*info.name) != ignored.end())
+    {
+        auto msg = fmt::format("Ignoring interface {}\n", *info.name);
+        log<level::INFO>(msg.c_str());
+        return;
+    }
+
     auto it = systemdNetworkdEnabled.find(info.idx);
     if (it != systemdNetworkdEnabled.end())
     {