Snap for 10453563 from e80cf191495cad6788c19ecd42b51ceb25598021 to mainline-adservices-release

Change-Id: I0d9927d1c6c1583cc32421374251550a9932fd60
diff --git a/Android.bp b/Android.bp
index ff8eec8..0aba986 100644
--- a/Android.bp
+++ b/Android.bp
@@ -175,6 +175,7 @@
     static_libs: ["libcutils"],
     shared_libs: ["liblog"],
 
+    min_sdk_version: "apex_inherit",
     apex_available: [
         "//apex_available:platform",
         "com.android.adbd",
diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
index 8960c93..fe899a6 100644
--- a/mDNSPosix/mDNSPosix.c
+++ b/mDNSPosix/mDNSPosix.c
@@ -55,6 +55,7 @@
 
 #if USES_NETLINK
 #include <asm/types.h>
+#include <linux/if_arp.h>
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
 #else // USES_NETLINK
@@ -1102,14 +1103,14 @@
 	}
 #endif
 
-mDNSlocal mDNSu32		ProcessRoutingNotification(int sd)
+mDNSlocal mDNSBool		ProcessRoutingNotification(int sd)
 // Read through the messages on sd and if any indicate that any interface records should
 // be torn down and rebuilt, return affected indices as a bitmask. Otherwise return 0.
 	{
 	ssize_t					readCount;
 	char					buff[4096];	
 	struct nlmsghdr			*pNLMsg = (struct nlmsghdr*) buff;
-	mDNSu32				result = 0;
+	mDNSBool				result = mDNSfalse;
 	
 	// The structure here is more complex than it really ought to be because,
 	// unfortunately, there's no good way to size a buffer in advance large
@@ -1144,10 +1145,18 @@
 #endif
 
 		// Process the NetLink message
-		if (pNLMsg->nlmsg_type == RTM_GETLINK || pNLMsg->nlmsg_type == RTM_NEWLINK)
-			result |= 1 << ((struct ifinfomsg*) NLMSG_DATA(pNLMsg))->ifi_index;
-		else if (pNLMsg->nlmsg_type == RTM_DELADDR || pNLMsg->nlmsg_type == RTM_NEWADDR)
-			result |= 1 << ((struct ifaddrmsg*) NLMSG_DATA(pNLMsg))->ifa_index;
+		if (pNLMsg->nlmsg_type == RTM_GETLINK || pNLMsg->nlmsg_type == RTM_DELADDR ||
+				pNLMsg->nlmsg_type == RTM_NEWADDR)
+			{
+			result = mDNStrue;
+			}
+		else if (pNLMsg->nlmsg_type == RTM_NEWLINK)
+			{
+			// Fix for UWB start/stop causing mdns drop. See b/265207453
+			struct ifinfomsg *pIfInfo = (struct ifinfomsg*) NLMSG_DATA(pNLMsg);
+			if (pIfInfo->ifi_family != AF_UNSPEC || pIfInfo->ifi_type != ARPHRD_IEEE802154)
+				result = mDNStrue;
+			}
 
 		// Advance pNLMsg to the next message in the buffer
 		if ((pNLMsg->nlmsg_flags & NLM_F_MULTI) != 0 && pNLMsg->nlmsg_type != NLMSG_DONE)
@@ -1191,14 +1200,14 @@
 	}
 #endif
 
-mDNSlocal mDNSu32		ProcessRoutingNotification(int sd)
+mDNSlocal mDNSBool		ProcessRoutingNotification(int sd)
 // Read through the messages on sd and if any indicate that any interface records should
 // be torn down and rebuilt, return affected indices as a bitmask. Otherwise return 0.
 	{
 	ssize_t					readCount;
 	char					buff[4096];	
 	struct ifa_msghdr		*pRSMsg = (struct ifa_msghdr*) buff;
-	mDNSu32				result = 0;
+	mDNSBool				result = mDNSfalse;
 
 	readCount = read(sd, buff, sizeof buff);
 	if (readCount < (ssize_t) sizeof(struct ifa_msghdr))
@@ -1212,10 +1221,7 @@
 	if (pRSMsg->ifam_type == RTM_NEWADDR || pRSMsg->ifam_type == RTM_DELADDR ||
 		 pRSMsg->ifam_type == RTM_IFINFO)
 		{
-		if (pRSMsg->ifam_type == RTM_IFINFO)
-			result |= 1 << ((struct if_msghdr*) pRSMsg)->ifm_index;
-		else
-			result |= 1 << pRSMsg->ifam_index;
+		result = mDNStrue;
 		}
 
 	return result;
@@ -1228,7 +1234,7 @@
 	{
 	IfChangeRec		*pChgRec = (IfChangeRec*) context;
 	fd_set			readFDs;
-	mDNSu32		changedInterfaces = 0;
+	mDNSBool		changedInterfaces = mDNSfalse;
 	struct timeval	zeroTimeout = { 0, 0 };
 
 	(void)fd; // Unused
diff --git a/mDNSPosix/mDNSUNP.c b/mDNSPosix/mDNSUNP.c
index f5d0c52..0e3632b 100755
--- a/mDNSPosix/mDNSUNP.c
+++ b/mDNSPosix/mDNSUNP.c
@@ -106,7 +106,7 @@
 			goto gotError;
 		}
 		while (fscanf(fp,
-					  "%4s%4s%4s%4s%4s%4s%4s%4s %x %02x %02x %02x %15s\n",
+					  "%4s%4s%4s%4s%4s%4s%4s%4s %x %x %x %x %15s\n",
 					  addr[0],addr[1],addr[2],addr[3],
 					  addr[4],addr[5],addr[6],addr[7],
 					  &index, &plen, &scope, &flags, ifname) != EOF) {