diff --git a/libc/netbsd/gethnamaddr.c b/libc/netbsd/gethnamaddr.c
index c59d1f1..9a9f6e2 100644
--- a/libc/netbsd/gethnamaddr.c
+++ b/libc/netbsd/gethnamaddr.c
@@ -56,7 +56,6 @@
 
 #include <sys/param.h>
 #include <sys/socket.h>
-#include <sys/un.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
 #include "arpa_nameser.h"
@@ -70,7 +69,6 @@
 #include <stdio.h>
 #include <strings.h>
 #include <syslog.h>
-#include <unistd.h>
 
 #ifndef LOG_AUTH
 # define LOG_AUTH 0
@@ -82,9 +80,6 @@
 #include <stdlib.h>
 #include <string.h>
 
-// This should be synchronized to ResponseCode.h
-static const int DnsProxyQueryResult = 222;
-
 static const char const AskedForGot[] =
 			  "gethostby*.getanswer: asked for \"%s\", got \"%s\"";
 
@@ -126,7 +121,7 @@
 static int _dns_gethtbyaddr(void *, void *, va_list);
 static int _dns_gethtbyname(void *, void *, va_list);
 
-static struct hostent *gethostbyname_internal(const char *, int, res_state, const char *);
+static struct hostent *gethostbyname_internal(const char *, int, res_state);
 
 static const ns_src default_dns_files[] = {
 	{ NSSRC_FILES, 	NS_SUCCESS },
@@ -495,15 +490,14 @@
 
 	assert(name != NULL);
 
-	/* try IPv6 first - if that fails do IPv4 */
 	if (res->options & RES_USE_INET6) {
-		hp = gethostbyname_internal(name, AF_INET6, res, NULL);
+		hp = gethostbyname_internal(name, AF_INET6, res);
 		if (hp) {
 			__res_put_state(res);
 			return hp;
 		}
 	}
-	hp = gethostbyname_internal(name, AF_INET, res, NULL);
+	hp = gethostbyname_internal(name, AF_INET, res);
 	__res_put_state(res);
 	return hp;
 }
@@ -511,145 +505,25 @@
 struct hostent *
 gethostbyname2(const char *name, int af)
 {
-	return android_gethostbynameforiface(name, af, NULL);
-}
-
-struct hostent *
-android_gethostbynameforiface(const char *name, int af, const char *iface)
-{
 	struct hostent *hp;
 	res_state res = __res_get_state();
 
 	if (res == NULL)
 		return NULL;
-	hp = gethostbyname_internal(name, af, res, iface);
+	hp = gethostbyname_internal(name, af, res);
 	__res_put_state(res);
 	return hp;
 }
 
-static struct hostent *gethostbyname_internal_real(const char *name, int af, res_state res);
-
-// very similar in proxy-ness to android_getaddrinfo_proxy
 static struct hostent *
-gethostbyname_internal(const char *name, int af, res_state res, const char *iface)
-{
-	int sock;
-	const int one = 1;
-	struct sockaddr_un proxy_addr;
-	const char *cache_mode = getenv("ANDROID_DNS_MODE");
-	FILE* proxy = NULL;
-
-	if (cache_mode != NULL && strcmp(cache_mode, "local") == 0) {
-		res_setiface(res, iface);
-		return gethostbyname_internal_real(name, af, res);
-	}
-
-	sock = socket(AF_UNIX, SOCK_STREAM, 0);
-	if (sock < 0) {
-		return NULL;
-	}
-
-	setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one));
-	memset(&proxy_addr, 0, sizeof(proxy_addr));
-	proxy_addr.sun_family = AF_UNIX;
-	strlcpy(proxy_addr.sun_path, "/dev/socket/dnsproxyd", sizeof(proxy_addr.sun_path));
-	if (TEMP_FAILURE_RETRY(connect(sock,
-				       (const struct sockaddr*) &proxy_addr,
-				       sizeof(proxy_addr))) != 0) {
-		close(sock);
-		return NULL;
-	}
-
-	proxy = fdopen(sock, "r+");
-	/* This is writing to system/netd/DnsProxyListener.cpp and changes
-	 * here need to be matched there */
-	if (fprintf(proxy, "gethostbyname %d %s %d",
-		    getpid(),
-		    iface == NULL ? "^" : iface,
-		    name == NULL ? "^" : name,
-		    af) < 0) {
-		goto exit;
-	}
-
-	if (fputc(0, proxy) == EOF || fflush(proxy) != 0) {
-		goto exit;
-	}
-
-	uint32_t size;
-	char *buf = (char *)&size;
-	if (fread(buf, 1, sizeof(size), proxy) != 1) {
-		goto exit;
-	}
-
-	/* This is reading serialized data from system/netd/DnsProxyListener.cpp
-	 * and changes here need to be matched there */
-	int result_code = (int)strtol(buf, NULL, 10);
-	if (result_code != DnsProxyQueryResult) goto exit;
-
-	if (fread(buf, 1, sizeof(size), proxy) != 1) goto exit;
-	size = ntohl(size);
-
-	res_static rs = __res_get_static();
-	memset(&rs->host, 0, sizeof(rs->host));
-	char *ptr = rs->hostbuf;
-
-	if (fread(ptr, 1, size, proxy) != 1) goto exit;
-	ptr += size;
-	rs->host.h_name = rs->hostbuf;
-
-	char **aliases = rs->host_aliases;
-	rs->host.h_aliases = rs->host_aliases;
-	while (1) {
-		if (fread(buf, 1, sizeof(size), proxy) != 1) goto exit;
-		size = ntohl(size);
-		if (fread(ptr, 1, size, proxy) != 1) goto exit;
-		if (size == 1) {
-			*aliases = NULL;
-			break;
-		}
-		*aliases++ = ptr;
-		ptr += size;
-	}
-
-	if (fread(buf, 1, sizeof(size), proxy) != 1) goto exit;
-	rs->host.h_addrtype = ntohl(size);
-
-	if (fread(buf, 1, sizeof(size), proxy) != 1) goto exit;
-	rs->host.h_length = ntohl(size);
-
-	char **addrs = rs->h_addr_ptrs;
-	rs->host.h_addr_list = rs->h_addr_ptrs;
-	while (1) {
-		if (fread(buf, 1, sizeof(size), proxy) != 1) goto exit;
-		size = ntohl(size);
-		if (fread(ptr, 1, size, proxy) != 1) goto exit;
-		if (size == 1) {
-		    *addrs = NULL;
-		    break;
-		}
-		*addrs++ = ptr;
-		ptr += size;
-	}
-
-	fclose(proxy);
-	return &rs->host;
-
-exit:
-	if (proxy != NULL) {
-		fclose(proxy);
-	}
-	return NULL;
-}
-
-
-static struct hostent *
-gethostbyname_internal_real(const char *name, int af, res_state res)
+gethostbyname_internal(const char *name, int af, res_state res)
 {
 	const char *cp;
 	char *bp, *ep;
 	int size;
 	struct hostent *hp;
-	res_static rs = __res_get_static();
+        struct resolv_cache*  cache;
+        res_static  rs = __res_get_static();
 
 	static const ns_dtab dtab[] = {
 		NS_FILES_CB(_gethtbyname, NULL)
@@ -767,13 +641,6 @@
 gethostbyaddr(const void *addr,
     socklen_t len, int af)
 {
-	return android_gethostbyaddrforiface(addr, len, af, NULL);
-}
-
-struct hostent *
-android_gethostbyaddrforiface(const void *addr,
-    socklen_t len, int af, const char* iface)
-{
 	const u_char *uaddr = (const u_char *)addr;
 	socklen_t size;
 	struct hostent *hp;
@@ -820,7 +687,7 @@
 	hp = NULL;
 	h_errno = NETDB_INTERNAL;
 	if (nsdispatch(&hp, dtab, NSDB_HOSTS, "gethostbyaddr",
-	    default_dns_files, uaddr, len, af, iface) != NS_SUCCESS)
+	    default_dns_files, uaddr, len, af) != NS_SUCCESS)
 		return NULL;
 	h_errno = NETDB_SUCCESS;
 	return hp;
@@ -1257,7 +1124,6 @@
 	const unsigned char *uaddr;
 	int len, af, advance;
 	res_state res;
-	const char* iface;
 	res_static rs = __res_get_static();
 
 	assert(rv != NULL);
@@ -1265,7 +1131,6 @@
 	uaddr = va_arg(ap, unsigned char *);
 	len = va_arg(ap, int);
 	af = va_arg(ap, int);
-	iface = va_arg(ap, char *);
 
 	switch (af) {
 	case AF_INET:
@@ -1307,8 +1172,6 @@
 		free(buf);
 		return NS_NOTFOUND;
 	}
-	res_setiface(res, iface);
-	_resolv_populate_res_for_iface(res);
 	n = res_nquery(res, qbuf, C_IN, T_PTR, buf->buf, sizeof(buf->buf));
 	if (n < 0) {
 		free(buf);
