summaryrefslogtreecommitdiffstats
path: root/test/vpp_neighbor.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/vpp_neighbor.py')
-rw-r--r--test/vpp_neighbor.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/vpp_neighbor.py b/test/vpp_neighbor.py
new file mode 100644
index 00000000000..fbd41eb5352
--- /dev/null
+++ b/test/vpp_neighbor.py
@@ -0,0 +1,77 @@
+"""
+ Neighbour Entries
+
+ object abstractions for ARP and ND
+"""
+
+from socket import inet_pton, inet_ntop, AF_INET, AF_INET6
+from vpp_object import *
+from util import mactobinary
+
+
+def find_nbr(test, sw_if_index, ip_addr, is_static=0, inet=AF_INET):
+ nbrs = test.vapi.ip_neighbor_dump(sw_if_index,
+ is_ipv6=1 if AF_INET6 == inet else 0)
+ if inet == AF_INET:
+ s = 4
+ else:
+ s = 16
+ nbr_addr = inet_pton(inet, ip_addr)
+
+ for n in nbrs:
+ if nbr_addr == n.ip_address[:s] \
+ and is_static == n.is_static:
+ return True
+ return False
+
+
+class VppNeighbor(VppObject):
+ """
+ ARP Entry
+ """
+
+ def __init__(self, test, sw_if_index, mac_addr, nbr_addr,
+ af=AF_INET, is_static=0):
+ self._test = test
+ self.sw_if_index = sw_if_index
+ self.mac_addr = mactobinary(mac_addr)
+ self.af = af
+ self.is_static = is_static
+ self.nbr_addr = inet_pton(af, nbr_addr)
+
+ def add_vpp_config(self):
+ self._test.vapi.ip_neighbor_add_del(
+ self.sw_if_index,
+ self.mac_addr,
+ self.nbr_addr,
+ is_add=1,
+ is_ipv6=1 if AF_INET6 == self.af else 0,
+ is_static=self.is_static)
+ self._test.registry.register(self, self._test.logger)
+
+ def remove_vpp_config(self):
+ self._test.vapi.ip_neighbor_add_del(
+ self.sw_if_index,
+ self.mac_addr,
+ self.nbr_addr,
+ is_ipv6=1 if AF_INET6 == self.af else 0,
+ is_add=0,
+ is_static=self.is_static)
+
+ def query_vpp_config(self):
+ dump = self._test.vapi.ip_neighbor_dump(
+ self.sw_if_index,
+ is_ipv6=1 if AF_INET6 == self.af else 0)
+ for n in dump:
+ if self.nbr_addr == n.ip_address \
+ and self.is_static == n.is_static:
+ return True
+ return False
+
+ def __str__(self):
+ return self.object_id()
+
+ def object_id(self):
+ return ("%d:%s"
+ % (self.sw_if_index,
+ inet_ntop(self.af, self.nbr_addr)))