diff --git a/clatd_test.cpp b/clatd_test.cpp
index 7fa870e..8eef738 100644
--- a/clatd_test.cpp
+++ b/clatd_test.cpp
@@ -837,7 +837,20 @@
                                    "UDP/IPv4 -> UDP/IPv6 checksum neutral");
 }
 
-TEST_F(ClatdTest, GetInterfaceIp) {
+TEST_F(ClatdTest, GetInterfaceIpV4) {
+  TunInterface v4Iface;
+  ASSERT_EQ(0, v4Iface.init());
+  EXPECT_EQ(0, v4Iface.addAddress("192.0.2.1", 32));
+
+  union anyip *ip = getinterface_ip(v4Iface.name().c_str(), AF_INET);
+  ASSERT_NE(nullptr, ip);
+  EXPECT_EQ(inet_addr("192.0.2.1"), ip->ip4.s_addr);
+  free(ip);
+
+  v4Iface.destroy();
+}
+
+TEST_F(ClatdTest, GetInterfaceIpV6) {
   union anyip *ip = getinterface_ip(sTun.name().c_str(), AF_INET6);
   ASSERT_NE(nullptr, ip);
   in6_addr expected = sTun.srcAddr();
diff --git a/getaddr.c b/getaddr.c
index 6f4bc86..f25efc1 100644
--- a/getaddr.c
+++ b/getaddr.c
@@ -15,21 +15,27 @@
  *
  * getaddr.c - get a locally configured address
  */
-#include <net/if.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <strings.h>
+#include "getaddr.h"
 
+#include <errno.h>
 #include <linux/if_addr.h>
 #include <linux/rtnetlink.h>
+#include <net/if.h>
+#include <netinet/in.h>
 #include <netlink/handlers.h>
 #include <netlink/msg.h>
+#include <string.h>
+#include <strings.h>
+#include <unistd.h>
 
-#include "getaddr.h"
 #include "logging.h"
-#include "netlink_msg.h"
 
-// shared state between getinterface_ip and getaddr_cb
+// Kernel suggests that keep the packet under 8KiB (NLMSG_GOODSIZE) in include/linux/netlink.h.
+#define NLMSG_SIZE 8192
+
+// shared state between getinterface_ip and parse_ifaddrmsg
+// TODO: refactor the communication between getinterface_ip and parse_ifaddrmsg because there
+// is no netlink callback anymore.
 struct target {
   int family;
   unsigned int ifindex;
@@ -37,57 +43,97 @@
   int foundip;
 };
 
-/* function: getaddr_cb
- * callback for getinterface_ip
- *   msg  - netlink message
- *   data - (struct target) info for which address we're looking for
+/* function: parse_ifaddrmsg
+ * parse ifaddrmsg for getinterface_ip
+ *   nh  - netlink message header
+ *   targ_p - (struct target) info for which address we're looking for
+ *            and the parsed result if any.
  */
-static int getaddr_cb(struct nl_msg *msg, void *data) {
+static void parse_ifaddrmsg(struct nlmsghdr *nh, struct target *targ_p) {
   struct ifaddrmsg *ifa_p;
   struct rtattr *rta_p;
   int rta_len;
-  struct target *targ_p = (struct target *)data;
 
-  ifa_p = (struct ifaddrmsg *)nlmsg_data(nlmsg_hdr(msg));
+  ifa_p = (struct ifaddrmsg *)NLMSG_DATA(nh);
   rta_p = (struct rtattr *)IFA_RTA(ifa_p);
 
-  if (ifa_p->ifa_index != targ_p->ifindex) return NL_OK;
+  if (ifa_p->ifa_index != targ_p->ifindex) return;
 
-  if (ifa_p->ifa_scope != RT_SCOPE_UNIVERSE) return NL_OK;
+  if (ifa_p->ifa_scope != RT_SCOPE_UNIVERSE) return;
 
-  rta_len = RTM_PAYLOAD(nlmsg_hdr(msg));
+  rta_len = IFA_PAYLOAD(nh);
   for (; RTA_OK(rta_p, rta_len); rta_p = RTA_NEXT(rta_p, rta_len)) {
     switch (rta_p->rta_type) {
       case IFA_ADDRESS:
         if ((targ_p->family == AF_INET6) && !(ifa_p->ifa_flags & IFA_F_SECONDARY)) {
           memcpy(&targ_p->ip.ip6, RTA_DATA(rta_p), rta_p->rta_len - sizeof(struct rtattr));
           targ_p->foundip = 1;
-          return NL_OK;
+          return;
         }
         break;
       case IFA_LOCAL:
         if (targ_p->family == AF_INET) {
           memcpy(&targ_p->ip.ip4, RTA_DATA(rta_p), rta_p->rta_len - sizeof(struct rtattr));
           targ_p->foundip = 1;
-          return NL_OK;
+          return;
         }
         break;
     }
   }
-
-  return NL_OK;
 }
 
-/* function: error_handler
- * error callback for getinterface_ip
- *   nla  - source of the error message
- *   err  - netlink message
- *   arg  - (struct target) info for which address we're looking for
- */
-static int error_handler(__attribute__((unused)) struct sockaddr_nl *nla,
-                         __attribute__((unused)) struct nlmsgerr *err,
-                         __attribute__((unused)) void *arg) {
-  return NL_OK;
+void sendrecv_ifaddrmsg(struct target *targ_p) {
+  int s = socket(PF_NETLINK, SOCK_DGRAM | SOCK_CLOEXEC, NETLINK_ROUTE);
+  if (s < 0) {
+    logmsg(ANDROID_LOG_ERROR, "open NETLINK_ROUTE socket failed %s", strerror(errno));
+    return;
+  }
+
+  // Fill in netlink structures.
+  struct {
+    struct nlmsghdr n;
+    struct ifaddrmsg r;
+  } req = {
+    // Netlink message header.
+    .n.nlmsg_len   = NLMSG_LENGTH(sizeof(struct ifaddrmsg)),
+    .n.nlmsg_flags = NLM_F_REQUEST | NLM_F_ROOT,
+    .n.nlmsg_type  = RTM_GETADDR,
+
+    // Interface address message header.
+    .r.ifa_family = targ_p->family,
+  };
+
+  // Send interface address message.
+  if ((send(s, &req, req.n.nlmsg_len, 0)) < 0) {
+    logmsg(ANDROID_LOG_ERROR, "send netlink socket failed %s", strerror(errno));
+    close(s);
+    return;
+  }
+
+  // Read interface address message and parse the result if any.
+  ssize_t bytes_read;
+  char buf[NLMSG_SIZE];
+  while ((bytes_read = recv(s, buf, sizeof(buf), 0)) > 0) {
+    struct nlmsghdr *nh = (struct nlmsghdr *)buf;
+    for (; NLMSG_OK(nh, bytes_read); nh = NLMSG_NEXT(nh, bytes_read)) {
+      if (nh->nlmsg_type == NLMSG_DONE) {
+        close(s);
+        return;
+      }
+      if (nh->nlmsg_type == NLMSG_ERROR) {
+        logmsg(ANDROID_LOG_ERROR, "netlink message error");
+        close(s);
+        return;
+      }
+      if (nh->nlmsg_type == RTM_NEWADDR) {
+        // Walk through the all messages and update struct target variable as the deleted
+        // callback behavior of getaddr_cb() which always returns NL_OK.
+        // TODO: review if this can early return once address has been found.
+        parse_ifaddrmsg(nh, targ_p);
+      }
+    }
+  }
+  close(s);
 }
 
 /* function: getinterface_ip
@@ -97,42 +143,28 @@
  *   family    - family
  */
 union anyip *getinterface_ip(const char *interface, int family) {
-  struct ifaddrmsg ifa;
-  struct nl_cb *callbacks = NULL;
-  struct target targ;
   union anyip *retval = NULL;
+  struct target targ  = {
+    .family  = family,
+    .foundip = 0,
+    .ifindex = if_nametoindex(interface),
+  };
 
-  targ.family  = family;
-  targ.foundip = 0;
-  targ.ifindex = if_nametoindex(interface);
   if (targ.ifindex == 0) {
     return NULL;  // interface not found
   }
 
-  memset(&ifa, 0, sizeof(ifa));
-  ifa.ifa_family = targ.family;
-
-  callbacks = nl_cb_alloc(NL_CB_DEFAULT);
-  if (!callbacks) {
-    goto cleanup;
-  }
-  nl_cb_set(callbacks, NL_CB_VALID, NL_CB_CUSTOM, getaddr_cb, &targ);
-  nl_cb_err(callbacks, NL_CB_CUSTOM, error_handler, &targ);
-
-  // sends message and waits for a response
-  send_ifaddrmsg(RTM_GETADDR, NLM_F_REQUEST | NLM_F_ROOT, &ifa, callbacks);
+  // sends message and receives the response.
+  sendrecv_ifaddrmsg(&targ);
 
   if (targ.foundip) {
     retval = malloc(sizeof(union anyip));
     if (!retval) {
       logmsg(ANDROID_LOG_FATAL, "getinterface_ip/out of memory");
-      goto cleanup;
+      return NULL;
     }
     memcpy(retval, &targ.ip, sizeof(union anyip));
   }
 
-cleanup:
-  if (callbacks) nl_cb_put(callbacks);
-
   return retval;
 }
diff --git a/getaddr.h b/getaddr.h
index 5718e62..482ac13 100644
--- a/getaddr.h
+++ b/getaddr.h
@@ -18,6 +18,8 @@
 #ifndef __GETADDR_H__
 #define __GETADDR_H__
 
+#include <netinet/in.h>
+
 union anyip {
   struct in6_addr ip6;
   struct in_addr ip4;
