Filter neighbour dumps by interface.

This might speed DumpNeighbours (and thus make it more likely for
neighbour_test.py to pass) if there are many ND cache entries on
the system when the test is run.

Bug: 116671340
Test: neighbour_test.py passes on android-4.14
Change-Id: I5baa006d838ec8fd3629841da52e00cfbcd02008
Merged-in: I5baa006d838ec8fd3629841da52e00cfbcd02008
(cherry picked from commit a9c03cc882dc2b9a9a00fc2f4bf11bead3b5a306)
diff --git a/net/test/iproute.py b/net/test/iproute.py
index 9cfafc6..a3310a2 100644
--- a/net/test/iproute.py
+++ b/net/test/iproute.py
@@ -147,6 +147,7 @@
 NDA_LLADDR = 2
 NDA_CACHEINFO = 3
 NDA_PROBES = 4
+NDA_IFINDEX = 8
 
 # Neighbour cache entry states.
 NUD_PERMANENT = 0x80
@@ -635,9 +636,10 @@
     self._Neighbour(version, True, addr, lladdr, dev, state,
                     flags=netlink.NLM_F_REPLACE)
 
-  def DumpNeighbours(self, version):
+  def DumpNeighbours(self, version, ifindex):
     ndmsg = NdMsg((self._AddressFamily(version), 0, 0, 0, 0))
-    return self._Dump(RTM_GETNEIGH, ndmsg, NdMsg, "")
+    attrs = self._NlAttrU32(NDA_IFINDEX, ifindex) if ifindex else ""
+    return self._Dump(RTM_GETNEIGH, ndmsg, NdMsg, attrs)
 
   def ParseNeighbourMessage(self, msg):
     msg, _ = self._ParseNLMsg(msg, NdMsg)
diff --git a/net/test/neighbour_test.py b/net/test/neighbour_test.py
index 2caba44..caf2e6e 100755
--- a/net/test/neighbour_test.py
+++ b/net/test/neighbour_test.py
@@ -87,14 +87,14 @@
     self.netid = random.choice(self.tuns.keys())
     self.ifindex = self.ifindices[self.netid]
 
-  def GetNeighbour(self, addr):
+  def GetNeighbour(self, addr, ifindex):
     version = csocket.AddressVersion(addr)
-    for msg, args in self.iproute.DumpNeighbours(version):
+    for msg, args in self.iproute.DumpNeighbours(version, ifindex):
       if args["NDA_DST"] == addr:
         return msg, args
 
   def GetNdEntry(self, addr):
-    return self.GetNeighbour(addr)
+    return self.GetNeighbour(addr, self.ifindex)
 
   def CheckNoNdEvents(self):
     self.assertRaisesErrno(errno.EAGAIN, self.sock.recvfrom, 4096, MSG_PEEK)