Ejemplo n.º 1
0
class CIfManager(object):
    _ipv4_gen = misc_methods.get_network_addr()
    _ipv6_gen = misc_methods.get_network_addr(ip_type='ipv6')

    def __init__(self):
        self.interfarces = OrderedDict()
        self.dual_intf = []
        self.full_device_cfg = None

    def __add_if_to_manager(self, if_obj):
        self.interfarces[if_obj.get_name()] = if_obj

    def __add_dual_if_to_manager(self, dual_if_obj):
        self.dual_intf.append(dual_if_obj)

    def __get_ipv4_net_client_addr(self, ipv4_addr):
        return misc_methods.get_single_net_client_addr(ipv4_addr)

    def __get_ipv6_net_client_addr(self, ipv6_addr):
        return misc_methods.get_single_net_client_addr(ipv6_addr, {'7': 1},
                                                       ip_type='ipv6')

    def load_config(self, device_config_obj):
        self.full_device_cfg = device_config_obj
        # first, erase all current config
        self.interfarces.clear()
        del self.dual_intf[:]

        # than, load the configuration
        intf_config = device_config_obj.get_interfaces_cfg()

        # finally, parse the information into data-structures
        for intf_pair in intf_config:
            # generate network addresses for client side, and initialize client if object
            tmp_ipv4_addr = self.__get_ipv4_net_client_addr(
                next(CIfManager._ipv4_gen)[0])
            tmp_ipv6_addr = self.__get_ipv6_net_client_addr(
                next(CIfManager._ipv6_gen))

            client_obj = CIfObj(
                if_name=intf_pair['client']['name'],
                ipv4_addr=tmp_ipv4_addr,
                ipv6_addr=tmp_ipv6_addr,
                src_mac_addr=intf_pair['client']['src_mac_addr'],
                dest_mac_addr=intf_pair['client']['dest_mac_addr'],
                if_type=IFType.Client)

            # generate network addresses for server side, and initialize server if object
            tmp_ipv4_addr = self.__get_ipv4_net_client_addr(
                next(CIfManager._ipv4_gen)[0])
            tmp_ipv6_addr = self.__get_ipv6_net_client_addr(
                next(CIfManager._ipv6_gen))

            server_obj = CIfObj(
                if_name=intf_pair['server']['name'],
                ipv4_addr=tmp_ipv4_addr,
                ipv6_addr=tmp_ipv6_addr,
                src_mac_addr=intf_pair['server']['src_mac_addr'],
                dest_mac_addr=intf_pair['server']['dest_mac_addr'],
                if_type=IFType.Server)

            dual_intf_obj = CDualIfObj(vrf_name=intf_pair['vrf_name'],
                                       client_if_obj=client_obj,
                                       server_if_obj=server_obj)

            # update single interfaces pointers
            client_obj.set_pair_parent(dual_intf_obj)
            server_obj.set_pair_parent(dual_intf_obj)

            # finally, update the data-structures with generated objects
            self.__add_if_to_manager(client_obj)
            self.__add_if_to_manager(server_obj)
            self.__add_dual_if_to_manager(dual_intf_obj)

    def get_if_list(self, if_type=IFType.All, is_duplicated=None):
        result = []
        for if_name, if_obj in self.interfarces.items():
            if (if_type == IFType.All) or (if_obj.get_if_type() == if_type):
                if (is_duplicated is
                        None) or (if_obj.get_pair_parent().is_duplicated()
                                  == is_duplicated):
                    # append this if_obj only if matches both IFType and is_duplicated conditions
                    result.append(if_obj)
        return result

    def get_duplicated_if(self):
        result = []
        for dual_if_obj in self.dual_intf:
            if dual_if_obj.get_vrf_name() is not None:
                result.extend((dual_if_obj.client_if, dual_if_obj.server_if))
        return result

    def get_dual_if_list(self, is_duplicated=None):
        result = []
        for dual_if in self.dual_intf:
            if (is_duplicated is None) or (dual_if.is_duplicated()
                                           == is_duplicated):
                result.append(dual_if)
        return result

    def dump_if_config(self):
        if self.full_device_cfg is None:
            print(
                "Device configuration isn't loaded.\nPlease load config and try again."
            )
        else:
            self.full_device_cfg.dump_config()
Ejemplo n.º 2
0
 def setUp(self):
     self.ipv4_gen = misc_methods.get_network_addr()
     self.ipv6_gen = misc_methods.get_network_addr(ip_type = 'ipv6')
     pass
Ejemplo n.º 3
0
 def setUp(self):
     self.ipv4_gen = misc_methods.get_network_addr()
     self.ipv6_gen = misc_methods.get_network_addr(ip_type='ipv6')
     pass