X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_neighbor.py;h=7157839127b0ff544e60312e0fe893bd23668f4d;hb=7c0eb56f4;hp=a415e965ea35d3c9ec8efe3419cb455345ced600;hpb=cbe25aab3be72154f2c706c39eeba6a77f34450f;p=vpp.git diff --git a/test/test_neighbor.py b/test/test_neighbor.py index a415e965ea3..7157839127b 100644 --- a/test/test_neighbor.py +++ b/test/test_neighbor.py @@ -1474,6 +1474,71 @@ class ARPTestCase(VppTestCase): self.pg0.remote_hosts[1].ip4, self.pg0.remote_ip4) + def test_arp_table_swap(self): + # + # Generate some hosts on the LAN + # + N_NBRS = 4 + self.pg1.generate_remote_hosts(N_NBRS) + + for n in range(N_NBRS): + # a route thru each neighbour + VppIpRoute(self, "10.0.0.%d" % n, 32, + [VppRoutePath(self.pg1.remote_hosts[n].ip4, + self.pg1.sw_if_index)]).add_vpp_config() + + # resolve each neighbour + p1 = (Ether(dst=self.pg1.local_mac, src=self.pg1.remote_mac) / + ARP(op="is-at", hwdst=self.pg1.local_mac, + hwsrc="00:00:5e:00:01:09", pdst=self.pg1.local_ip4, + psrc=self.pg1.remote_hosts[n].ip4)) + + self.send_and_assert_no_replies(self.pg1, p1, "ARP reply") + + self.logger.info(self.vapi.cli("sh ip neighbors")) + + # + # swap the table pg1 is in + # + table = VppIpTable(self, 100).add_vpp_config() + + self.pg1.unconfig_ip4() + self.pg1.set_table_ip4(100) + self.pg1.config_ip4() + + # + # all neighbours are cleared + # + for n in range(N_NBRS): + self.assertFalse(find_nbr(self, + self.pg1.sw_if_index, + self.pg1.remote_hosts[n].ip4)) + + # + # packets to all neighbours generate ARP requests + # + for n in range(N_NBRS): + # a route thru each neighbour + VppIpRoute(self, "10.0.0.%d" % n, 32, + [VppRoutePath(self.pg1.remote_hosts[n].ip4, + self.pg1.sw_if_index)], + table_id=100).add_vpp_config() + + p = (Ether(src=self.pg1.remote_hosts[n].mac, + dst=self.pg1.local_mac) / + IP(src=self.pg1.remote_hosts[n].ip4, + dst="10.0.0.%d" % n) / + Raw(b'0x5' * 100)) + rxs = self.send_and_expect(self.pg1, [p], self.pg1) + for rx in rxs: + self.verify_arp_req(rx, + self.pg1.local_mac, + self.pg1.local_ip4, + self.pg1.remote_hosts[n].ip4) + + self.pg1.unconfig_ip4() + self.pg1.set_table_ip4(0) + class NeighborStatsTestCase(VppTestCase): """ ARP/ND Counters """ @@ -1666,7 +1731,7 @@ class NeighborAgeTestCase(VppTestCase): # # Set the neighbor configuration: # limi = 200 - # age = 2 seconds + # age = 0 seconds # recycle = false # self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4, @@ -1743,6 +1808,27 @@ class NeighborAgeTestCase(VppTestCase): self.assertFalse(self.vapi.ip_neighbor_dump(sw_if_index=0xffffffff, af=vaf.ADDRESS_IP4)) + # + # load up some neighbours again with 2s aging enabled + # they should be removed after 10s (2s age + 4s for probes + gap) + # + for ii in range(10): + VppNeighbor(self, + self.pg0.sw_if_index, + self.pg0.remote_hosts[ii].mac, + self.pg0.remote_hosts[ii].ip4).add_vpp_config() + self.sleep(10) + self.assertFalse(self.vapi.ip_neighbor_dump(sw_if_index=0xffffffff, + af=vaf.ADDRESS_IP4)) + + # + # check if we can set age and recycle with empty neighbor list + # + self.vapi.ip_neighbor_config(af=vaf.ADDRESS_IP4, + max_number=200, + max_age=1000, + recycle=True) + # # load up some neighbours again, then disable the aging # they should still be there in 10 seconds time