ethernet_interface: Reduce error logspam

Change-Id: I53c78556c576f60a6fc1ae74e90d50873f042c35
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/src/system_queries.cpp b/src/system_queries.cpp
index f02d568..0aa245e 100644
--- a/src/system_queries.cpp
+++ b/src/system_queries.cpp
@@ -57,6 +57,9 @@
 {
     ifreq ifr;
     std::optional<decltype(complete(ifr))> ret;
+    auto ukey = std::make_tuple(std::string(ifname), cmd);
+    static std::unordered_set<std::tuple<std::string, unsigned long long>>
+        unsupported;
     try
     {
         ifr = executeIFReq(ifname, cmd, data);
@@ -65,13 +68,19 @@
     {
         if (e.code() == std::errc::operation_not_supported)
         {
-            auto msg = fmt::format("{} not supported on {}", cmdname, ifname);
-            log<level::INFO>(msg.c_str(),
-                             entry("INTERFACE=%s", ifname.c_str()));
+            if (unsupported.find(ukey) == unsupported.end())
+            {
+                unsupported.emplace(std::move(ukey));
+                auto msg =
+                    fmt::format("{} not supported on {}", cmdname, ifname);
+                log<level::INFO>(msg.c_str(),
+                                 entry("INTERFACE=%s", ifname.c_str()));
+            }
             return ret;
         }
         throw;
     }
+    unsupported.erase(ukey);
     ret.emplace(complete(ifr));
     return ret;
 }