diff --git a/src/ethernet_interface.cpp b/src/ethernet_interface.cpp
index a7bf8e3..b15f598 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -73,7 +73,7 @@
 }
 
 EthernetInterface::EthernetInterface(sdbusplus::bus_t& bus, Manager& manager,
-                                     const system::InterfaceInfo& info,
+                                     const InterfaceInfo& info,
                                      std::string_view objRoot,
                                      const config::Parser& config,
                                      bool emitSignal,
@@ -84,7 +84,7 @@
 }
 
 EthernetInterface::EthernetInterface(sdbusplus::bus_t& bus, Manager& manager,
-                                     const system::InterfaceInfo& info,
+                                     const InterfaceInfo& info,
                                      std::string&& objPath,
                                      const config::Parser& config,
                                      bool emitSignal,
@@ -147,7 +147,7 @@
     }
 }
 
-void EthernetInterface::updateInfo(const system::InterfaceInfo& info)
+void EthernetInterface::updateInfo(const InterfaceInfo& info)
 {
     EthernetInterfaceIntf::linkUp(info.flags & IFF_RUNNING);
     if (info.mac)
@@ -677,7 +677,7 @@
     {
         mac.emplace(ToAddr<ether_addr>{}(macStr));
     }
-    auto info = system::InterfaceInfo{
+    auto info = InterfaceInfo{
         .idx = 0, // TODO: Query the correct value after creation
         .flags = 0,
         .name = intfName,
@@ -994,8 +994,7 @@
 
 EthernetInterface::VlanProperties::VlanProperties(
     sdbusplus::bus_t& bus, stdplus::const_zstring objPath,
-    const system::InterfaceInfo& info, EthernetInterface& eth,
-    bool emitSignal) :
+    const InterfaceInfo& info, EthernetInterface& eth, bool emitSignal) :
     VlanIfaces(bus, objPath.c_str(),
                emitSignal ? VlanIfaces::action::defer_emit
                           : VlanIfaces::action::emit_no_signals),
diff --git a/src/ethernet_interface.hpp b/src/ethernet_interface.hpp
index fcb45f6..ee83fe2 100644
--- a/src/ethernet_interface.hpp
+++ b/src/ethernet_interface.hpp
@@ -54,10 +54,6 @@
 {
 class Parser;
 }
-namespace system
-{
-struct InterfaceInfo;
-};
 
 /** @class EthernetInterface
  *  @brief OpenBMC Ethernet Interface implementation.
@@ -86,9 +82,8 @@
      *  @param[in] enabled - Override the lookup of nicEnabled
      */
     EthernetInterface(sdbusplus::bus_t& bus, Manager& manager,
-                      const system::InterfaceInfo& info,
-                      std::string_view objRoot, const config::Parser& config,
-                      bool emitSignal = true,
+                      const InterfaceInfo& info, std::string_view objRoot,
+                      const config::Parser& config, bool emitSignal = true,
                       std::optional<bool> enabled = std::nullopt);
 
     /** @brief Network Manager object. */
@@ -104,7 +99,7 @@
     void addStaticNeigh(const NeighborInfo& info);
 
     /** @brief Updates the interface information based on new InterfaceInfo */
-    void updateInfo(const system::InterfaceInfo& info);
+    void updateInfo(const InterfaceInfo& info);
 
     /** @brief Function used to load the ntpservers
      */
@@ -255,8 +250,8 @@
     struct VlanProperties : VlanIfaces
     {
         VlanProperties(sdbusplus::bus_t& bus, stdplus::const_zstring objPath,
-                       const system::InterfaceInfo& info,
-                       EthernetInterface& eth, bool emitSignal = true);
+                       const InterfaceInfo& info, EthernetInterface& eth,
+                       bool emitSignal = true);
         void delete_() override;
         unsigned parentIdx;
         EthernetInterface& eth;
@@ -268,7 +263,7 @@
 
   private:
     EthernetInterface(sdbusplus::bus_t& bus, Manager& manager,
-                      const system::InterfaceInfo& info, std::string&& objPath,
+                      const InterfaceInfo& info, std::string&& objPath,
                       const config::Parser& config, bool emitSignal,
                       std::optional<bool> enabled);
 
diff --git a/src/system_queries.hpp b/src/system_queries.hpp
index 615c282..9217a1f 100644
--- a/src/system_queries.hpp
+++ b/src/system_queries.hpp
@@ -30,29 +30,6 @@
 
 void setNICUp(std::string_view ifname, bool up);
 
-/** @class InterfaceInfo
- *  @brief Information about interfaces from the kernel
- */
-struct InterfaceInfo
-{
-    unsigned idx;
-    unsigned flags;
-    std::optional<std::string> name = std::nullopt;
-    std::optional<ether_addr> mac = std::nullopt;
-    std::optional<unsigned> mtu = std::nullopt;
-    std::optional<unsigned> parent_idx = std::nullopt;
-    std::optional<std::string> kind = std::nullopt;
-    std::optional<uint16_t> vlan_id = std::nullopt;
-
-    constexpr bool operator==(const InterfaceInfo& rhs) const noexcept
-    {
-        return idx == rhs.idx && flags == rhs.flags && name == rhs.name &&
-               mac == rhs.mac && mtu == rhs.mtu &&
-               parent_idx == rhs.parent_idx && kind == rhs.kind &&
-               vlan_id == rhs.vlan_id;
-    }
-};
-
 struct AddressFilter
 {
     unsigned ifidx = 0;
diff --git a/src/types.hpp b/src/types.hpp
index bdb431d..9262623 100644
--- a/src/types.hpp
+++ b/src/types.hpp
@@ -16,6 +16,22 @@
 #include <unordered_set>
 #include <variant>
 
+constexpr bool operator==(ether_addr lhs, ether_addr rhs) noexcept
+{
+    return std::equal(lhs.ether_addr_octet, lhs.ether_addr_octet + 6,
+                      rhs.ether_addr_octet);
+}
+
+constexpr bool operator==(in_addr lhs, in_addr rhs) noexcept
+{
+    return lhs.s_addr == rhs.s_addr;
+}
+
+constexpr bool operator==(in6_addr lhs, in6_addr rhs) noexcept
+{
+    return std::equal(lhs.s6_addr32, lhs.s6_addr32 + 4, rhs.s6_addr32);
+}
+
 namespace phosphor
 {
 namespace network
@@ -75,6 +91,29 @@
 
 using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
 
+/** @class InterfaceInfo
+ *  @brief Information about interfaces from the kernel
+ */
+struct InterfaceInfo
+{
+    unsigned idx;
+    unsigned flags;
+    std::optional<std::string> name = std::nullopt;
+    std::optional<ether_addr> mac = std::nullopt;
+    std::optional<unsigned> mtu = std::nullopt;
+    std::optional<unsigned> parent_idx = std::nullopt;
+    std::optional<std::string> kind = std::nullopt;
+    std::optional<uint16_t> vlan_id = std::nullopt;
+
+    constexpr bool operator==(const InterfaceInfo& rhs) const noexcept
+    {
+        return idx == rhs.idx && flags == rhs.flags && name == rhs.name &&
+               mac == rhs.mac && mtu == rhs.mtu &&
+               parent_idx == rhs.parent_idx && kind == rhs.kind &&
+               vlan_id == rhs.vlan_id;
+    }
+};
+
 /** @class AddressInfo
  *  @brief Information about a addresses from the kernel
  */
@@ -84,6 +123,12 @@
     IfAddr ifaddr;
     uint8_t scope;
     uint32_t flags;
+
+    constexpr bool operator==(const AddressInfo& rhs) const noexcept
+    {
+        return ifidx == rhs.ifidx && ifaddr == rhs.ifaddr &&
+               scope == rhs.scope && flags == rhs.flags;
+    }
 };
 
 /** @class NeighborInfo
@@ -92,9 +137,15 @@
 struct NeighborInfo
 {
     unsigned ifidx;
+    uint16_t state;
     InAddrAny addr;
     std::optional<ether_addr> mac;
-    uint16_t state;
+
+    constexpr bool operator==(const NeighborInfo& rhs) const noexcept
+    {
+        return ifidx == rhs.ifidx && state == rhs.state && addr == rhs.addr &&
+               mac == rhs.mac;
+    }
 };
 
 struct string_hash : public std::hash<std::string_view>
@@ -770,22 +821,6 @@
 string to_string(phosphor::network::IfAddr value);
 } // namespace std
 
-constexpr bool operator==(ether_addr lhs, ether_addr rhs) noexcept
-{
-    return std::equal(lhs.ether_addr_octet, lhs.ether_addr_octet + 6,
-                      rhs.ether_addr_octet);
-}
-
-constexpr bool operator==(in_addr lhs, in_addr rhs) noexcept
-{
-    return lhs.s_addr == rhs.s_addr;
-}
-
-constexpr bool operator==(in6_addr lhs, in6_addr rhs) noexcept
-{
-    return std::equal(lhs.s6_addr32, lhs.s6_addr32 + 4, rhs.s6_addr32);
-}
-
 template <typename T>
 constexpr std::enable_if_t<!std::is_same_v<phosphor::network::InAddrAny, T>,
                            bool>
