aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/test_neighbor.py109
-rw-r--r--test/vpp_neighbor.py7
2 files changed, 115 insertions, 1 deletions
diff --git a/test/test_neighbor.py b/test/test_neighbor.py
index f01f5367703..a15106af1f9 100644
--- a/test/test_neighbor.py
+++ b/test/test_neighbor.py
@@ -12,6 +12,7 @@ from scapy.packet import Raw
from scapy.layers.l2 import Ether, ARP, Dot1Q
from scapy.layers.inet import IP, UDP
from scapy.contrib.mpls import MPLS
+from scapy.layers.inet6 import IPv6
# not exported by scapy, so redefined here
arp_opts = {"who-has": 1, "is-at": 2}
@@ -1317,6 +1318,7 @@ class ARPTestCase(VppTestCase):
self.pg1.remote_hosts[2].ip4))
def test_arp_incomplete(self):
+ """ Incomplete Entries """
#
# ensure that we throttle the ARP requests
@@ -1348,5 +1350,112 @@ class ARPTestCase(VppTestCase):
self.assertTrue(len(rx) < 64)
+class NeighborStatsTestCase(VppTestCase):
+ """ ARP Test Case """
+
+ def setUp(self):
+ super(NeighborStatsTestCase, self).setUp()
+
+ self.create_pg_interfaces(range(2))
+
+ # pg0 configured with ip4 and 6 addresses used for input
+ # pg1 configured with ip4 and 6 addresses used for output
+ # pg2 is unnumbered to pg0
+ for i in self.pg_interfaces:
+ i.admin_up()
+ i.config_ip4()
+ i.config_ip6()
+ i.resolve_arp()
+ i.resolve_ndp()
+
+ def tearDown(self):
+ super(NeighborStatsTestCase, self).tearDown()
+
+ for i in self.pg_interfaces:
+ i.unconfig_ip4()
+ i.unconfig_ip6()
+ i.admin_down()
+
+ def test_arp_stats(self):
+ """ ARP Counters """
+
+ self.vapi.cli("adj counters enable")
+ self.pg1.generate_remote_hosts(2)
+
+ arp1 = VppNeighbor(self,
+ self.pg1.sw_if_index,
+ self.pg1.remote_hosts[0].mac,
+ self.pg1.remote_hosts[0].ip4)
+ arp1.add_vpp_config()
+ arp2 = VppNeighbor(self,
+ self.pg1.sw_if_index,
+ self.pg1.remote_hosts[1].mac,
+ self.pg1.remote_hosts[1].ip4)
+ arp2.add_vpp_config()
+
+ p1 = (Ether(dst=self.pg0.local_mac,
+ src=self.pg0.remote_mac) /
+ IP(src=self.pg0.remote_ip4,
+ dst=self.pg1.remote_hosts[0].ip4) /
+ UDP(sport=1234, dport=1234) /
+ Raw())
+ p2 = (Ether(dst=self.pg0.local_mac,
+ src=self.pg0.remote_mac) /
+ IP(src=self.pg0.remote_ip4,
+ dst=self.pg1.remote_hosts[1].ip4) /
+ UDP(sport=1234, dport=1234) /
+ Raw())
+
+ rx = self.send_and_expect(self.pg0, p1 * 65, self.pg1)
+ rx = self.send_and_expect(self.pg0, p2 * 65, self.pg1)
+
+ self.assertEqual(65, arp1.get_stats()['packets'])
+ self.assertEqual(65, arp2.get_stats()['packets'])
+
+ rx = self.send_and_expect(self.pg0, p1 * 65, self.pg1)
+ self.assertEqual(130, arp1.get_stats()['packets'])
+
+ def test_nd_stats(self):
+ """ ND Counters """
+
+ self.vapi.cli("adj counters enable")
+ self.pg0.generate_remote_hosts(3)
+
+ nd1 = VppNeighbor(self,
+ self.pg0.sw_if_index,
+ self.pg0.remote_hosts[1].mac,
+ self.pg0.remote_hosts[1].ip6,
+ af=AF_INET6)
+ nd1.add_vpp_config()
+ nd2 = VppNeighbor(self,
+ self.pg0.sw_if_index,
+ self.pg0.remote_hosts[2].mac,
+ self.pg0.remote_hosts[2].ip6,
+ af=AF_INET6)
+ nd2.add_vpp_config()
+
+ p1 = (Ether(dst=self.pg1.local_mac,
+ src=self.pg1.remote_mac) /
+ IPv6(src=self.pg1.remote_ip6,
+ dst=self.pg0.remote_hosts[1].ip6) /
+ UDP(sport=1234, dport=1234) /
+ Raw())
+ p2 = (Ether(dst=self.pg1.local_mac,
+ src=self.pg1.remote_mac) /
+ IPv6(src=self.pg1.remote_ip6,
+ dst=self.pg0.remote_hosts[2].ip6) /
+ UDP(sport=1234, dport=1234) /
+ Raw())
+
+ rx = self.send_and_expect(self.pg1, p1 * 16, self.pg0)
+ rx = self.send_and_expect(self.pg1, p2 * 16, self.pg0)
+
+ self.assertEqual(16, nd1.get_stats()['packets'])
+ self.assertEqual(16, nd2.get_stats()['packets'])
+
+ rx = self.send_and_expect(self.pg1, p1 * 65, self.pg0)
+ self.assertEqual(81, nd1.get_stats()['packets'])
+
+
if __name__ == '__main__':
unittest.main(testRunner=VppTestRunner)
diff --git a/test/vpp_neighbor.py b/test/vpp_neighbor.py
index c08132d1d40..b4803c24cbd 100644
--- a/test/vpp_neighbor.py
+++ b/test/vpp_neighbor.py
@@ -46,7 +46,7 @@ class VppNeighbor(VppObject):
self.nbr_addr_n = inet_pton(af, nbr_addr)
def add_vpp_config(self):
- self._test.vapi.ip_neighbor_add_del(
+ r = self._test.vapi.ip_neighbor_add_del(
self.sw_if_index,
self.mac_addr,
self.nbr_addr_n,
@@ -54,6 +54,7 @@ class VppNeighbor(VppObject):
is_ipv6=1 if AF_INET6 == self.af else 0,
is_static=self.is_static,
is_no_adj_fib=self.is_no_fib_entry)
+ self.stats_index = r.stats_index
self._test.registry.register(self, self._test.logger)
def remove_vpp_config(self):
@@ -77,3 +78,7 @@ class VppNeighbor(VppObject):
def object_id(self):
return ("%d:%s" % (self.sw_if_index, self.nbr_addr))
+
+ def get_stats(self):
+ c = self._test.statistics.get_counter("/net/adjacency")
+ return c[0][self.stats_index]