X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_neighbor.py;h=81c3acb09a3b37368ed2177dfd99cdaf5155dad2;hb=02bfd641b;hp=c378cff4e13e4da3763e733b206a69aa815646db;hpb=37029305c671f4e2d091d6f6c22142634e409043;p=vpp.git diff --git a/test/test_neighbor.py b/test/test_neighbor.py index c378cff4e13..81c3acb09a3 100644 --- a/test/test_neighbor.py +++ b/test/test_neighbor.py @@ -6,9 +6,10 @@ 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 from scapy.packet import Raw from scapy.layers.l2 import Ether, ARP, Dot1Q from scapy.layers.inet import IP, UDP @@ -16,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} @@ -23,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() @@ -299,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) @@ -499,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) / @@ -598,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, @@ -742,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") / @@ -910,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, @@ -1053,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() @@ -1178,8 +1199,9 @@ class ARPTestCase(VppTestCase): # # change the interface's MAC # - mac = [chr(0x00), chr(0x00), chr(0x00), - chr(0x33), chr(0x33), chr(0x33)] + mac = [scapy.compat.chb(0x00), scapy.compat.chb(0x00), + scapy.compat.chb(0x00), scapy.compat.chb(0x33), + scapy.compat.chb(0x33), scapy.compat.chb(0x33)] mac_string = ''.join(mac) self.vapi.sw_interface_set_mac_address(self.pg1.sw_if_index, @@ -1205,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, @@ -1274,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", @@ -1349,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, @@ -1378,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", @@ -1409,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() @@ -1462,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 """ @@ -1507,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__':