def create_vxlan_gpe_flood_test_bd(cls, vni, n_ucast_tunnels, port): # Create 10 ucast vxlan tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4 for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end): # add host route so dest_ip4n will not be resolved rip = VppIpRoute( cls, dest_ip4, 32, [VppRoutePath(next_hop_address, INVALID_INDEX)], register=False, ) rip.add_vpp_config() r = VppVxlanGpeTunnel( cls, src_addr=cls.pg0.local_ip4, dst_addr=dest_ip4, src_port=port, dst_port=port, vni=vni, ) r.add_vpp_config() cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
def create_vxlan_gbp_flood_test_bd(cls, vni, n_ucast_tunnels): # Create 2 ucast vxlan tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4 for dest_ip4 in ip4_range(cls.pg0.remote_ip4, ip_range_start, ip_range_end): # add host route so dest_ip4 will not be resolved rip = VppIpRoute(cls, dest_ip4, 32, [VppRoutePath(next_hop_address, INVALID_INDEX)], register=False) rip.add_vpp_config() r = cls.vapi.vxlan_gbp_tunnel_add_del( tunnel={ 'src': cls.pg0.local_ip4, 'dst': dest_ip4, 'vni': vni, 'instance': INVALID_INDEX, 'mcast_sw_if_index': INVALID_INDEX, 'mode': 1, }, is_add=1 ) cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
def create_gtpu_flood_test_bd(cls, teid, n_ucast_tunnels): # Create 10 ucast gtpu tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4 for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end): # add host route so dest_ip4 will not be resolved rip = VppIpRoute( cls, dest_ip4, 32, [VppRoutePath(next_hop_address, INVALID_INDEX)], register=False, ) rip.add_vpp_config() r = cls.vapi.gtpu_add_del_tunnel( is_add=True, mcast_sw_if_index=0xFFFFFFFF, decap_next_index=0xFFFFFFFF, src_address=cls.pg0.local_ip4, dst_address=dest_ip4, teid=teid, ) cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=teid)
def add_del_mcast_tunnels_load(cls, is_add): """ add or del tunnels to test geneve stability """ n_distinct_dst_tunnels = 10 ip_range_start = 10 ip_range_end = ip_range_start + n_distinct_dst_tunnels for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end): vni = int(dest_ip4.split('.')[3]) cls.vapi.geneve_add_del_tunnel(local_address=cls.pg0.local_ip4, remote_address=dest_ip4, mcast_sw_if_index=1, is_add=is_add, vni=vni)
def add_del_mcast_tunnels_load(cls, is_add): """ add or del tunnels to test vxlan_gpe stability """ n_distinct_dst_tunnels = 20 ip_range_start = 10 ip_range_end = ip_range_start + n_distinct_dst_tunnels for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end): vni = int(dest_ip4.split(".")[3]) cls.vapi.vxlan_gpe_add_del_tunnel(src_addr=cls.pg0.local_ip4, dst_addr=dest_ip4, mcast_sw_if_index=1, vni=vni, is_add=is_add)
def add_del_mcast_tunnels_load(cls, is_add): """ add or del tunnels to test gtpu stability """ n_distinct_dst_tunnels = 20 ip_range_start = 10 ip_range_end = ip_range_start + n_distinct_dst_tunnels for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end): teid = int(dest_ip4.split('.')[3]) cls.vapi.gtpu_add_del_tunnel(decap_next_index=0xFFFFFFFF, src_address=cls.pg0.local_ip4, dst_address=dest_ip4, mcast_sw_if_index=1, teid=teid, is_add=is_add)
def create_vxlan_gbp_flood_test_bd(cls, vni, n_ucast_tunnels): # Create 2 ucast vxlan tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4n for dest_ip4 in ip4_range(cls.pg0.remote_ip4, ip_range_start, ip_range_end): # add host route so dest_ip4n will not be resolved vip = VppIpAddress(dest_ip4) cls.vapi.ip_add_del_route(vip.bytes, 32, next_hop_address) r = cls.vapi.vxlan_gbp_tunnel_add_del(VppIpAddress( cls.pg0.local_ip4).encode(), vip.encode(), vni=vni) cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
def add_del_mcast_tunnels_load(cls, is_add): """ add or del tunnels to test vxlan stability """ n_distinct_dst_tunnels = 200 ip_range_start = 10 ip_range_end = ip_range_start + n_distinct_dst_tunnels for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end): vni = bytearray(socket.inet_pton(socket.AF_INET, dest_ip4))[3] r = VppVxlanTunnel(cls, src=cls.pg0.local_ip4, dst=dest_ip4, mcast_sw_if_index=1, vni=vni) if is_add: r.add_vpp_config() else: r.remove_vpp_config()
def create_geneve_flood_test_bd(cls, vni, n_ucast_tunnels): # Create 10 ucast geneve tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4 for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end): # add host route so dest_ip4 will not be resolved rip = VppIpRoute(cls, dest_ip4, 32, [VppRoutePath(next_hop_address, INVALID_INDEX)], register=False) rip.add_vpp_config() r = cls.vapi.geneve_add_del_tunnel( local_address=cls.pg0.local_ip4, remote_address=dest_ip4, vni=vni) cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
def test_mcast_rcv(self): """ Multicast receive test Send 20 encapsulated frames from pg0 only 10 match unicast tunnels Verify receipt of 10 decap frames on pg2 """ mac = self.pg0.remote_mac ip_range_start = 10 ip_range_end = 30 mcast_stream = [ self.encap_mcast(self.frame_request, ip, mac, self.mcast_flood_bd) for ip in ip4_range(self.pg0.remote_ip4, ip_range_start, ip_range_end)] self.pg0.add_stream(mcast_stream) self.pg2.enable_capture() self.pg_start() out = self.pg2.get_capture(10) for pkt in out: self.assert_eq_pkts(pkt, self.frame_request)
def create_vxlan_gbp_flood_test_bd(cls, vni, n_ucast_tunnels): # Create 2 ucast vxlan tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4n for dest_ip4 in ip4_range(cls.pg0.remote_ip4, ip_range_start, ip_range_end): # add host route so dest_ip4n will not be resolved vip = VppIpAddress(dest_ip4) cls.vapi.ip_add_del_route(dst_address=vip.bytes, dst_address_length=32, next_hop_address=next_hop_address) r = cls.vapi.vxlan_gbp_tunnel_add_del( VppIpAddress(cls.pg0.local_ip4).encode(), vip.encode(), vni=vni) cls.vapi.sw_interface_set_l2_bridge(rx_sw_if_index=r.sw_if_index, bd_id=vni)
def create_vxlan_flood_test_bd(cls, vni, n_ucast_tunnels): # Create 10 ucast vxlan tunnels under bd ip_range_start = 10 ip_range_end = ip_range_start + n_ucast_tunnels next_hop_address = cls.pg0.remote_ip4 for dest_ip4 in ip4_range(next_hop_address, ip_range_start, ip_range_end): # add host route so dest_ip4n will not be resolved rip = VppIpRoute(cls, dest_ip4, 32, [VppRoutePath(next_hop_address, INVALID_INDEX)], register=False) rip.add_vpp_config() dest_ip4n = socket.inet_pton(socket.AF_INET, dest_ip4) r = cls.vapi.vxlan_add_del_tunnel(src_address=cls.pg0.local_ip4n, dst_address=dest_ip4n, vni=vni) cls.vapi.sw_interface_set_l2_bridge(r.sw_if_index, bd_id=vni)
def add_del_mcast_tunnels_load(cls, port, is_add): """ add or del tunnels to test vxlan_gpe stability """ n_distinct_dst_tunnels = 20 ip_range_start = 10 ip_range_end = ip_range_start + n_distinct_dst_tunnels for dest_ip4 in ip4_range(cls.mcast_ip4, ip_range_start, ip_range_end): vni = int(dest_ip4.split(".")[3]) r = VppVxlanGpeTunnel(cls, src_addr=cls.pg0.local_ip4, dst_addr=dest_ip4, src_port=port, dst_port=port, mcast_sw_if_index=1, vni=vni) if is_add: r.add_vpp_config() else: r.remove_vpp_config()
def ip_range(self, start, end): """ range of remote ip's """ return ip4_range(self.pg0.remote_ip4, start, end)
def ip_range(self, start, end): """ range of remote ip's """ return ip4_range(self.pg0.remote_ip4, start, end)