class VppBridgeDomainArpEntry(VppObject): def __init__(self, test, bd, mac, ip): self._test = test self.bd = bd self.mac = MACAddress(mac) self.ip = VppIpAddress(ip) def add_vpp_config(self): self._test.vapi.bd_ip_mac_add_del(self.bd.bd_id, self.mac.packed, self.ip.encode(), is_add=1) self._test.registry.register(self, self._test.logger) def remove_vpp_config(self): self._test.vapi.bd_ip_mac_add_del(self.bd.bd_id, self.mac.packed, self.ip.encode(), is_add=0) def query_vpp_config(self): return find_bridge_domain_arp_entry(self._test, self.bd.bd_id, self.mac.packed, self.ip.address) def __str__(self): return self.object_id() def object_id(self): return "BD-Arp-Entry-%s-%s-%s" % (self.bd, self.mac, self.ip.address)
class VppBridgeDomainArpEntry(VppObject): def __init__(self, test, bd, mac, ip): self._test = test self.bd = bd self.mac = MACAddress(mac) self.ip = VppIpAddress(ip) def add_vpp_config(self): self._test.vapi.bd_ip_mac_add_del(bd_id=self.bd.bd_id, is_add=1, ip=self.ip.encode(), mac=self.mac.packed) self._test.registry.register(self, self._test.logger) def remove_vpp_config(self): self._test.vapi.bd_ip_mac_add_del(bd_id=self.bd.bd_id, is_add=0, ip=self.ip.encode(), mac=self.mac.packed) def query_vpp_config(self): return find_bridge_domain_arp_entry(self._test, self.bd.bd_id, self.mac.packed, self.ip.address) def __str__(self): return self.object_id() def object_id(self): return "BD-Arp-Entry-%s-%s-%s" % (self.bd, self.mac, self.ip.address)
class VppVxlanGbpTunnel(VppInterface): """ VPP VXLAN GBP interface """ def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None): """ Create VXLAN-GBP Tunnel interface """ super(VppVxlanGbpTunnel, self).__init__(test) self.src = VppIpAddress(src) self.dst = VppIpAddress(dst) self.vni = vni self.mcast_itf = mcast_itf if not mode: self.mode = (VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t. VXLAN_GBP_API_TUNNEL_MODE_L2) else: self.mode = mode def add_vpp_config(self): mcast_sw_if_index = INDEX_INVALID if (self.mcast_itf): mcast_sw_if_index = self.mcast_itf.sw_if_index reply = self.test.vapi.vxlan_gbp_tunnel_add_del( self.src.encode(), self.dst.encode(), mode=self.mode, vni=self.vni, mcast_sw_if_index=mcast_sw_if_index) self.set_sw_if_index(reply.sw_if_index) self._test.registry.register(self, self._test.logger) def remove_vpp_config(self): mcast_sw_if_index = INDEX_INVALID if (self.mcast_itf): mcast_sw_if_index = self.mcast_itf.sw_if_index self.test.vapi.vxlan_gbp_tunnel_add_del( self.src.encode(), self.dst.encode(), vni=self.vni, is_add=0, mcast_sw_if_index=mcast_sw_if_index) def query_vpp_config(self): return (INDEX_INVALID != find_vxlan_gbp_tunnel(self._test, self.src, self.dst, self.vni)) def __str__(self): return self.object_id() def object_id(self): return "vxlan-gbp-%d-%d-%s-%s" % (self.sw_if_index, self.vni, self.src, self.dst)
class VppVxlanGbpTunnel(VppInterface): """ VPP VXLAN GBP interface """ def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None): """ Create VXLAN-GBP Tunnel interface """ super(VppVxlanGbpTunnel, self).__init__(test) self.src = VppIpAddress(src) self.dst = VppIpAddress(dst) self.vni = vni self.mcast_itf = mcast_itf if not mode: self.mode = (VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t. VXLAN_GBP_API_TUNNEL_MODE_L2) else: self.mode = mode def add_vpp_config(self): mcast_sw_if_index = INDEX_INVALID if (self.mcast_itf): mcast_sw_if_index = self.mcast_itf.sw_if_index reply = self.test.vapi.vxlan_gbp_tunnel_add_del( self.src.encode(), self.dst.encode(), mode=self.mode, vni=self.vni, mcast_sw_if_index=mcast_sw_if_index) self.set_sw_if_index(reply.sw_if_index) self._test.registry.register(self, self._test.logger) def remove_vpp_config(self): mcast_sw_if_index = INDEX_INVALID if (self.mcast_itf): mcast_sw_if_index = self.mcast_itf.sw_if_index self.test.vapi.vxlan_gbp_tunnel_add_del( self.src.encode(), self.dst.encode(), vni=self.vni, is_add=0, mcast_sw_if_index=mcast_sw_if_index) def query_vpp_config(self): return (INDEX_INVALID != find_vxlan_gbp_tunnel(self._test, self.src, self.dst, self.vni)) def object_id(self): return "vxlan-gbp-%d-%d-%s-%s" % (self.sw_if_index, self.vni, self.src, self.dst)
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 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)
class VppVxlanGbpTunnel(VppInterface): """ VPP VXLAN GBP interface """ def __init__(self, test, src, dst, vni, mcast_itf=None, mode=None, is_ipv6=None, encap_table_id=None, instance=0xffffffff): """ Create VXLAN-GBP Tunnel interface """ super(VppVxlanGbpTunnel, self).__init__(test) self.src = VppIpAddress(src) self.dst = VppIpAddress(dst) self.vni = vni self.mcast_itf = mcast_itf self.ipv6 = is_ipv6 self.encap_table_id = encap_table_id self.instance = instance if not mode: self.mode = (VppEnum.vl_api_vxlan_gbp_api_tunnel_mode_t. VXLAN_GBP_API_TUNNEL_MODE_L2) else: self.mode = mode def add_vpp_config(self): mcast_sw_if_index = INDEX_INVALID if (self.mcast_itf): mcast_sw_if_index = self.mcast_itf.sw_if_index reply = self.test.vapi.vxlan_gbp_tunnel_add_del( is_add=1, tunnel={ 'src': self.src.encode(), 'dst': self.dst.encode(), 'mode': self.mode, 'vni': self.vni, 'mcast_sw_if_index': mcast_sw_if_index, 'encap_table_id': self.encap_table_id, 'instance': self.instance }) self.set_sw_if_index(reply.sw_if_index) self._test.registry.register(self, self._test.logger) def remove_vpp_config(self): mcast_sw_if_index = INDEX_INVALID if (self.mcast_itf): mcast_sw_if_index = self.mcast_itf.sw_if_index self.test.vapi.vxlan_gbp_tunnel_add_del(is_add=0, tunnel={ 'src': self.src.encode(), 'dst': self.dst.encode(), 'mode': self.mode, 'vni': self.vni, 'mcast_sw_if_index': mcast_sw_if_index, 'encap_table_id': self.encap_table_id, 'instance': self.instance, }) def query_vpp_config(self): return (INDEX_INVALID != find_vxlan_gbp_tunnel(self._test, self.src, self.dst, self.vni)) def object_id(self): return "vxlan-gbp-%d-%d-%s-%s" % (self.sw_if_index, self.vni, self.src, self.dst)