def config_nat(self, nat_obj, mode='config'): if mode == 'config': self.nat_config = nat_obj # save the latest nat config for future removal purposes cache = CCommandCache() conf_t_command_set = [] client_net = nat_obj.clients_net_start pool_net = nat_obj.nat_pool_start unconfig_str = '' if mode == 'config' else 'no ' # toggle all duplicate interfaces # dup_ifs = self.if_mngr.get_duplicated_if() if mode == 'config': self.toggle_duplicated_intf(action='down') # self.__toggle_interfaces(dup_ifs, action = 'down' ) else: # if we're in 'unconfig', toggle duplicated interfaces back up self.toggle_duplicated_intf(action='up') # self.__toggle_interfaces(dup_ifs) for dual_if in self.if_mngr.get_dual_if_list(is_duplicated=False): cache.add('IF', "{mode}ip nat inside".format(mode=unconfig_str), dual_if.client_if.get_name()) cache.add('IF', "{mode}ip nat outside".format(mode=unconfig_str), dual_if.server_if.get_name()) pool_id = dual_if.get_id() + 1 conf_t_command_set.append( "{mode}ip nat pool pool{pool_num} {start_addr} {end_addr} netmask {mask}" .format(mode=unconfig_str, pool_num=pool_id, start_addr=pool_net, end_addr=CNatConfig.calc_pool_end( pool_net, nat_obj.nat_netmask), mask=nat_obj.nat_netmask)) conf_t_command_set.append( "{mode}ip nat inside source list {num} pool pool{pool_num} overload" .format(mode=unconfig_str, num=pool_id, pool_num=pool_id)) conf_t_command_set.append( "{mode}access-list {num} permit {net_addr} {net_wildcard}". format(mode=unconfig_str, num=pool_id, net_addr=client_net, net_wildcard=nat_obj.client_acl_wildcard)) # bump up to the next client address client_net = misc_methods.get_single_net_client_addr( client_net, nat_obj.net_increment) pool_net = misc_methods.get_single_net_client_addr( pool_net, nat_obj.net_increment) # assign generated config list to cache cache.add('CONF', conf_t_command_set) # deploy the configs (order is important!) return self.cmd_link.run_single_command(cache)
def config_nat(self, nat_obj, mode="config"): if mode == "config": self.nat_config = nat_obj # save the latest nat config for future removal purposes cache = CCommandCache() conf_t_command_set = [] client_net = nat_obj.clients_net_start pool_net = nat_obj.nat_pool_start unconfig_str = "" if mode == "config" else "no " # toggle all duplicate interfaces # dup_ifs = self.if_mngr.get_duplicated_if() if mode == "config": self.toggle_duplicated_intf(action="down") # self.__toggle_interfaces(dup_ifs, action = 'down' ) else: # if we're in 'unconfig', toggle duplicated interfaces back up self.toggle_duplicated_intf(action="up") # self.__toggle_interfaces(dup_ifs) for dual_if in self.if_mngr.get_dual_if_list(is_duplicated=False): cache.add("IF", "{mode}ip nat inside".format(mode=unconfig_str), dual_if.client_if.get_name()) cache.add("IF", "{mode}ip nat outside".format(mode=unconfig_str), dual_if.server_if.get_name()) pool_id = dual_if.get_id() + 1 conf_t_command_set.append( "{mode}ip nat pool pool{pool_num} {start_addr} {end_addr} netmask {mask}".format( mode=unconfig_str, pool_num=pool_id, start_addr=pool_net, end_addr=CNatConfig.calc_pool_end(pool_net, nat_obj.nat_netmask), mask=nat_obj.nat_netmask, ) ) conf_t_command_set.append( "{mode}ip nat inside source list {num} pool pool{pool_num} overload".format( mode=unconfig_str, num=pool_id, pool_num=pool_id ) ) conf_t_command_set.append( "{mode}access-list {num} permit {net_addr} {net_wildcard}".format( mode=unconfig_str, num=pool_id, net_addr=client_net, net_wildcard=nat_obj.client_acl_wildcard ) ) # bump up to the next client address client_net = misc_methods.get_single_net_client_addr(client_net, nat_obj.net_increment) pool_net = misc_methods.get_single_net_client_addr(pool_net, nat_obj.net_increment) # assign generated config list to cache cache.add("CONF", conf_t_command_set) # deploy the configs (order is important!) self.cmd_link.run_single_command(cache)
def test_get_ipv6_client_addr(self): tmp_ipv6_addr = next(self.ipv6_gen) assert_equal( misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7': 1}, ip_type='ipv6'), '2001:DB8:0:2222:0:0:0:1') assert_equal( misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7': 2}, ip_type='ipv6'), '2001:DB8:0:2222:0:0:0:2') assert_raises(ValueError, misc_methods.get_single_net_client_addr, tmp_ipv6_addr, {'7': 70000})
def config_static_routing (self, stat_route_obj, mode = 'config'): if mode == 'config': self.stat_route_config = stat_route_obj # save the latest static route config for future removal purposes unconfig_str = '' if mode=='config' else 'no ' cache = CCommandCache() pre_commit_cache = CCommandCache() pre_commit_set = set([]) current_dup_intf = None # client_net = None # server_net = None client_net = stat_route_obj.client_net_start server_net = stat_route_obj.server_net_start conf_t_command_set = [] for dual_if in self.if_mngr.get_dual_if_list(): # handle duplicated addressing generation if dual_if.is_duplicated(): if dual_if.get_vrf_name() != current_dup_intf: # if this is a dual interfaces, and it is different from the one we proccessed so far, reset static route addressing current_dup_intf = dual_if.get_vrf_name() client_net = stat_route_obj.client_net_start server_net = stat_route_obj.server_net_start else: if current_dup_intf is not None: current_dup_intf = None client_net = stat_route_obj.client_net_start server_net = stat_route_obj.server_net_start client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() ) server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() ) # handle static route configuration for the interfaces if dual_if.is_duplicated(): client_if_command_set = [] server_if_command_set = [] # define the relevant VRF name pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) # assign VRF to interfaces, config interfaces with relevant route-map client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_net = client_net, dest_mask = stat_route_obj.client_mask, next_hop = client_net_next_hop)) conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_net = server_net, dest_mask = stat_route_obj.server_mask, next_hop = server_net_next_hop)) # config global arp to interfaces net address and vrf if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) # assign generated interfaces config list to cache cache.add('IF', server_if_command_set, dual_if.server_if.get_name()) cache.add('IF', client_if_command_set, dual_if.client_if.get_name()) else: conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, next_net = client_net, dest_mask = stat_route_obj.client_mask, next_hop = server_net_next_hop)) conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, next_net = server_net, dest_mask = stat_route_obj.server_mask, next_hop = client_net_next_hop)) # config global arp to interfaces net address if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) # bump up to the next client network address client_net = misc_methods.get_single_net_client_addr(client_net, stat_route_obj.net_increment) server_net = misc_methods.get_single_net_client_addr(server_net, stat_route_obj.net_increment) # finish handling pre-config cache pre_commit_set = list(pre_commit_set) if len(pre_commit_set): pre_commit_set.append('exit') pre_commit_cache.add('CONF', pre_commit_set ) # assign generated config list to cache cache.add('CONF', conf_t_command_set) # deploy the configs (order is important!) self.cmd_link.run_command( [pre_commit_cache, cache] ) if self.config_history['basic_if_config']: # in this case, duplicated interfaces will lose its ip address. # re-config IPv4 addresses self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if() )
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 __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 config_ipv6_pbr(self, mode="config"): idx = 1 unconfig_str = "" if mode == "config" else "no " cache = CCommandCache() conf_t_command_set = [] conf_t_command_set.append("{mode}ipv6 unicast-routing".format(mode=unconfig_str)) for dual_if in self.if_mngr.get_dual_if_list(): client_if_command_set = [] server_if_command_set = [] client_net_next_hop = misc_methods.get_single_net_client_addr( dual_if.server_if.get_ipv6_addr(), {"7": 1}, ip_type="ipv6" ) server_net_next_hop = misc_methods.get_single_net_client_addr( dual_if.client_if.get_ipv6_addr(), {"7": 1}, ip_type="ipv6" ) client_if_command_set.append("{mode}ipv6 enable".format(mode=unconfig_str)) server_if_command_set.append("{mode}ipv6 enable".format(mode=unconfig_str)) if dual_if.is_duplicated(): prefix = "ipv6_" + dual_if.get_vrf_name() else: prefix = "ipv6" # config interfaces with relevant route-map client_if_command_set.append( "{mode}ipv6 policy route-map {pre}_{p1}_to_{p2}".format( mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1) ) ) server_if_command_set.append( "{mode}ipv6 policy route-map {pre}_{p2}_to_{p1}".format( mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1) ) ) # config global arp to interfaces net address and vrf conf_t_command_set.append( "{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}".format( mode=unconfig_str, next_hop=server_net_next_hop, intf=dual_if.client_if.get_name(), dest_mac=dual_if.client_if.get_dest_mac(), ) ) conf_t_command_set.append( "{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}".format( mode=unconfig_str, next_hop=client_net_next_hop, intf=dual_if.server_if.get_name(), dest_mac=dual_if.server_if.get_dest_mac(), ) ) conf_t_command_set.append( "{mode}route-map {pre}_{p1}_to_{p2} permit 10".format( mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1) ) ) if mode == "config": conf_t_command_set.append("set ipv6 next-hop {next_hop}".format(next_hop=client_net_next_hop)) conf_t_command_set.append( "{mode}route-map {pre}_{p2}_to_{p1} permit 10".format( mode=unconfig_str, pre=prefix, p1="p" + str(idx), p2="p" + str(idx + 1) ) ) if mode == "config": conf_t_command_set.append("set ipv6 next-hop {next_hop}".format(next_hop=server_net_next_hop)) conf_t_command_set.append("exit") # assign generated config list to cache cache.add("IF", server_if_command_set, dual_if.server_if.get_name()) cache.add("IF", client_if_command_set, dual_if.client_if.get_name()) idx += 2 cache.add("CONF", conf_t_command_set) # deploy the configs (order is important!) self.cmd_link.run_command([cache])
def test_ipv4_client_addr_exception(self): tmp_ipv4_addr = next(self.ipv4_gen)[0] misc_methods.get_single_net_client_addr(tmp_ipv4_addr, {'4' : 1})
def test_get_ipv4_client_addr(self): tmp_ipv4_addr = next(self.ipv4_gen)[0] assert_equal ( misc_methods.get_single_net_client_addr(tmp_ipv4_addr), '1.1.1.1') assert_raises (ValueError, misc_methods.get_single_net_client_addr, tmp_ipv4_addr, {'3' : 255} )
def test_get_ipv4_client_addr(self): tmp_ipv4_addr = next(self.ipv4_gen)[0] assert_equal(misc_methods.get_single_net_client_addr(tmp_ipv4_addr), '1.1.1.1') assert_raises(ValueError, misc_methods.get_single_net_client_addr, tmp_ipv4_addr, {'3': 255})
def config_ipv6_pbr (self, mode = 'config', vlan=False): idx = 1 unconfig_str = '' if mode=='config' else 'no ' cache = CCommandCache() conf_t_command_set = [] conf_t_command_set.append('{mode}ipv6 unicast-routing'.format(mode = unconfig_str) ) for dual_if in self.if_mngr.get_dual_if_list(): client_if_command_set = [] server_if_command_set = [] client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' ) server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' ) client_net_next_hop_v4 = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() ) server_net_next_hop_v4 = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() ) client_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str)) server_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str)) if dual_if.is_duplicated(): prefix = 'ipv6_' + dual_if.get_vrf_name() else: prefix = 'ipv6' # config interfaces with relevant route-map client_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p1}_to_{p2}'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) server_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p2}_to_{p1}'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) # config global arp to interfaces net address and vrf if dual_if.client_if.get_ipv6_dest_mac(): conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format( mode = unconfig_str, next_hop = server_net_next_hop, intf = dual_if.client_if.get_name(), dest_mac = dual_if.client_if.get_ipv6_dest_mac())) # For latency packets (which are IPv4), we need to configure also static ARP conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = server_net_next_hop_v4, dest_mac = dual_if.client_if.get_ipv6_dest_mac())) if dual_if.server_if.get_ipv6_dest_mac(): conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format( mode = unconfig_str, next_hop = client_net_next_hop, intf = dual_if.server_if.get_name(), dest_mac = dual_if.server_if.get_ipv6_dest_mac())) # For latency packets (which are IPv4), we need to configure also static ARP conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = client_net_next_hop_v4, dest_mac = dual_if.server_if.get_ipv6_dest_mac())) conf_t_command_set.append('{mode}route-map {pre}_{p1}_to_{p2} permit 10'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if (mode == 'config'): conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = client_net_next_hop ) ) conf_t_command_set.append('{mode}route-map {pre}_{p2}_to_{p1} permit 10'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if (mode == 'config'): conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = server_net_next_hop ) ) conf_t_command_set.append('exit') # assign generated config list to cache client_if_name = dual_if.client_if.get_name() server_if_name = dual_if.server_if.get_name() if vlan: client_if_name += "." + self.client_vlan server_if_name += "." + self.server_vlan cache.add('IF', server_if_command_set, server_if_name) cache.add('IF', client_if_command_set, client_if_name) idx += 2 cache.add('CONF', conf_t_command_set) # deploy the configs (order is important!) self.cmd_link.run_command( [cache] )
def config_static_routing (self, stat_route_obj, mode = 'config'): if mode == 'config': self.stat_route_config = stat_route_obj # save the latest static route config for future removal purposes unconfig_str = '' if mode=='config' else 'no ' cache = CCommandCache() pre_commit_cache = CCommandCache() pre_commit_set = set([]) current_dup_intf = None # client_net = None # server_net = None client_net = stat_route_obj.client_net_start server_net = stat_route_obj.server_net_start conf_t_command_set = [] for dual_if in self.if_mngr.get_dual_if_list(): # handle duplicated addressing generation if dual_if.is_duplicated(): if dual_if.get_vrf_name() != current_dup_intf: # if this is a dual interfaces, and it is different from the one we proccessed so far, reset static route addressing current_dup_intf = dual_if.get_vrf_name() client_net = stat_route_obj.client_net_start server_net = stat_route_obj.server_net_start else: if current_dup_intf is not None: current_dup_intf = None client_net = stat_route_obj.client_net_start server_net = stat_route_obj.server_net_start client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() ) server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() ) # handle static route configuration for the interfaces if dual_if.is_duplicated(): client_if_command_set = [] server_if_command_set = [] # define the relevant VRF name pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) # assign VRF to interfaces, config interfaces with relevant route-map client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_net = client_net, dest_mask = stat_route_obj.client_mask, next_hop = client_net_next_hop)) conf_t_command_set.append( "{mode}ip route vrf {dup} {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_net = server_net, dest_mask = stat_route_obj.server_mask, next_hop = server_net_next_hop)) # config global arp to interfaces net address and vrf if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) # assign generated interfaces config list to cache cache.add('IF', server_if_command_set, dual_if.server_if.get_name()) cache.add('IF', client_if_command_set, dual_if.client_if.get_name()) else: conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, next_net = client_net, dest_mask = stat_route_obj.client_mask, next_hop = server_net_next_hop)) conf_t_command_set.append( "{mode}ip route {next_net} {dest_mask} {next_hop}".format( mode = unconfig_str, next_net = server_net, dest_mask = stat_route_obj.server_mask, next_hop = client_net_next_hop)) # config global arp to interfaces net address if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) # bump up to the next client network address client_net = misc_methods.get_single_net_client_addr(client_net, stat_route_obj.net_increment) server_net = misc_methods.get_single_net_client_addr(server_net, stat_route_obj.net_increment) # finish handling pre-config cache pre_commit_set = list(pre_commit_set) if len(pre_commit_set): pre_commit_set.append('exit') pre_commit_cache.add('CONF', pre_commit_set ) # assign generated config list to cache cache.add('CONF', conf_t_command_set) # deploy the configs (order is important!) self.cmd_link.run_command( [pre_commit_cache, cache] ) if self.config_history['basic_if_config']: # in this case, duplicated interfaces will lose its ip address. # re-config IPv4 addresses self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if())
def config_pbr (self, mode = 'config', vlan = False): idx = 1 unconfig_str = '' if mode=='config' else 'no ' cache = CCommandCache() pre_commit_cache = CCommandCache() pre_commit_set = set([]) for dual_if in self.if_mngr.get_dual_if_list(): client_if_command_set = [] server_if_command_set = [] conf_t_command_set = [] client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() ) server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() ) if dual_if.is_duplicated(): # define the relevant VRF name pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) # assign VRF to interfaces, config interfaces with relevant route-map client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) client_if_command_set.append ('{mode}ip policy route-map {dup}_{p1}_to_{p2}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) server_if_command_set.append ('{mode}ip policy route-map {dup}_{p2}_to_{p1}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) # config route-map routing conf_t_command_set.append('{mode}route-map {dup}_{p1}_to_{p2} permit 10'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = client_net_next_hop) ) conf_t_command_set.append('{mode}route-map {dup}_{p2}_to_{p1} permit 10'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = server_net_next_hop) ) conf_t_command_set.append('exit') # config global arp to interfaces net address and vrf if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) else: # config interfaces with relevant route-map client_if_command_set.append ('{mode}ip policy route-map {p1}_to_{p2}'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) server_if_command_set.append ('{mode}ip policy route-map {p2}_to_{p1}'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) # config route-map routing conf_t_command_set.append('{mode}route-map {p1}_to_{p2} permit 10'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = client_net_next_hop) ) conf_t_command_set.append('{mode}route-map {p2}_to_{p1} permit 10'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = server_net_next_hop) ) conf_t_command_set.append('exit') # config global arp to interfaces net address if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) # assign generated config list to cache client_if_name = dual_if.client_if.get_name() server_if_name = dual_if.server_if.get_name() if vlan: client_if_name += "." + self.client_vlan server_if_name += "." + self.server_vlan cache.add('IF', server_if_command_set, server_if_name) cache.add('IF', client_if_command_set, client_if_name) cache.add('CONF', conf_t_command_set) idx += 2 # finish handling pre-config cache pre_commit_set = list(pre_commit_set) if len(pre_commit_set): pre_commit_set.append('exit') pre_commit_cache.add('CONF', pre_commit_set ) # deploy the configs (order is important!) self.cmd_link.run_command( [pre_commit_cache, cache] ) if self.config_history['basic_if_config']: # in this case, duplicated interfaces will lose its ip address. # re-config IPv4 addresses self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if(), vlan = vlan)
def config_ipv6_pbr (self, mode = 'config'): idx = 1 unconfig_str = '' if mode=='config' else 'no ' cache = CCommandCache() conf_t_command_set = [] conf_t_command_set.append('{mode}ipv6 unicast-routing'.format(mode = unconfig_str) ) for dual_if in self.if_mngr.get_dual_if_list(): client_if_command_set = [] server_if_command_set = [] client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' ) server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv6_addr(), {'7':1}, ip_type = 'ipv6' ) client_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str)) server_if_command_set.append ('{mode}ipv6 enable'.format(mode = unconfig_str)) if dual_if.is_duplicated(): prefix = 'ipv6_' + dual_if.get_vrf_name() else: prefix = 'ipv6' # config interfaces with relevant route-map client_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p1}_to_{p2}'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) server_if_command_set.append ('{mode}ipv6 policy route-map {pre}_{p2}_to_{p1}'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) # config global arp to interfaces net address and vrf if dual_if.client_if.get_ipv6_dest_mac(): conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format( mode = unconfig_str, next_hop = server_net_next_hop, intf = dual_if.client_if.get_name(), dest_mac = dual_if.client_if.get_ipv6_dest_mac())) if dual_if.server_if.get_ipv6_dest_mac(): conf_t_command_set.append('{mode}ipv6 neighbor {next_hop} {intf} {dest_mac}'.format( mode = unconfig_str, next_hop = client_net_next_hop, intf = dual_if.server_if.get_name(), dest_mac = dual_if.server_if.get_ipv6_dest_mac())) conf_t_command_set.append('{mode}route-map {pre}_{p1}_to_{p2} permit 10'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if (mode == 'config'): conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = client_net_next_hop ) ) conf_t_command_set.append('{mode}route-map {pre}_{p2}_to_{p1} permit 10'.format( mode = unconfig_str, pre = prefix, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if (mode == 'config'): conf_t_command_set.append('set ipv6 next-hop {next_hop}'.format(next_hop = server_net_next_hop ) ) conf_t_command_set.append('exit') # assign generated config list to cache cache.add('IF', server_if_command_set, dual_if.server_if.get_name()) cache.add('IF', client_if_command_set, dual_if.client_if.get_name()) idx += 2 cache.add('CONF', conf_t_command_set) # deploy the configs (order is important!) self.cmd_link.run_command( [cache] )
def config_pbr (self, mode = 'config'): idx = 1 unconfig_str = '' if mode=='config' else 'no ' cache = CCommandCache() pre_commit_cache = CCommandCache() pre_commit_set = set([]) for dual_if in self.if_mngr.get_dual_if_list(): client_if_command_set = [] server_if_command_set = [] conf_t_command_set = [] client_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.server_if.get_ipv4_addr() ) server_net_next_hop = misc_methods.get_single_net_client_addr(dual_if.client_if.get_ipv4_addr() ) if dual_if.is_duplicated(): # define the relevant VRF name pre_commit_set.add('{mode}ip vrf {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) # assign VRF to interfaces, config interfaces with relevant route-map client_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) client_if_command_set.append ('{mode}ip policy route-map {dup}_{p1}_to_{p2}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) server_if_command_set.append ('{mode}ip vrf forwarding {dup}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name()) ) server_if_command_set.append ('{mode}ip policy route-map {dup}_{p2}_to_{p1}'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) # config route-map routing conf_t_command_set.append('{mode}route-map {dup}_{p1}_to_{p2} permit 10'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = client_net_next_hop) ) conf_t_command_set.append('{mode}route-map {dup}_{p2}_to_{p1} permit 10'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = server_net_next_hop) ) conf_t_command_set.append('exit') # config global arp to interfaces net address and vrf if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp vrf {dup} {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, dup = dual_if.get_vrf_name(), next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) else: # config interfaces with relevant route-map client_if_command_set.append ('{mode}ip policy route-map {p1}_to_{p2}'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) server_if_command_set.append ('{mode}ip policy route-map {p2}_to_{p1}'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) # config route-map routing conf_t_command_set.append('{mode}route-map {p1}_to_{p2} permit 10'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = client_net_next_hop) ) conf_t_command_set.append('{mode}route-map {p2}_to_{p1} permit 10'.format( mode = unconfig_str, p1 = 'p'+str(idx), p2 = 'p'+str(idx+1) ) ) if mode == 'config': conf_t_command_set.append('set ip next-hop {next_hop}'.format( next_hop = server_net_next_hop) ) conf_t_command_set.append('exit') # config global arp to interfaces net address if dual_if.client_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = server_net_next_hop, dest_mac = dual_if.client_if.get_dest_mac())) if dual_if.server_if.get_dest_mac(): conf_t_command_set.append('{mode}arp {next_hop} {dest_mac} arpa'.format( mode = unconfig_str, next_hop = client_net_next_hop, dest_mac = dual_if.server_if.get_dest_mac())) # assign generated config list to cache cache.add('IF', server_if_command_set, dual_if.server_if.get_name()) cache.add('IF', client_if_command_set, dual_if.client_if.get_name()) cache.add('CONF', conf_t_command_set) idx += 2 # finish handling pre-config cache pre_commit_set = list(pre_commit_set) if len(pre_commit_set): pre_commit_set.append('exit') pre_commit_cache.add('CONF', pre_commit_set ) # deploy the configs (order is important!) self.cmd_link.run_command( [pre_commit_cache, cache] ) if self.config_history['basic_if_config']: # in this case, duplicated interfaces will lose its ip address. # re-config IPv4 addresses self.configure_basic_filtered_interfaces(self.if_mngr.get_duplicated_if() )
def test_ipv4_client_addr_exception(self): tmp_ipv4_addr = next(self.ipv4_gen)[0] misc_methods.get_single_net_client_addr(tmp_ipv4_addr, {'4': 1})
def test_get_ipv6_client_addr(self): tmp_ipv6_addr = next(self.ipv6_gen) assert_equal ( misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7' : 1}, ip_type = 'ipv6'), '2001:DB8:0:2222:0:0:0:1') assert_equal ( misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'7' : 2}, ip_type = 'ipv6'), '2001:DB8:0:2222:0:0:0:2') assert_raises (ValueError, misc_methods.get_single_net_client_addr, tmp_ipv6_addr, {'7' : 70000} )
def test_ipv6_client_addr_exception(self): tmp_ipv6_addr = next(self.ipv6_gen) misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'8': 1}, ip_type='ipv6')
def test_ipv6_client_addr_exception(self): tmp_ipv6_addr = next(self.ipv6_gen) misc_methods.get_single_net_client_addr(tmp_ipv6_addr, {'8' : 1}, ip_type = 'ipv6')
def __get_ipv4_net_client_addr(self, ipv4_addr): return misc_methods.get_single_net_client_addr(ipv4_addr)