diff --git a/test/meson.build b/test/meson.build
index 7cd906a..b501080 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -46,6 +46,7 @@
 tests = [
   'config_parser',
   'ethernet_interface',
+  'ipaddress',
   'neighbor',
   'netlink',
   'network_manager',
diff --git a/test/test_ipaddress.cpp b/test/test_ipaddress.cpp
new file mode 100644
index 0000000..f5a6147
--- /dev/null
+++ b/test/test_ipaddress.cpp
@@ -0,0 +1,207 @@
+#include "ipaddress.hpp"
+#include "util.hpp"
+
+#include <arpa/inet.h>
+#include <linux/netlink.h>
+#include <linux/rtnetlink.h>
+
+#include <cstring>
+#include <stdexcept>
+#include <stdplus/raw.hpp>
+#include <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+namespace phosphor
+{
+namespace network
+{
+namespace detail
+{
+
+TEST(ParseAddress, NotAddressType)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWLINK;
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    EXPECT_THROW(parseAddress(filter, hdr, "", addresses), std::runtime_error);
+    EXPECT_EQ(0, addresses.size());
+}
+
+TEST(ParseAddress, SmallMsg)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWADDR;
+    std::string data = "1";
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    EXPECT_THROW(parseAddress(filter, hdr, data, addresses),
+                 std::runtime_error);
+    EXPECT_EQ(0, addresses.size());
+}
+
+TEST(ParseAddress, NoAttrs)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWADDR;
+    ifaddrmsg msg{};
+    msg.ifa_family = AF_INET;
+    msg.ifa_prefixlen = 24;
+    msg.ifa_index = 1;
+    msg.ifa_scope = RT_SCOPE_UNIVERSE;
+    std::string data;
+    data.append(reinterpret_cast<char*>(&msg), sizeof(msg));
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    EXPECT_THROW(parseAddress(filter, hdr, data, addresses),
+                 std::runtime_error);
+    EXPECT_EQ(0, addresses.size());
+}
+
+TEST(ParseAddress, NoAddress)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWADDR;
+    ifaddrmsg msg{};
+    msg.ifa_family = AF_INET;
+    msg.ifa_prefixlen = 24;
+    msg.ifa_index = 1;
+    msg.ifa_scope = RT_SCOPE_UNIVERSE;
+    in_addr addr{};
+    rtattr local{};
+    constexpr auto len = RTA_LENGTH(sizeof(addr));
+    local.rta_len = len;
+    local.rta_type = IFA_LOCAL;
+    char localbuf[RTA_ALIGN(len)];
+    std::memset(localbuf, '\0', sizeof(localbuf));
+    std::memcpy(localbuf, &local, sizeof(local));
+    std::memcpy(RTA_DATA(localbuf), &addr, sizeof(addr));
+    std::string data;
+    data.append(reinterpret_cast<char*>(&msg), sizeof(msg));
+    data.append(reinterpret_cast<char*>(&localbuf), sizeof(localbuf));
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    EXPECT_THROW(parseAddress(filter, hdr, data, addresses),
+                 std::runtime_error);
+    EXPECT_EQ(0, addresses.size());
+}
+
+TEST(ParseAddress, FilterInterface)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWADDR;
+    ifaddrmsg msg{};
+    msg.ifa_family = AF_INET;
+    msg.ifa_prefixlen = 24;
+    msg.ifa_index = 2;
+    msg.ifa_scope = RT_SCOPE_UNIVERSE;
+    in_addr addr;
+    ASSERT_EQ(1, inet_pton(msg.ifa_family, "192.168.10.1", &addr));
+    rtattr address{};
+    constexpr auto len = RTA_LENGTH(sizeof(addr));
+    address.rta_len = len;
+    address.rta_type = IFA_ADDRESS;
+    char addressbuf[RTA_ALIGN(len)];
+    std::memset(addressbuf, '\0', sizeof(addressbuf));
+    std::memcpy(addressbuf, &address, sizeof(address));
+    std::memcpy(RTA_DATA(addressbuf), &addr, sizeof(addr));
+    std::string data;
+    data.append(reinterpret_cast<char*>(&msg), sizeof(msg));
+    data.append(reinterpret_cast<char*>(&addressbuf), sizeof(addressbuf));
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    filter.interface = 1;
+    parseAddress(filter, hdr, data, addresses);
+    EXPECT_EQ(0, addresses.size());
+    filter.interface = 2;
+    parseAddress(filter, hdr, data, addresses);
+    EXPECT_EQ(1, addresses.size());
+    EXPECT_EQ(msg.ifa_index, addresses[0].interface);
+    EXPECT_EQ(msg.ifa_scope, addresses[0].scope);
+    EXPECT_EQ(msg.ifa_prefixlen, addresses[0].prefix);
+    EXPECT_TRUE(
+        stdplus::raw::equal(addr, std::get<in_addr>(addresses[0].address)));
+}
+
+TEST(ParseNeighbor, FilterScope)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWADDR;
+    ifaddrmsg msg{};
+    msg.ifa_family = AF_INET;
+    msg.ifa_prefixlen = 24;
+    msg.ifa_index = 2;
+    msg.ifa_scope = RT_SCOPE_SITE;
+    in_addr addr;
+    ASSERT_EQ(1, inet_pton(msg.ifa_family, "192.168.10.1", &addr));
+    rtattr address{};
+    constexpr auto len = RTA_LENGTH(sizeof(addr));
+    address.rta_len = len;
+    address.rta_type = IFA_ADDRESS;
+    char addressbuf[RTA_ALIGN(len)];
+    std::memset(addressbuf, '\0', sizeof(addressbuf));
+    std::memcpy(addressbuf, &address, sizeof(address));
+    std::memcpy(RTA_DATA(addressbuf), &addr, sizeof(addr));
+    std::string data;
+    data.append(reinterpret_cast<char*>(&msg), sizeof(msg));
+    data.append(reinterpret_cast<char*>(&addressbuf), sizeof(addressbuf));
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    filter.scope = RT_SCOPE_UNIVERSE;
+    parseAddress(filter, hdr, data, addresses);
+    EXPECT_EQ(0, addresses.size());
+    filter.scope = RT_SCOPE_SITE;
+    parseAddress(filter, hdr, data, addresses);
+    EXPECT_EQ(1, addresses.size());
+    EXPECT_EQ(msg.ifa_index, addresses[0].interface);
+    EXPECT_EQ(msg.ifa_scope, addresses[0].scope);
+    EXPECT_EQ(msg.ifa_prefixlen, addresses[0].prefix);
+    EXPECT_TRUE(
+        stdplus::raw::equal(addr, std::get<in_addr>(addresses[0].address)));
+}
+
+TEST(ParseNeighbor, NoFilter)
+{
+    nlmsghdr hdr{};
+    hdr.nlmsg_type = RTM_NEWADDR;
+    ifaddrmsg msg{};
+    msg.ifa_family = AF_INET6;
+    msg.ifa_prefixlen = 24;
+    msg.ifa_index = 1;
+    msg.ifa_scope = RT_SCOPE_UNIVERSE;
+    in6_addr addr;
+    ASSERT_EQ(1, inet_pton(msg.ifa_family, "fd00::2", &addr));
+    rtattr address{};
+    constexpr auto len = RTA_LENGTH(sizeof(addr));
+    address.rta_len = len;
+    address.rta_type = IFA_ADDRESS;
+    char addressbuf[RTA_ALIGN(len)];
+    std::memset(addressbuf, '\0', sizeof(addressbuf));
+    std::memcpy(addressbuf, &address, sizeof(address));
+    std::memcpy(RTA_DATA(addressbuf), &addr, sizeof(addr));
+    std::string data;
+    data.append(reinterpret_cast<char*>(&msg), sizeof(msg));
+    data.append(reinterpret_cast<char*>(&addressbuf), sizeof(addressbuf));
+    AddressFilter filter;
+
+    std::vector<AddressInfo> addresses;
+    parseAddress(filter, hdr, data, addresses);
+    EXPECT_EQ(1, addresses.size());
+    EXPECT_EQ(msg.ifa_index, addresses[0].interface);
+    EXPECT_EQ(msg.ifa_scope, addresses[0].scope);
+    EXPECT_EQ(msg.ifa_prefixlen, addresses[0].prefix);
+    EXPECT_TRUE(
+        stdplus::raw::equal(addr, std::get<in6_addr>(addresses[0].address)));
+}
+
+} // namespace detail
+} // namespace network
+} // namespace phosphor
diff --git a/test/test_util.cpp b/test/test_util.cpp
index fc895cf..4a50a26 100644
--- a/test/test_util.cpp
+++ b/test/test_util.cpp
@@ -127,127 +127,6 @@
     EXPECT_EQ(false, isValidPrefix(AF_INET, prefixLength));
 }
 
-TEST_F(TestUtil, ConvertV4MasktoPrefix)
-{
-    std::string mask = "255.255.255.0";
-    uint8_t prefix = toCidr(AF_INET, mask);
-    EXPECT_EQ(prefix, 24);
-
-    mask = "255.255.255.255";
-    prefix = toCidr(AF_INET, mask);
-    EXPECT_EQ(prefix, 32);
-
-    mask = "255.255.0.0";
-    prefix = toCidr(AF_INET, mask);
-    EXPECT_EQ(prefix, 16);
-
-    mask = "255.0.0.0";
-    prefix = toCidr(AF_INET, mask);
-    EXPECT_EQ(prefix, 8);
-
-    mask = "255.224.0.0";
-    prefix = toCidr(AF_INET, mask);
-    EXPECT_EQ(prefix, 11);
-
-    // Invalid Mask
-    mask = "255.0.255.0";
-    prefix = toCidr(AF_INET, mask);
-    EXPECT_EQ(prefix, 0);
-}
-
-TEST_F(TestUtil, convertV6MasktoPrefix)
-{
-    std::string mask = "ffff:ffff::";
-    uint8_t prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 32);
-
-    mask = "::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
-    mask = "ffff:ffff:ffff::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 48);
-
-    mask = "ffff:ffff:fc00::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 38);
-
-    mask = "ffff:0:0:0:0:0:0:0";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 16);
-
-    mask = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 128);
-
-    mask = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 126);
-
-    mask = "ffff:ffff:ffff:ffff::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 64);
-
-    // Invalid Masks
-    mask = "ffff:0fff::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
-    mask = "ffff:fgff::";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
-    mask = "ffff:0:0:6:0:0:0:0";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
-    mask = ":";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
-    mask = "abcd:efgh:ijkl:mnop:pqrs:tuvw:xyz:abcd";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-
-    mask = "ffff:0:0:0:0:0:0";
-    prefix = toCidr(AF_INET6, mask);
-    EXPECT_EQ(prefix, 0);
-}
-
-TEST_F(TestUtil, isLinkLocaladdress)
-{
-    std::string ipaddress = "fe80:fec0::";
-    EXPECT_TRUE(isLinkLocalIP(ipaddress));
-
-    ipaddress = "2000:fe80:789::";
-    EXPECT_FALSE(isLinkLocalIP(ipaddress));
-
-    ipaddress = "2000:fe80::";
-    EXPECT_FALSE(isLinkLocalIP(ipaddress));
-
-    ipaddress = "169.254.3.3";
-    EXPECT_TRUE(isLinkLocalIP(ipaddress));
-
-    ipaddress = "3.169.254.3";
-    EXPECT_FALSE(isLinkLocalIP(ipaddress));
-
-    ipaddress = "3.3.169.254";
-    EXPECT_FALSE(isLinkLocalIP(ipaddress));
-}
-
-TEST_F(TestUtil, convertPrefixToMask)
-{
-    std::string mask = toMask(AF_INET, 24);
-    EXPECT_EQ(mask, "255.255.255.0");
-
-    mask = toMask(AF_INET, 8);
-    EXPECT_EQ(mask, "255.0.0.0");
-
-    mask = toMask(AF_INET, 27);
-    EXPECT_EQ(mask, "255.255.255.224");
-}
-
 TEST_F(TestUtil, InterfaceToUbootEthAddr)
 {
     EXPECT_EQ(std::nullopt, interfaceToUbootEthAddr("et"));
