X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_neighbor.py;h=0b7ffff8bc3aa21ef1041160aab9dcd62ab185ba;hb=770a0deaadfb2d26cbc5da05f84578a7bd92e9d2;hp=aec487129211061270051eaaa2530a7681652076;hpb=a7427ec6f86cbeba7594f98e41fecab291d66b73;p=vpp.git diff --git a/test/test_neighbor.py b/test/test_neighbor.py index aec48712921..0b7ffff8bc3 100644 --- a/test/test_neighbor.py +++ b/test/test_neighbor.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import unittest from socket import AF_INET, AF_INET6, inet_pton @@ -6,7 +6,7 @@ from socket import AF_INET, AF_INET6, inet_pton from framework import VppTestCase, VppTestRunner from vpp_neighbor import VppNeighbor, find_nbr from vpp_ip_route import VppIpRoute, VppRoutePath, find_route, \ - VppIpTable, DpoProto + VppIpTable, DpoProto, FibPathType from vpp_papi import VppEnum import scapy.compat @@ -17,6 +17,9 @@ from scapy.layers.inet6 import IPv6 from scapy.contrib.mpls import MPLS from scapy.layers.inet6 import IPv6 + +NUM_PKTS = 67 + # not exported by scapy, so redefined here arp_opts = {"who-has": 1, "is-at": 2} @@ -24,6 +27,14 @@ arp_opts = {"who-has": 1, "is-at": 2} class ARPTestCase(VppTestCase): """ ARP Test Case """ + @classmethod + def setUpClass(cls): + super(ARPTestCase, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + super(ARPTestCase, cls).tearDownClass() + def setUp(self): super(ARPTestCase, self).setUp() @@ -300,7 +311,16 @@ class ARPTestCase(VppTestCase): # self.pg2.set_unnumbered(self.pg1.sw_if_index) + # + # test the unnumbered dump both by all interfaces and just the enabled + # one + # unnum = self.vapi.ip_unnumbered_dump() + self.assertTrue(len(unnum)) + self.assertEqual(unnum[0].ip_sw_if_index, self.pg1.sw_if_index) + self.assertEqual(unnum[0].sw_if_index, self.pg2.sw_if_index) + unnum = self.vapi.ip_unnumbered_dump(self.pg2.sw_if_index) + self.assertTrue(len(unnum)) self.assertEqual(unnum[0].ip_sw_if_index, self.pg1.sw_if_index) self.assertEqual(unnum[0].sw_if_index, self.pg2.sw_if_index) @@ -500,7 +520,7 @@ class ARPTestCase(VppTestCase): self.pg1._remote_hosts[9].ip4) # - # Add a hierachy of routes for a host in the sub-net. + # Add a hierarchy of routes for a host in the sub-net. # Should still get an ARP resp since the cover is attached # p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg1.remote_mac) / @@ -599,8 +619,8 @@ class ARPTestCase(VppTestCase): # # 2 - don't respond to ARP request from an address not within the # interface's sub-net - # 2b - to a prxied address - # 2c - not within a differents interface's sub-net + # 2b - to a proxied address + # 2c - not within a different interface's sub-net p = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / ARP(op="who-has", hwsrc=self.pg0.remote_mac, @@ -743,7 +763,7 @@ class ARPTestCase(VppTestCase): self.pg1.generate_remote_hosts(2) # - # Proxy ARP rewquest packets for each interface + # Proxy ARP request packets for each interface # arp_req_pg0 = (Ether(src=self.pg0.remote_mac, dst="ff:ff:ff:ff:ff:ff") / @@ -911,7 +931,7 @@ class ARPTestCase(VppTestCase): self.pg2.generate_remote_hosts(2) # - # Add a reoute with out going label via an ARP unresolved next-hop + # Add a route with out going label via an ARP unresolved next-hop # ip_10_0_0_1 = VppIpRoute(self, "10.0.0.1", 32, [VppRoutePath(self.pg2.remote_hosts[1].ip4, @@ -926,7 +946,7 @@ class ARPTestCase(VppTestCase): dst=self.pg0.local_mac) / IP(src=self.pg0.remote_ip4, dst="10.0.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.pg0.add_stream(p) self.pg_enable_capture(self.pg_interfaces) @@ -1054,7 +1074,7 @@ class ARPTestCase(VppTestCase): # # remove the duplicate on pg1 - # packet stream shoud generate ARPs out of pg1 + # packet stream should generate ARPs out of pg1 # arp_pg1.remove_vpp_config() @@ -1207,7 +1227,7 @@ class ARPTestCase(VppTestCase): self.pg1.remote_hosts[1].ip4) # - # set the mac address on the inteface that does not have a + # set the mac address on the interface that does not have a # configured subnet and thus no glean # self.vapi.sw_interface_set_mac_address(self.pg2.sw_if_index, @@ -1276,7 +1296,7 @@ class ARPTestCase(VppTestCase): mac=self.pg1.remote_hosts[3].mac)) # - # GARPs (requets nor replies) for host we don't know yet + # GARPs (request nor replies) for host we don't know yet # don't result in new neighbour entries # p1 = (Ether(dst="ff:ff:ff:ff:ff:ff", @@ -1351,8 +1371,7 @@ class ARPTestCase(VppTestCase): ip_10_1 = VppIpRoute(self, "10::1", 128, [VppRoutePath(self.pg0.remote_hosts[1].ip6, self.pg0.sw_if_index, - proto=DpoProto.DPO_PROTO_IP6)], - is_ip6=1) + proto=DpoProto.DPO_PROTO_IP6)]) ip_10_1.add_vpp_config() p1 = (Ether(dst=self.pg1.local_mac, @@ -1380,15 +1399,16 @@ class ARPTestCase(VppTestCase): # Test that VPP responds with ARP requests to addresses that # are connected and local routes. # Use one of the 'remote' addresses in the subnet as a local address - # The intention of this route is that it then acts like a secondardy + # The intention of this route is that it then acts like a secondary # address added to an interface # self.pg0.generate_remote_hosts(2) - forus = VppIpRoute(self, self.pg0.remote_hosts[1].ip4, 32, - [VppRoutePath(self.pg0.remote_hosts[1].ip4, - self.pg0.sw_if_index)], - is_local=1) + forus = VppIpRoute( + self, self.pg0.remote_hosts[1].ip4, 32, + [VppRoutePath("0.0.0.0", + self.pg0.sw_if_index, + type=FibPathType.FIB_PATH_TYPE_LOCAL)]) forus.add_vpp_config() p = (Ether(dst="ff:ff:ff:ff:ff:ff", @@ -1411,6 +1431,14 @@ class ARPTestCase(VppTestCase): class NeighborStatsTestCase(VppTestCase): """ ARP/ND Counters """ + @classmethod + def setUpClass(cls): + super(NeighborStatsTestCase, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + super(NeighborStatsTestCase, cls).tearDownClass() + def setUp(self): super(NeighborStatsTestCase, self).setUp() @@ -1464,14 +1492,14 @@ class NeighborStatsTestCase(VppTestCase): 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) + rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1) + rx = self.send_and_expect(self.pg0, p2 * NUM_PKTS, self.pg1) - self.assertEqual(65, arp1.get_stats()['packets']) - self.assertEqual(65, arp2.get_stats()['packets']) + self.assertEqual(NUM_PKTS, arp1.get_stats()['packets']) + self.assertEqual(NUM_PKTS, arp2.get_stats()['packets']) - rx = self.send_and_expect(self.pg0, p1 * 65, self.pg1) - self.assertEqual(130, arp1.get_stats()['packets']) + rx = self.send_and_expect(self.pg0, p1 * NUM_PKTS, self.pg1) + self.assertEqual(NUM_PKTS*2, arp1.get_stats()['packets']) def test_nd_stats(self): """ ND Counters """ @@ -1509,8 +1537,8 @@ class NeighborStatsTestCase(VppTestCase): 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']) + rx = self.send_and_expect(self.pg1, p1 * NUM_PKTS, self.pg0) + self.assertEqual(NUM_PKTS+16, nd1.get_stats()['packets']) if __name__ == '__main__':