示例#1
0
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)
示例#2
0
文件: vpp_l2.py 项目: vpp-dev/vpp
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)
示例#3
0
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)
示例#4
0
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)
示例#5
0
 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)
示例#6
0
 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)
示例#7
0
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)