diff --git a/redfish-core/include/utils/ip_utils.hpp b/redfish-core/include/utils/ip_utils.hpp
index 815243e..2d9b138 100644
--- a/redfish-core/include/utils/ip_utils.hpp
+++ b/redfish-core/include/utils/ip_utils.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
 #include <boost/asio/ip/address.hpp>
 #include <boost/asio/ip/address_v4.hpp>
 #include <boost/asio/ip/address_v6.hpp>
@@ -30,5 +32,95 @@
     return ipAddr.to_string();
 }
 
+/**
+ * @brief Helper function that verifies IP address to check if it is in
+ *        proper format. If bits pointer is provided, also calculates active
+ *        bit count for Subnet Mask.
+ *
+ * @param[in]  ip     IP that will be verified
+ * @param[out] bits   Calculated mask in bits notation
+ *
+ * @return true in case of success, false otherwise
+ */
+inline bool ipv4VerifyIpAndGetBitcount(const std::string& ip,
+                                       uint8_t* bits = nullptr)
+{
+    std::vector<std::string> bytesInMask;
+
+    boost::split(bytesInMask, ip, boost::is_any_of("."));
+
+    static const constexpr int ipV4AddressSectionsCount = 4;
+    if (bytesInMask.size() != ipV4AddressSectionsCount)
+    {
+        return false;
+    }
+
+    if (bits != nullptr)
+    {
+        *bits = 0;
+    }
+
+    char* endPtr = nullptr;
+    long previousValue = 255;
+    bool firstZeroInByteHit = false;
+    for (const std::string& byte : bytesInMask)
+    {
+        if (byte.empty())
+        {
+            return false;
+        }
+
+        // Use strtol instead of stroi to avoid exceptions
+        long value = std::strtol(byte.c_str(), &endPtr, 10);
+
+        // endPtr should point to the end of the string, otherwise given string
+        // is not 100% number
+        if (*endPtr != '\0')
+        {
+            return false;
+        }
+
+        // Value should be contained in byte
+        if (value < 0 || value > 255)
+        {
+            return false;
+        }
+
+        if (bits != nullptr)
+        {
+            // Mask has to be continuous between bytes
+            if (previousValue != 255 && value != 0)
+            {
+                return false;
+            }
+
+            // Mask has to be continuous inside bytes
+            firstZeroInByteHit = false;
+
+            // Count bits
+            for (long bitIdx = 7; bitIdx >= 0; bitIdx--)
+            {
+                if ((value & (1L << bitIdx)) != 0)
+                {
+                    if (firstZeroInByteHit)
+                    {
+                        // Continuity not preserved
+                        return false;
+                    }
+                    (*bits)++;
+                }
+                else
+                {
+                    firstZeroInByteHit = true;
+                }
+            }
+        }
+
+        previousValue = value;
+    }
+
+    return true;
+}
+
 } // namespace ip_util
 } // namespace redfish
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index 0469f74..3428845 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -15,6 +15,8 @@
 */
 #pragma once
 
+#include "utils/ip_utils.hpp"
+
 #include <app.hpp>
 #include <boost/algorithm/string/classification.hpp>
 #include <boost/algorithm/string/split.hpp>
@@ -581,96 +583,6 @@
 }
 
 /**
- * @brief Helper function that verifies IP address to check if it is in
- *        proper format. If bits pointer is provided, also calculates active
- *        bit count for Subnet Mask.
- *
- * @param[in]  ip     IP that will be verified
- * @param[out] bits   Calculated mask in bits notation
- *
- * @return true in case of success, false otherwise
- */
-inline bool ipv4VerifyIpAndGetBitcount(const std::string& ip,
-                                       uint8_t* bits = nullptr)
-{
-    std::vector<std::string> bytesInMask;
-
-    boost::split(bytesInMask, ip, boost::is_any_of("."));
-
-    static const constexpr int ipV4AddressSectionsCount = 4;
-    if (bytesInMask.size() != ipV4AddressSectionsCount)
-    {
-        return false;
-    }
-
-    if (bits != nullptr)
-    {
-        *bits = 0;
-    }
-
-    char* endPtr = nullptr;
-    long previousValue = 255;
-    bool firstZeroInByteHit = false;
-    for (const std::string& byte : bytesInMask)
-    {
-        if (byte.empty())
-        {
-            return false;
-        }
-
-        // Use strtol instead of stroi to avoid exceptions
-        long value = std::strtol(byte.c_str(), &endPtr, 10);
-
-        // endPtr should point to the end of the string, otherwise given string
-        // is not 100% number
-        if (*endPtr != '\0')
-        {
-            return false;
-        }
-
-        // Value should be contained in byte
-        if (value < 0 || value > 255)
-        {
-            return false;
-        }
-
-        if (bits != nullptr)
-        {
-            // Mask has to be continuous between bytes
-            if (previousValue != 255 && value != 0)
-            {
-                return false;
-            }
-
-            // Mask has to be continuous inside bytes
-            firstZeroInByteHit = false;
-
-            // Count bits
-            for (long bitIdx = 7; bitIdx >= 0; bitIdx--)
-            {
-                if ((value & (1L << bitIdx)) != 0)
-                {
-                    if (firstZeroInByteHit)
-                    {
-                        // Continuity not preserved
-                        return false;
-                    }
-                    (*bits)++;
-                }
-                else
-                {
-                    firstZeroInByteHit = true;
-                }
-            }
-        }
-
-        previousValue = value;
-    }
-
-    return true;
-}
-
-/**
  * @brief Deletes given IPv4 interface
  *
  * @param[in] ifaceId     Id of interface whose IP should be deleted
@@ -1402,7 +1314,7 @@
             bool errorInEntry = false;
             if (address)
             {
-                if (ipv4VerifyIpAndGetBitcount(*address))
+                if (ip_util::ipv4VerifyIpAndGetBitcount(*address))
                 {
                     addr = &(*address);
                 }
@@ -1426,7 +1338,8 @@
 
             if (subnetMask)
             {
-                if (!ipv4VerifyIpAndGetBitcount(*subnetMask, &prefixLength))
+                if (!ip_util::ipv4VerifyIpAndGetBitcount(*subnetMask,
+                                                         &prefixLength))
                 {
                     messages::propertyValueFormatError(
                         asyncResp->res, *subnetMask,
@@ -1436,8 +1349,8 @@
             }
             else if (nicIpEntry != ipv4Data.cend())
             {
-                if (!ipv4VerifyIpAndGetBitcount(nicIpEntry->netmask,
-                                                &prefixLength))
+                if (!ip_util::ipv4VerifyIpAndGetBitcount(nicIpEntry->netmask,
+                                                         &prefixLength))
                 {
                     messages::propertyValueFormatError(
                         asyncResp->res, nicIpEntry->netmask,
@@ -1454,7 +1367,7 @@
 
             if (gateway)
             {
-                if (ipv4VerifyIpAndGetBitcount(*gateway))
+                if (ip_util::ipv4VerifyIpAndGetBitcount(*gateway))
                 {
                     gw = &(*gateway);
                 }
diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp
index 3422761..5c60016 100644
--- a/redfish-core/lib/hypervisor_system.hpp
+++ b/redfish-core/lib/hypervisor_system.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "utils/ip_utils.hpp"
+
 #include <app.hpp>
 #include <boost/container/flat_set.hpp>
 #include <dbus_singleton.hpp>
@@ -607,7 +609,7 @@
         bool errorInEntry = false;
         if (address)
         {
-            if (!ipv4VerifyIpAndGetBitcount(*address))
+            if (!ip_util::ipv4VerifyIpAndGetBitcount(*address))
             {
                 messages::propertyValueFormatError(asyncResp->res, *address,
                                                    pathString + "/Address");
@@ -622,7 +624,8 @@
 
         if (subnetMask)
         {
-            if (!ipv4VerifyIpAndGetBitcount(*subnetMask, &prefixLength))
+            if (!ip_util::ipv4VerifyIpAndGetBitcount(*subnetMask,
+                                                     &prefixLength))
             {
                 messages::propertyValueFormatError(asyncResp->res, *subnetMask,
                                                    pathString + "/SubnetMask");
@@ -638,7 +641,7 @@
 
         if (gateway)
         {
-            if (!ipv4VerifyIpAndGetBitcount(*gateway))
+            if (!ip_util::ipv4VerifyIpAndGetBitcount(*gateway))
             {
                 messages::propertyValueFormatError(asyncResp->res, *gateway,
                                                    pathString + "/Gateway");
