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)