+ def test_l2bd_arp_term_06(self):
+ """ L2BD arp/ND term - hosts with both ip4/ip6
+ """
+ src_host4 = self.ip4_host(50, 50, "00:00:11:22:33:44")
+ src_host6 = self.ip6_host(50, 50, "00:00:11:22:33:44")
+ self.bd_add_del(1, is_add=1)
+ # enable flood to make sure requests are not flooded
+ self.set_bd_flags(1, arp_term=True, flood=True,
+ uu_flood=False, learn=False)
+ macs = self.mac_list(range(10, 20))
+ hosts6 = self.ip6_hosts(5, 1, macs)
+ hosts4 = self.ip4_hosts(5, 1, macs)
+ self.add_del_arp_term_hosts(hosts4, is_add=1)
+ self.add_del_arp_term_hosts(hosts6, is_add=1, is_ipv6=1)
+ self.verify_arp(src_host4, hosts4, hosts4)
+ self.verify_nd(src_host6, hosts6, hosts6)
+ self.bd_add_del(1, is_add=0)
+
+ def test_l2bd_arp_term_07(self):
+ """ L2BD ND term - Add and Del hosts, verify ND replies
+ """
+ src_host6 = self.ip6_host(50, 50, "00:00:11:22:33:44")
+ self.bd_add_del(1, is_add=1)
+ self.set_bd_flags(1, arp_term=True, flood=False,
+ uu_flood=False, learn=False)
+ macs = self.mac_list(range(10, 20))
+ hosts6 = self.ip6_hosts(5, 1, macs)
+ self.add_del_arp_term_hosts(hosts6, is_add=1, is_ipv6=1)
+ self.verify_nd(src_host6, hosts6, hosts6)
+ del_macs = self.mac_list(range(10, 15))
+ deleted = self.ip6_hosts(5, 1, del_macs)
+ self.add_del_arp_term_hosts(deleted, is_add=0, is_ipv6=1)
+ self.verify_nd(src_host6, hosts6, hosts6 - deleted)
+ self.bd_add_del(1, is_add=0)
+
+ def test_l2bd_arp_term_08(self):
+ """ L2BD ND term - Add and update IP+mac, verify ND replies
+ """
+ src_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
+ self.bd_add_del(1, is_add=1)
+ self.set_bd_flags(1, arp_term=True, flood=False,
+ uu_flood=False, learn=False)
+ macs1 = self.mac_list(range(10, 20))
+ hosts = self.ip6_hosts(5, 1, macs1)
+ self.add_del_arp_term_hosts(hosts, is_add=1, is_ipv6=1)
+ self.verify_nd(src_host, hosts, hosts)
+ macs2 = self.mac_list(range(20, 30))
+ updated = self.ip6_hosts(5, 1, macs2)
+ self.add_del_arp_term_hosts(updated, is_add=1, is_ipv6=1)
+ self.verify_nd(src_host, hosts, updated)
+ self.bd_add_del(1, is_add=0)
+
+ def test_l2bd_arp_term_09(self):
+ """ L2BD arp term - send garps, verify arp event reports
+ """
+ self.vapi.want_ip4_arp_events()
+ self.bd_add_del(1, is_add=1)
+ self.set_bd_flags(1, arp_term=True, flood=False,
+ uu_flood=False, learn=False)
+ macs = self.mac_list(range(90, 95))
+ hosts = self.ip4_hosts(5, 1, macs)
+
+ garps = self.garp_reqs(hosts)
+ self.bd_swifs(1)[0].add_stream(garps)
+
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ evs = [self.vapi.wait_for_event(1, "ip4_arp_event")
+ for i in range(len(hosts))]
+ ev_hosts = self.arp_event_hosts(evs)
+ self.assertEqual(len(ev_hosts ^ hosts), 0)
+
+ def test_l2bd_arp_term_10(self):
+ """ L2BD arp term - send duplicate garps, verify suppression
+ """
+ macs = self.mac_list(range(70, 71))
+ hosts = self.ip4_hosts(6, 1, macs)
+
+ """ send the packet 5 times expect one event
+ """
+ garps = self.garp_reqs(hosts) * 5
+ self.bd_swifs(1)[0].add_stream(garps)
+
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ evs = [self.vapi.wait_for_event(1, "ip4_arp_event")
+ for i in range(len(hosts))]
+ ev_hosts = self.arp_event_hosts(evs)
+ self.assertEqual(len(ev_hosts ^ hosts), 0)
+
+ def test_l2bd_arp_term_11(self):
+ """ L2BD arp term - disable ip4 arp events,send garps, verify no events
+ """
+ self.vapi.want_ip4_arp_events(enable_disable=0)
+ macs = self.mac_list(range(90, 95))
+ hosts = self.ip4_hosts(5, 1, macs)
+
+ garps = self.garp_reqs(hosts)
+ self.bd_swifs(1)[0].add_stream(garps)
+
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ self.sleep(1)
+ self.assertEqual(len(self.vapi.collect_events()), 0)
+ self.bd_add_del(1, is_add=0)
+
+ def test_l2bd_arp_term_12(self):
+ """ L2BD ND term - send NS packets verify reports
+ """
+ self.vapi.want_ip6_nd_events(address=inet_pton(AF_INET6, "::0"))
+ dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
+ self.bd_add_del(1, is_add=1)
+ self.set_bd_flags(1, arp_term=True, flood=False,
+ uu_flood=False, learn=False)
+ macs = self.mac_list(range(10, 15))
+ hosts = self.ip6_hosts(5, 1, macs)
+ reqs = self.ns_reqs_dst(hosts, dst_host)
+ self.bd_swifs(1)[0].add_stream(reqs)
+
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ evs = [self.vapi.wait_for_event(2, "ip6_nd_event")
+ for i in range(len(hosts))]
+ ev_hosts = self.nd_event_hosts(evs)
+ self.assertEqual(len(ev_hosts ^ hosts), 0)
+
+ def test_l2bd_arp_term_13(self):
+ """ L2BD ND term - send duplicate ns, verify suppression
+ """
+ dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
+ macs = self.mac_list(range(10, 11))
+ hosts = self.ip6_hosts(5, 1, macs)
+ reqs = self.ns_reqs_dst(hosts, dst_host) * 5
+ self.bd_swifs(1)[0].add_stream(reqs)
+
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ evs = [self.vapi.wait_for_event(2, "ip6_nd_event")
+ for i in range(len(hosts))]
+ ev_hosts = self.nd_event_hosts(evs)
+ self.assertEqual(len(ev_hosts ^ hosts), 0)
+
+ def test_l2bd_arp_term_14(self):
+ """ L2BD ND term - disable ip4 arp events,send ns, verify no events
+ """
+ self.vapi.want_ip6_nd_events(enable_disable=0,
+ address=inet_pton(AF_INET6, "::0"))
+ dst_host = self.ip6_host(50, 50, "00:00:11:22:33:44")
+ macs = self.mac_list(range(10, 15))
+ hosts = self.ip6_hosts(5, 1, macs)
+ reqs = self.ns_reqs_dst(hosts, dst_host)
+ self.bd_swifs(1)[0].add_stream(reqs)
+
+ self.pg_enable_capture(self.pg_interfaces)
+ self.pg_start()
+ self.sleep(1)
+ self.assertEqual(len(self.vapi.collect_events()), 0)
+ self.bd_add_del(1, is_add=0)
+