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()
def setUp(self): self.ipv4_gen = misc_methods.get_network_addr() self.ipv6_gen = misc_methods.get_network_addr(ip_type = 'ipv6') pass
def setUp(self): self.ipv4_gen = misc_methods.get_network_addr() self.ipv6_gen = misc_methods.get_network_addr(ip_type='ipv6') pass