diff --git a/test/Makefile.am b/test/Makefile.am
index 5a1e712..b32e210 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -9,6 +9,7 @@
 	mock_syscall.cpp \
 	test_network_manager.cpp \
 	test_ethernet_interface.cpp \
+	test_rtnetlink.cpp \
 	test_config_parser.cpp \
 	test_vlan_interface.cpp
 
@@ -49,6 +50,7 @@
 			$(top_builddir)/routing_table.o \
 			$(top_builddir)/util.o \
 			$(top_builddir)/timer.o \
+			$(top_builddir)/rtnetlink_server.o \
 			$(top_builddir)/system_configuration.o \
 			$(top_builddir)/dhcp_configuration.o \
 			$(top_builddir)/config_parser.o \
diff --git a/test/test_network_manager.cpp b/test/test_network_manager.cpp
index 8413c01..2776bcf 100644
--- a/test/test_network_manager.cpp
+++ b/test/test_network_manager.cpp
@@ -21,9 +21,6 @@
 namespace network
 {
 
-std::unique_ptr<phosphor::network::Timer> refreshObjectTimer = nullptr;
-std::unique_ptr<phosphor::network::Timer> restartTimer = nullptr;
-
 namespace fs = std::experimental::filesystem;
 
 class TestNetworkManager : public testing::Test
diff --git a/test/test_rtnetlink.cpp b/test/test_rtnetlink.cpp
new file mode 100644
index 0000000..52008ba
--- /dev/null
+++ b/test/test_rtnetlink.cpp
@@ -0,0 +1,148 @@
+#include "types.hpp"
+#include "rtnetlink_server.hpp"
+#include "network_manager.hpp"
+#include "mock_syscall.hpp"
+#include "timer.hpp"
+#include "types.hpp"
+
+
+#include <gtest/gtest.h>
+#include <sdbusplus/bus.hpp>
+
+#include <net/if.h>
+#include <linux/rtnetlink.h>
+
+namespace phosphor
+{
+
+namespace network
+{
+
+std::unique_ptr<Manager> manager = nullptr;
+std::unique_ptr<Timer> refreshObjectTimer = nullptr;
+std::unique_ptr<Timer> restartTimer = nullptr;
+EventPtr eventPtr = nullptr;
+
+/** @brief refresh the network objects. */
+void refreshObjects()
+{
+
+    if (manager)
+    {
+        manager->createChildObjects();
+    }
+}
+
+void initializeTimers()
+{
+    std::function<void()> refreshFunc(
+        std::bind(&refreshObjects));
+
+    refreshObjectTimer =
+        std::make_unique<Timer>(refreshFunc);
+
+}
+
+class TestRtNetlink : public testing::Test
+{
+
+    public:
+        std::string confDir;
+        phosphor::Descriptor smartSock;
+
+
+
+        TestRtNetlink()
+        {
+            sdbusplus::bus::bus bus(sdbusplus::bus::new_default());
+            manager =
+                std::make_unique<Manager>(bus,
+                        "/xyz/openbmc_test/bcd",
+                        "/tmp");
+            sd_event* events;
+            sd_event_default(&events);
+            eventPtr.reset(events);
+            events = nullptr;
+            setConfDir();
+            initializeTimers();
+            createNetLinkSocket();
+            bus.attach_event(eventPtr.get(), SD_EVENT_PRIORITY_NORMAL);
+            rtnetlink::Server svr(eventPtr, smartSock);
+        }
+
+        ~TestRtNetlink()
+        {
+            if (confDir.empty())
+            {
+                fs::remove_all(confDir);
+            }
+        }
+
+        void setConfDir()
+        {
+            confDir = "/tmp/NetworkManager.YYYY";
+            manager->setConfDir(confDir);
+        }
+
+        bool isInterfaceAdded(std::string intf)
+        {
+            return manager->interfaces.find(intf) != manager->interfaces.end()?
+                   true :
+                   false;
+        }
+
+        void createNetLinkSocket()
+        {
+            //RtnetLink socket
+            auto fd = socket(PF_NETLINK, SOCK_RAW | SOCK_NONBLOCK,
+                NETLINK_ROUTE);
+            smartSock.set(fd);
+        }
+};
+
+
+TEST_F(TestRtNetlink, WithSingleInterface)
+{
+    bool caughtException = false;
+    using namespace std::chrono;
+    try
+    {
+        // Adds the following ip in the getifaddrs list.
+        mock_addIP("igb5", "127.0.0.1", "255.255.255.128",
+                   IFF_UP | IFF_RUNNING);
+        constexpr auto BUFSIZE = 4096;
+        std::array<char, BUFSIZE> msgBuf = {0};
+
+        // point the header and the msg structure pointers into the buffer.
+        auto nlMsg = reinterpret_cast<nlmsghdr*>(msgBuf.data());
+        // Length of message
+        nlMsg->nlmsg_len = NLMSG_LENGTH(sizeof(rtmsg));
+        nlMsg->nlmsg_type = RTM_GETADDR;
+        nlMsg->nlmsg_flags = NLM_F_DUMP | NLM_F_REQUEST;
+        nlMsg->nlmsg_seq = 0;
+        nlMsg->nlmsg_pid = getpid();
+
+        EXPECT_EQ(false, isInterfaceAdded("igb5"));
+        // Send the request
+        send(smartSock(), nlMsg, nlMsg->nlmsg_len, 0);
+
+        int i = 2;
+        while (i--)
+        {
+            //wait for timer to expire
+            std::this_thread::sleep_for(
+                std::chrono::milliseconds(refreshTimeout));
+            sd_event_run(eventPtr.get(), 10);
+        };
+
+        EXPECT_EQ(true, isInterfaceAdded("igb5"));
+    }
+    catch (std::exception& e)
+    {
+        caughtException = true;
+    }
+    EXPECT_EQ(false, caughtException);
+}
+
+}// namespce network
+}// namespace phosphor
diff --git a/test/test_util.cpp b/test/test_util.cpp
index 1c78b64..9596097 100644
--- a/test/test_util.cpp
+++ b/test/test_util.cpp
@@ -17,6 +17,89 @@
 
 };
 
+TEST_F(TestUtil, IpValidation)
+{
+    std::string ipaddress = "0.0.0.0";
+    EXPECT_EQ(true, isValidIP(AF_INET, ipaddress));
+
+    ipaddress = "9.3.185.83";
+    EXPECT_EQ(true, isValidIP(AF_INET, ipaddress));
+
+    ipaddress = "9.3.185.a";
+    EXPECT_EQ(false, isValidIP(AF_INET, ipaddress));
+
+    ipaddress = "9.3.a.83";
+    EXPECT_EQ(false, isValidIP(AF_INET, ipaddress));
+
+    ipaddress = "x.x.x.x";
+    EXPECT_EQ(false, isValidIP(AF_INET, ipaddress));
+
+    ipaddress = "0:0:0:0:0:0:0:0";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+    ipaddress = "1:0:0:0:0:0:0:8";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+    ipaddress = "1::8";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+    ipaddress = "0:0:0:0:0:FFFF:204.152.189.116";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+    ipaddress = "::ffff:204.152.189.116";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+    ipaddress = "a:0:0:0:0:FFFF:204.152.189.116";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+    ipaddress = "1::8";
+    EXPECT_EQ(true, isValidIP(AF_INET6, ipaddress));
+
+
+}
+
+TEST_F(TestUtil, PrefixValidation)
+{
+    uint8_t prefixLength = 1;
+    EXPECT_EQ(true, isValidPrefix(AF_INET, prefixLength));
+
+    prefixLength = 32;
+    EXPECT_EQ(true, isValidPrefix(AF_INET, prefixLength));
+
+    prefixLength = 0;
+    EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
+
+    prefixLength = 33;
+    EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
+
+    prefixLength = 33;
+    EXPECT_EQ(true, isValidPrefix(AF_INET6, prefixLength));
+
+    prefixLength = 65;
+    EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
+
+}
+
+
+TEST_F(TestUtil, MacValidation)
+{
+    std::string macaddress = "00:00:00:00:00:00";
+    EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
+
+    macaddress = "F6:C6:E6:6:B0:D3";
+    EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
+
+    macaddress = "F6:C6:E6:06:B0:D3";
+    EXPECT_EQ(true, phosphor::network::mac_address::validate(macaddress));
+
+    macaddress = "hh:HH:HH:hh:HH:yy";
+    EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
+
+    macaddress = "hhh:GGG:iii:jjj:kkk:lll";
+    EXPECT_EQ(false, phosphor::network::mac_address::validate(macaddress));
+
+}
+
 TEST_F(TestUtil, ConvertV4MasktoPrefix)
 {
     std::string mask = "255.255.255.0";
