diff --git a/utils.cpp b/utils.cpp
index 2124af9..82497a3 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -13,6 +13,15 @@
 using namespace phosphor::logging;
 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 
+namespace network
+{
+
+/** @brief checks if the given ip is Link Local Ip or not.
+  *  @param[in] ipaddress - IPAddress.
+  */
+bool isLinkLocalIP(const std::string& ipaddress);
+
+}
 
 //TODO There may be cases where an interface is implemented by multiple
 //  objects,to handle such cases we are interested on that object
@@ -87,6 +96,49 @@
 
 }
 
+std::string getIPAddress(sdbusplus::bus::bus& bus,
+                         const std::string& interface,
+                         const std::string& serviceRoot,
+                         const std::string& match)
+{
+    auto objectTree = getAllDbusObjects(bus, serviceRoot, interface, match);
+
+    if (objectTree.empty())
+    {
+        log<level::ERR>("No Object has implemented the IP interface",
+                        entry("INTERFACE=%s", interface.c_str()));
+        elog<InternalFailure>();
+    }
+
+    std::string ipaddress;
+
+    for (auto& object : objectTree)
+    {
+        auto variant = ipmi::getDbusProperty(
+                           bus,
+                           object.second.begin()->first,
+                           object.first,
+                           ipmi::network::IP_INTERFACE,
+                           "Address");
+
+        ipaddress = std::move(variant.get<std::string>());
+
+        // if LinkLocalIP found look for Non-LinkLocalIP
+        if (ipmi::network::isLinkLocalIP(ipaddress))
+        {
+            continue;
+        }
+        else
+        {
+            break;
+        }
+
+    }
+
+    return ipaddress;
+
+}
+
 Value getDbusProperty(sdbusplus::bus::bus& bus,
                       const std::string& service,
                       const std::string& objPath,
@@ -355,6 +407,11 @@
 namespace network
 {
 
+bool isLinkLocalIP(const std::string& address)
+{
+    return address.find(IPV4_PREFIX) == 0 || address.find(IPV6_PREFIX) == 0;
+}
+
 void createIP(sdbusplus::bus::bus& bus,
               const std::string& service,
               const std::string& objPath,
