def nat_reboot_debug_fun(): st.banner("Start of Collecting the needed debug info for failure analysis", width=100) ip_obj.show_ip_route(vars.D1) intf_obj.show_interface_counters_all(vars.D1) arp_obj.show_arp(vars.D1) nat_obj.show_nat_translations(vars.D1) st.banner("End of Collecting the needed debug info for failure analysis", width=100)
def test_ft_nat_config_reload(): # ################ Author Details ################ # Name: Kiran Vedula # Eamil: [email protected] # ################################################ # Objective - Verify dynamic NAPT translations after config save and reload # ################################################# nat_obj.clear_nat(vars.D1, translations=True) nat_obj.clear_nat(vars.D1, statistics=True) st.log("Config reload the DUT") reboot_obj.config_save_reload(vars.D1) st.log("Get some debug info after config reload is complete") ip_obj.show_ip_route(vars.D1) arp_obj.show_arp(vars.D1) nat_obj.show_nat_translations(vars.D1) st.wait(2) st.log("Traffic for snat case") tg1.tg_traffic_control(action='run', handle=tg_str_data[1]["tg1_dyn_nat_udp_data_str_id_1"]) tg1.tg_traffic_control(action='stop', handle=tg_str_data[1]["tg1_dyn_nat_udp_data_str_id_1"]) st.wait(data.wait_nat_stats) trn_val_1 = nat_obj.get_nat_translations(vars.D1, protocol=data.proto_all, src_ip=data.in1_ip_addr_h[0]) if not trn_val_1: nat_reboot_debug_fun() st.report_fail("nat_translation_table_entry_deleted_incorrectly") count = data.pkt_count trn_val = nat_obj.get_nat_translations(vars.D1, protocol=data.proto_udp, src_ip=data.in1_ip_addr_h[-1], src_ip_port=data.local_src_port[0]) if not trn_val: nat_reboot_debug_fun() st.error("Received empty list,nat translation table not updated") st.report_fail("dynamic_snat_translation_entry_create_fail", data.in1_ip_addr_h[-1], data.out_ip_pool[0]) trn_src_ip = trn_val[0]["trn_src_ip"] trn_src_port = trn_val[0]["trn_src_ip_port"] st.log("Traffic for dnat case") tg2_str_obj = tg2_str_selector(trn_src_ip, trn_src_port) tg2.tg_traffic_control(action='run', handle=tg2_str_obj) tg2.tg_traffic_control(action='stop', handle=tg2_str_obj) st.wait(data.wait_nat_stats) nat_stats_s = nat_obj.poll_for_nat_statistics(vars.D1, protocol=data.proto_udp, src_ip=data.in1_ip_addr_h[-1], src_ip_port=data.local_src_port[0]) if not nat_stats_s: nat_reboot_debug_fun() st.error("Received empty list,nat statistics are not updated") st.report_fail("dynamic_snat_translation_entry_create_fail", data.in1_ip_addr_h[-1], data.out_ip_pool[0]) if not int(nat_stats_s[0]['packets']) >= (0.80 * (int(count))): nat_reboot_debug_fun() st.report_fail("dynamic_snat_translation_entry_create_fail", data.in1_ip_addr_h[-1], data.out_ip_pool[0]) nat_stats_d = nat_obj.poll_for_nat_statistics(vars.D1, protocol=data.proto_udp, dst_ip=trn_src_ip, dst_ip_port=trn_src_port) if not nat_stats_d: nat_reboot_debug_fun() st.error("Received empty list, nat statistics are not updated") st.report_fail("dynamic_dnat_translation_entry_create_fail", data.out_ip_pool[0], data.out_ip_pool[0]) if not int(nat_stats_d[0]['packets']) >= (0.80 * (int(count))): nat_reboot_debug_fun() st.report_fail("dynamic_dnat_translation_entry_create_fail", data.out_ip_pool[0], data.out_ip_pool[0]) st.report_pass("nat_translation_successful_after_config_reload")
def f2(): res1 = verify_ping_dut(leaf2, data.keepalive_ips[0]) arp.show_arp(leaf2) ip.show_ip_route(leaf2) if res1 is False: fail_msg = "ERROR: In Leaf2, ping to keepalive_link failed." print_log(fail_msg, "MED") return False return True
def get_arp_entries(dut, ipaddr): """ :param dut: :type dut: :return: """ return show_arp(dut, ipaddress=ipaddr)
def f4(): #intf.clear_interface_counters(client2) ip.show_ip_route(client2) arp.show_arp(client2) arp.show_ndp(client2) evpn.show_ip_neigh(client2) bcm.bcmcmd_l3_defip_show(client2) bcm.bcmcmd_l3_l3table_show(client2) bcm.bcmcmd_l3_ip6host_show(client2) bcm.bcmcmd_l3_ip6route_show(client2) bcm.read_l2(client2) bcm.bcm_cmd_l3_intf_show(client2) bcm.bcmcmd_show(client2, "l3 egress show") intf.show_interfaces_counters(client2) mac.get_mac(client2) ip.show_ip_route(client2, family='ipv6')
def dhcp_relay_debug(dut, family="", interface=None): family = "ipv4" if not family else family st.banner("Start of Collecting the needed info for debugging the failure") try: get_portchannel_list(dut) interface.interface_status_show(dut) dhcp_relay_obj.dhcp_relay_detailed_show(dut) dhcp_relay_obj.get_dhcp_relay_statistics(dut, interface=interface) ip_obj.get_interface_ip_address(dut) show_arp(dut) if family == "ipv6": dhcp_relay_obj.dhcp_relay_detailed_show(dut, family="ipv6") dhcp_relay_obj.get_dhcp_relay_statistics(dut, family="ipv6", interface=interface) ip_obj.get_interface_ip_address(dut, family="ipv6") show_ndp(dut) except Exception as e: st.log(e) st.error("Failed to execute the debug commands") st.banner("End of Collecting the needed info for debugging the failure")
def f2(): #intf.clear_interface_counters(leaf2) ip.show_ip_route(leaf2) arp.show_arp(leaf2) arp.show_ndp(leaf2) evpn.show_ip_neigh(leaf2) bcm.bcmcmd_l3_defip_show(leaf2) bcm.bcmcmd_l3_l3table_show(leaf2) bcm.bcmcmd_l3_ip6host_show(leaf2) bcm.bcmcmd_l3_ip6route_show(leaf2) bcm.read_l2(leaf2) bcm.bcm_cmd_l3_intf_show(leaf2) bcm.bcmcmd_show(leaf2, "l3 egress show") intf.show_interfaces_counters(leaf2) mac.get_mac(leaf2) ip.show_ip_route(leaf2, family='ipv6') mclag.verify_domain(leaf2, domain_id=data.po_domainid) mclag.verify_iccp_macs(leaf2, domain_id=data.po_domainid, return_type='NULL') mclag.show_iccp_arp(leaf2, domain_id=data.po_domainid) mclag.show_iccp_nd(leaf2, domain_id=data.po_domainid)
def adding_dynamic_arp(): data.h1 = tg.tg_interface_config(port_handle=tg_handler["tg_ph_1"], mode='config', intf_ip_addr=data.ipv4_address_tgen, gateway=data.ipv4_address, src_mac_addr=data.src_mac_addr, arp_send_req='1') st.log("INTFCONF: " + str(data.h1)) st.log("Pinging from tgen to DUT's TGen connected IPV4 interface") res = tgapi.verify_ping(src_obj=tg, port_handle=tg_handler["tg_ph_1"], dev_handle=data.h1['handle'], dst_ip=data.ipv4_address, ping_count='1', exp_count='1') st.log("PING_RES: " + str(res)) if res: st.log("Ping succeeded.") else: st.log("Ping failed.") st.wait(5) if not arp_obj.show_arp(vars.D1, data.ipv4_address_tgen): st.report_fail("ARP_entry_dynamic_entry_fail", data.ipv4_address_tgen, vars.D1)
def f1(d): st.show(d, "show run bgp") st.show(d, "show ndp") st.show(d, "show bgp ipv6 summary", type='vtysh') st.show(d, "show ipv6 route | head -1000") arp_obj.show_arp(d)
def f1(d): st.show(d, "show bgp ipv4 summary", type='vtysh') st.show(d, "show interface status") st.show(d, "show ip route | head -1000") arp_obj.show_arp(d)
def l3_max_route_max_path_scaling_tc(max_paths, max_routes, use_config_file, family="ipv4"): (dut) = (data.dut) #count = 0 data.my_dut_list = st.get_dut_names() dut1 = data.my_dut_list[0] dut2 = data.my_dut_list[1] #intf_ip_addr = data.dut1_start_ip_addr #intf_ip_addr2 = data.start_ip_addr2 #nexthop = data.nexthop_start_ip_addr vrf_flag = False member_dut1 = vars.D1T1P1 member_dut2 = vars.D2T1P1 # L3 INTF SCALING TEST CASE 1.1 START #json_path = os.getcwd() apply_file = False if apply_file is False: ipfeature.clear_ip_configuration(st.get_dut_names()) vapi.clear_vlan_configuration(st.get_dut_names()) st.banner("Started doing the needed config.") cmd = "config vlan range add 2 129" st.config(dut, cmd) st.config(dut2, cmd) command = "config vlan member add 2 {}".format(member_dut1) st.config(dut, command) command = "config vlan member add 2 {}".format(member_dut2) st.config(dut2, command) max_vlan = max_paths/4 base_vlan = 3 max_vlan = max_vlan - base_vlan v_range_t = str(base_vlan) + " " + str(base_vlan + max_vlan ) vapi.config_vlan_range_members(dut1, v_range_t, data.dut1_ports[0]) vapi.config_vlan_range_members(dut2, v_range_t, data.dut2_ports[0]) base_range = 1 max_range = 4 max_vlan = max_paths/4 incr_vlan = max_paths/4 for index in range(base_range, max_range): base_vlan = max_vlan + 1 max_vlan = max_vlan + incr_vlan #max_vlan = max_vlan + 32 v_range_t = str(base_vlan) + " " + str(max_vlan) vapi.config_vlan_range_members(dut1, v_range_t, data.dut1_ports[index]) vapi.config_vlan_range_members(dut2, v_range_t, data.dut2_ports[index]) ip_addr = data.dut1_start_ip_addr ip_addr2 = data.dut2_start_ip_addr v6_ip_addr = data.v6_start_ip_addr v6_ip_addr2 = data.v6_new_dut2_start_ip_addr ix_vlan_val = 2 #command = "config interface ip add "+ "Vlan" + str(data.vlan_val) + " " + ip_addr+'/24' if family == "ipv4": command1 = "config interface ip add "+ "Vlan" + str(ix_vlan_val) + " " + ip_addr command2 = "config interface ip add "+ "Vlan" + str(ix_vlan_val) + " " + ip_addr2 else: command1 = "config interface ip add "+ "Vlan" + str(ix_vlan_val) + " " + v6_ip_addr command2 = "config interface ip add "+ "Vlan" + str(ix_vlan_val) + " " + v6_ip_addr2 st.config(dut1, command1) st.config(dut2, command2) ip_addr2 = data.dut2_start_ip_addr base_vlan = 3 max_vlan = max_paths + 1 #max_vlan = 130 for index in range(base_vlan, max_vlan): if family == "ipv4": (_, ip_addr) = ipfeature.increment_ip_addr(ip_addr, "network") (_, ip_addr2) = ipfeature.increment_ip_addr(ip_addr2, "network") command = "config interface ip add "+ "Vlan" + str(index) + " " + ip_addr command_dut2 = "config interface ip add "+ "Vlan" + str(index) + " " + ip_addr2 else: v6_tok = str(hex(index)[2:]) v6_ip_addr = "2100:0:" + v6_tok + "::1/64" v6_ip_addr2 = "2100:0:" + v6_tok + "::2/64" command = "config interface ip add "+ "Vlan" + str(index) + " " + v6_ip_addr command_dut2 = "config interface ip add "+ "Vlan" + str(index) + " " + v6_ip_addr2 st.config(dut, command) st.config(dut2, command_dut2) (tg1, tg_ph_1, tg2, tg_ph_2) = get_handles_2() tg1.tg_traffic_control(action='reset',port_handle=tg_ph_1) tg2.tg_traffic_control(action='reset',port_handle=tg_ph_2) #h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.2.2.2', gateway='10.2.2.1', arp_send_req='1') #h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.2.2.2', gateway='10.2.2.1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='2', arp_send_req='1', gateway_step='0.0.1.0', intf_ip_addr_step='0.0.1.0', vlan_id_step='1') if family == "ipv4": h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.2.2.3', gateway='10.2.2.1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='2', arp_send_req='1') arp_obj.show_arp(dut) h2=tg1.tg_interface_config(port_handle=tg_ph_2, mode='config', intf_ip_addr='10.2.2.4', gateway='10.2.2.2', src_mac_addr='00:0b:01:00:00:01', vlan='1', vlan_id='2', arp_send_req='1') arp_obj.show_arp(dut2) else: h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', ipv6_intf_addr='2100:0:2::3', ipv6_gateway='2100:0:2::1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='2', arp_send_req='1') st.show(dut, "show ndp") arp_obj.show_arp(dut) h2=tg1.tg_interface_config(port_handle=tg_ph_2, mode='config', ipv6_intf_addr='2200:0:2::4', ipv6_gateway='2200:0:2::2', src_mac_addr='00:0b:01:00:00:01', vlan='1', vlan_id='2', arp_send_req='1') st.show(dut2, "show ndp") arp_obj.show_arp(dut2) if family == "ipv4": bgpfeature.create_bgp_router(dut, data.as_num, '') bgpfeature.create_bgp_router(dut2, data.new_as_num, '') dut1_neigh_ip_addr = data.neigh_ip_addr dut2_neigh_ip_addr = data.dut1_start_ip_addr #formatted_dut1_neigh_ip_addr = dut1_neigh_ip_addr.replace("/24","") #formatted_dut2_neigh_ip_addr = dut2_neigh_ip_addr.replace("/24","") formatted_dut1_neigh_ip_addr = "10.2.2.3" bgpfeature.create_bgp_neighbor(dut, data.as_num, formatted_dut1_neigh_ip_addr, data.remote_as_num) (_, dut1_neigh_ip_addr) = ipfeature.increment_ip_addr(dut1_neigh_ip_addr, "network") (_, dut2_neigh_ip_addr) = ipfeature.increment_ip_addr(dut2_neigh_ip_addr, "network") base_vlan = 3 max_vlan = max_paths + 1 #max_vlan = 130 # The below neighbor config is for inter dut links ibgp for index in range(base_vlan, max_vlan): formatted_dut1_neigh_ip_addr = dut1_neigh_ip_addr.replace("/24","") bgpfeature.create_bgp_neighbor(dut, data.as_num, formatted_dut1_neigh_ip_addr, data.new_as_num) (_, dut1_neigh_ip_addr) = ipfeature.increment_ip_addr(dut1_neigh_ip_addr, "network") formatted_dut2_neigh_ip_addr = dut2_neigh_ip_addr.replace("/24","") bgpfeature.create_bgp_neighbor(dut2, data.new_as_num, formatted_dut2_neigh_ip_addr, data.as_num) (_, dut2_neigh_ip_addr) = ipfeature.increment_ip_addr(dut2_neigh_ip_addr, "network") conf_var = { 'mode' : 'enable', 'active_connect_enable' : '1', 'local_as' : '200', 'remote_as' : '100', 'remote_ip_addr' : '10.2.2.1' } max_route_str = str(max_routes) route_var = { 'mode' : 'add', 'num_routes' : max_route_str, 'prefix' : '121.1.1.0', 'as_path' : 'as_seq:1' } #'num_routes' : '30000', ctrl_start = { 'mode' : 'start'} ctrl_stop = { 'mode' : 'stop'} # Configuring the BGP router. bgp_rtr1 = tgapi.tg_bgp_config(tg = tg1, handle = h1['handle'], conf_var = conf_var, route_var = route_var, ctrl_var = ctrl_start) st.log("BGP_HANDLE: "+str(bgp_rtr1)) # Verified at neighbor. st.log("BGP neighborship established.") st.wait(10) def f1(d): st.show(d, "show bgp ipv4 summary", type='vtysh') st.show(d, "show interface status") st.show(d, "show ip route | head -1000") arp_obj.show_arp(d) st.banner("ARP entries before traffic is initiated on Dut1 and Dut2") st.exec_each([dut, dut2], f1) #Port Counters tr1=tg2.tg_traffic_config(port_handle=tg_ph_2, emulation_src_handle=h2['handle'], emulation_dst_handle=bgp_rtr1['route'][0]['handle'], circuit_endpoint_type='ipv4', mode='create', transmit_mode='continuous', length_mode='fixed', rate_pps=512000, enable_stream_only_gen='0') else: v6_dut1_neigh_ip_addr = "2100:0:2::3" create_bgp_neighbor_route_map_config(dut, data.as_num, v6_dut1_neigh_ip_addr, data.routemap, vrf_flag) create_bgp_neighbor_route_map_config(dut2, data.new_as_num, v6_dut1_neigh_ip_addr, data.routemap, vrf_flag) bgpfeature.create_bgp_router(dut, data.as_num, '') create_bgp_neighbor_config(dut, data.as_num, v6_dut1_neigh_ip_addr, data.remote_as_num, data.routemap) #link_bgp_neighbor_to_routemap(dut, data.as_num, v6_dut1_neigh_ip_addr, data.routemap, vrf_flag) bgpfeature.create_bgp_router(dut2, data.new_as_num, '') base_vlan = 3 max_vlan = max_paths + 1 for index in range(base_vlan, max_vlan): v6_tok = str(hex(index)[2:]) v6_dut1_neigh_ip_addr = "2100:0:" + v6_tok + "::2" v6_dut2_neigh_ip_addr2 = "2100:0:" + v6_tok + "::1" create_bgp_neighbor_config(dut, data.as_num, v6_dut1_neigh_ip_addr, data.new_as_num, data.routemap) create_bgp_neighbor_config(dut2, data.new_as_num, v6_dut2_neigh_ip_addr2, data.as_num, data.routemap) #bgpfeature.create_bgp_neighbor(dut, data.as_num, v6_dut1_neigh_ip_addr, data.new_as_num, family="ipv6") #bgpfeature.create_bgp_neighbor(dut2, data.new_as_num, v6_dut2_neigh_ip_addr2, data.as_num, family="ipv6") bgp_conf=tg2.tg_emulation_bgp_config(handle=h1['handle'], mode='enable', ip_version='6', active_connect_enable='1', local_as='200', remote_as='100', remote_ipv6_addr='2100:0:2::1') max_route_str = str(max_routes) bgp_route=tg2.tg_emulation_bgp_route_config(handle=bgp_conf['handle'], mode='add', ip_version='6', num_routes=max_route_str, prefix='3300:0:0:2::1', as_path='as_seq:1') tg2.tg_emulation_bgp_control(handle=bgp_conf['handle'], mode='start') def f1(d): st.show(d, "show run bgp") st.show(d, "show ndp") st.show(d, "show bgp ipv6 summary", type='vtysh') st.show(d, "show ipv6 route | head -1000") arp_obj.show_arp(d) st.banner("ARP entries before traffic is initiated on Dut1 and Dut2") st.exec_each([dut, dut2], f1) tr1=tg2.tg_traffic_config(port_handle=tg_ph_2, emulation_src_handle=h2['handle'], emulation_dst_handle=bgp_route['handle'], circuit_endpoint_type='ipv6', mode='create', transmit_mode='continuous', length_mode='fixed', rate_pps=512000, enable_stream_only_gen='0') #tr1=tg1.tg_traffic_config(port_handle=tg_ph_2, mac_src='00:11:01:00:00:01', mac_dst='80:a2:35:97:eb:c1', # ipv6_dst_mode='increment', ipv6_dst_count=200, ipv6_dst_step='::1',ipv6_src_addr='2200:0:2::5', # ipv6_dst_addr='3300:0:0:2::1', l3_protocol='ipv6', l2_encap='ethernet_ii_vlan', vlan_id='2', # vlan='enable', mode='create', transmit_mode='continuous', length_mode='fixed', # rate_pps=512000, enable_stream_only_gen='1') tg2.tg_traffic_control(action='run', handle=tr1['stream_id']) ret1 = check_inter_dut_intf_traffic_counters() ret2 = check_end_to_end_intf_traffic_counters() tg2.tg_traffic_control(action='stop', handle=tr1['stream_id']) st.banner("ARP entries in both DUT's after traffic is stopped") st.exec_each([dut, dut2], arp_obj.show_arp) tg1.tg_traffic_control(action='reset',port_handle=tg_ph_2) if family == "ipv4": tgapi.tg_bgp_config(tg = tg1, handle = bgp_rtr1['conf']['handle'], ctrl_var=ctrl_stop) else: tg1.tg_emulation_bgp_control(handle=bgp_conf['handle'], mode='stop') tg1.tg_interface_config(port_handle=tg_ph_1, handle=h1['handle'], mode='destroy') tg1.tg_interface_config(port_handle=tg_ph_2, handle=h2['handle'], mode='destroy') #import pdb;pdb.set_trace() if apply_file is False: ip_addr = data.dut1_start_ip_addr ip_addr2 = data.dut2_start_ip_addr st.log("Un-Config previously config") base_range = 2 max_range = max_paths + 1 for index in range(base_range, max_range): if family == "ipv4": command1 = "config interface ip remove "+ "Vlan" + str(index) + " " + ip_addr command2 = "config interface ip remove "+ "Vlan" + str(index) + " " + ip_addr2 (_, ip_addr) = ipfeature.increment_ip_addr(ip_addr, "network") (_, ip_addr2) = ipfeature.increment_ip_addr(ip_addr2, "network") else: v6_tok = str(hex(index)[2:]) if index == 2: v6_ip_addr2 = "2200:0:" + v6_tok + "::2/64" else: v6_ip_addr2 = "2100:0:" + v6_tok + "::2/64" v6_ip_addr = "2100:0:" + v6_tok + "::1/64" command1 = "config interface ip remove "+ "Vlan" + str(index) + " " + v6_ip_addr command2 = "config interface ip remove "+ "Vlan" + str(index) + " " + v6_ip_addr2 st.config(dut, command1) st.config(dut2, command2) max_vlan = max_paths/4 base_vlan = 3 max_vlan = max_vlan - base_vlan v_range_t = str(base_vlan) + " " + str(base_vlan + max_vlan ) vapi.config_vlan_range_members(dut1, v_range_t, data.dut1_ports[0], config='del') vapi.config_vlan_range_members(dut2, v_range_t, data.dut2_ports[0], config='del') base_range = 1 max_range = 4 max_vlan = max_paths/4 incr_vlan = max_paths/4 for index in range(base_range, max_range): base_vlan = max_vlan + 1 #max_vlan = max_vlan + 32 max_vlan = max_vlan + incr_vlan v_range_t = str(base_vlan) + " " + str(max_vlan) vapi.config_vlan_range_members(dut1, v_range_t, data.dut1_ports[index], config='del') vapi.config_vlan_range_members(dut2, v_range_t, data.dut2_ports[index], config='del') cmd = "config vlan range del 2 129" st.config(dut, cmd) my_cmd = "no router bgp {}".format(data.as_num) st.vtysh_config(dut, my_cmd) my_cmd = "no router bgp {}".format(data.new_as_num) st.vtysh_config(dut2, my_cmd) st.debug("ret1: {} , ret2: {}".format(ret1, ret2)) if ret1 is True and ret2 is True: ret = True st.log("Test Case PASSED") else: ret = False st.log("Test Case FAILED") st.log("operation_successful") return ret
def verify_traffic_results(dut): vars = st.get_testbed_vars() tc_fail_flag = 0 member3 = vars.D2T1P3 member4 = vars.D2T1P4 res1 = True dut1 = dut v_range_t = str(data.tc6_xbase_vlan) + " " + str(data.tc6_xbase_vlan + data.max_vlan_count - 1) vapi.config_vlan_range_members(dut1, v_range_t, member3) if (res1): data.result[0] = True (tg1, tg_ph_1, tg2, tg_ph_2) = get_handles_1() clear_arp_entries(dut) arpapi.show_arp(dut) st.wait(15) st.log("INTFCONF: " + str(member3)) st.log("INTFCONF: " + str(member4)) tg1.tg_traffic_control(action='reset', port_handle=tg_ph_1) tg2.tg_traffic_control(action='reset', port_handle=tg_ph_2) h1 = tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.0.62.10', gateway='10.0.62.1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='61', vlan_id_count=data.intf_count, arp_send_req='1', gateway_step='0.0.1.0', intf_ip_addr_step='0.0.1.0', vlan_id_step='1') #pdb.set_trace() edit_vid = 219 st.wait(15) arpapi.show_arp(dut) #END if res1: st.log("Interface Scaling Test Case 6.2 PASSED PING TEST") dut1 = dut # L3 INTF SCALING TEST CASE 1.2 START result1 = verify_arp_entry(dut, edit_vid, data.tc6_xt1d1_ip_addr) if result1: st.log("Interface Scaling Test Case 6.2 PASSED ") data.tc6_xresult[0] = True data.tc6_xresult[1] = True else: tc_fail_flag = 1 st.log("Ping operation_failed") #tg1.tg_interface_config(port_handle=tg_ph_1, handle=h1['handle'], mode='destroy') # L3 INTF SCALING TEST CASE 1.2 END # L3 INTF SCALING TEST CASE 1.3 START clear_arp_entries(dut) st.wait(15) trigger_link_flap(dut1, member3) tg1.tg_arp_control(handle=h1['handle'], arp_target='all') st.wait(30) arpapi.show_arp(dut) #h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.0.62.10', gateway='10.0.62.1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='61', vlan_id_count=data.intf_count, arp_send_req='1', gateway_step='0.0.1.0', intf_ip_addr_step='0.0.1.0', vlan_id_step='1') #st.wait(30) result1 = verify_arp_entry(dut, edit_vid, data.tc6_xt1d1_ip_addr) if result1: st.log("Interface Scaling Test Case 6.3 PASSED ") data.tc6_xresult[2] = True else: tc_fail_flag = 1 st.log("Ping operation_failed") #tg1.tg_interface_config(port_handle=tg_ph_1, handle=h1['handle'], mode='destroy') # L3 INTF SCALING TEST CASE 6.3 END # L3 INTF SCALING TEST CASE 1.4 START trigger_link_flap(dut1, member3) st.wait(30) tg1.tg_arp_control(handle=h1['handle'], arp_target='all') #h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.0.62.10', gateway='10.0.62.1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='61', vlan_id_count=data.intf_count, arp_send_req='1', gateway_step='0.0.1.0', intf_ip_addr_step='0.0.1.0', vlan_id_step='1') st.wait(30) arpapi.show_arp(dut) ipfeature.ping(dut1, data.tc6_xt1d1_ip_addr) result1 = verify_arp_entry(dut, edit_vid, data.tc6_xt1d1_ip_addr) if result1: st.log("Interface Scaling Test Case 6.4 PASSED ") data.tc6_xresult[3] = True else: st.log("Ping operation_failed") tc_fail_flag = 1 # st.report_fail("Ping operation_failed") #tg1.tg_interface_config(port_handle=tg_ph_1, handle=h1['handle'], mode='destroy') # L3 INTF SCALING TEST CASE 1.4 END # L3 INTF SCALING TEST CASE 1.5 START verify_ip_from_vlan_interface(dut1, edit_vid) ipfeature.delete_ip_interface(dut, 'Vlan' + str(edit_vid), data.tc6_xd1t1_ip_addr, subnet="24") ipfeature.config_ip_addr_interface(dut, 'Vlan' + str(edit_vid), data.tc6_xd1t1_ip_addr, data.ip_prefixlen, family="ipv4") tg1.tg_arp_control(handle=h1['handle'], arp_target='all') #h1=tg1.tg_interface_config(port_handle=tg_ph_1, mode='config', intf_ip_addr='10.0.62.10', gateway='10.0.62.1', src_mac_addr='00:0a:01:00:00:01', vlan='1', vlan_id='61', vlan_id_count=data.intf_count, arp_send_req='1', gateway_step='0.0.1.0', intf_ip_addr_step='0.0.1.0', vlan_id_step='1') st.wait(30) arpapi.show_arp(dut) ipfeature.ping(dut1, data.tc6_xt1d1_ip_addr) result1 = verify_arp_entry(dut, edit_vid, data.tc6_xt1d1_ip_addr) if result1: st.log("Interface Scaling Test Case 6.5 PASSED ") data.tc6_xresult[4] = True else: st.log("Ping operation_failed") tc_fail_flag = 1 # st.report_fail("Ping operation_failed") tg1.tg_interface_config(port_handle=tg_ph_1, handle=h1['handle'], mode='destroy') if tc_fail_flag == 0: st.log("Interface Scaling Test Case 6.1 6.2 6.3 6.4 6.5 PASSED") st.report_pass("test_case_passed") else: st.log("IPV4 Route Scaling Test Case FAILURE Seen") st.report_pass("operation_successful")
def nat_pre_config(): global vars vars = st.ensure_min_topology("D1T1:2") platform = basic_obj.get_hwsku(vars.D1) common_constants = st.get_datastore(vars.D1, "constants", "default") if platform.lower() in common_constants['TH3_PLATFORMS']: st.error("NAT is not supported for this platform {}".format(platform)) st.report_unsupported('NAT_unsupported_platform',platform) global tg_handler, tg1, tg2, tg_ph_1, tg_ph_2, dut1_rt_int_mac, tg_str_data, tg_rt_int_handle tg_handler = util_tg_init(vars, [vars.T1D1P1, vars.T1D1P2]) tg1 = tg_handler["tg"] tg2 = tg_handler["tg"] tg_ph_1 = tg_handler["tg_ph_1"] tg_ph_2 = tg_handler["tg_ph_2"] ip_obj.config_ip_addr_interface(vars.D1, vars.D1T1P1, data.in1_ip_addr, data.in1_ip_addr_mask, family=data.af_ipv4) ip_obj.config_ip_addr_interface(vars.D1, vars.D1T1P2, data.out_ip_addr_l[0], data.out_ip_addr_mask, family=data.af_ipv4) dut1_rt_int_mac = basic_obj.get_ifconfig_ether(vars.D1, vars.D1T1P1) ip_obj.create_static_route(vars.D1, data.out_ip_addr_h, "{}/{}".format(data.global_ip_addr_rt, data.global_ip_addr_mask), shell=data.shell_vtysh, family=data.af_ipv4) ip_obj.create_static_route(vars.D1, data.in1_ip_addr_h[0], "{}/{}".format(data.s_global_ip_rt, data.s_global_ip_mask)) tg_rt_int_handle = util_tg_routing_int_config(vars, tg1, tg2, tg_ph_1, tg_ph_2) st.log("NAT Configuration") nat_obj.config_nat_feature(vars.D1, 'enable') util_nat_zone_config(vars, [vars.D1T1P1, vars.D1T1P2], [data.zone_1, data.zone_2], config=data.config_add) nat_obj.config_nat_static(vars.D1, protocol=data.proto_all, global_ip=data.out_ip_addr_l[0], local_ip=data.in1_ip_addr_h[0], config=data.config_add, nat_type=data.nat_type_dnat) nat_obj.config_nat_static(vars.D1, protocol=data.proto_tcp, global_ip=data.out_ip_addr_l[1], local_ip=data.in1_ip_addr_h[1], local_port_id=data.tcp_src_local_port, global_port_id=data.tcp_src_global_port, config=data.config_add, nat_type=data.nat_type_dnat) nat_obj.config_nat_static(vars.D1, protocol=data.proto_udp, global_ip=data.in1_ip_addr_h[2], local_ip=data.out_ip_addr_l[2], local_port_id=data.udp_src_global_port, global_port_id=data.udp_src_local_port, config=data.config_add, nat_type=data.nat_type_snat) nat_obj.config_nat_static(vars.D1, protocol=data.proto_all, global_ip=data.s_global_ip, local_ip=data.s_local_ip, config=data.config_add, nat_type=data.nat_type_snat) nat_obj.config_nat_static(vars.D1,protocol=data.proto_all,global_ip=data.out_ip_addr_l[3],local_ip=data.in1_ip_addr_h[3], config=data.config_add,nat_type=data.nat_type_dnat,twice_nat_id=data.twice_nat_id_1) nat_obj.config_nat_static(vars.D1, protocol=data.proto_all, global_ip=data.global_ip_addr, local_ip=data.test_ip_addr, config=data.config_add, nat_type=data.nat_type_snat, twice_nat_id=data.twice_nat_id_1) # dynamic NAT config st.log("Creating NAT Pool-1") nat_obj.config_nat_pool(vars.D1, pool_name=data.pool_name[0], global_ip_range=data.out_ip_range, global_port_range= data.global_port_range, config=data.config_add) nat_obj.config_nat_pool(vars.D1, pool_name="scale_pool", global_ip_range="125.56.90.23-125.56.90.30", global_port_range="1001-8001", config=data.config_add) st.log("Creating NAT Pool binding") nat_obj.config_nat_pool_binding(vars.D1, binding_name=data.bind_name[0], pool_name=data.pool_name[0], config=data.config_add) st.log("Creating NAT Pool-2") nat_obj.config_nat_pool(vars.D1, pool_name=data.pool_name[1], global_ip_range=data.out2_ip_range, config=data.config_add) st.log("Creating NAT Pool-2 binding") nat_obj.config_nat_pool_binding(vars.D1, binding_name=data.bind_name[1], pool_name=data.pool_name[1], config=data.config_add) # nat acl for ingress traffic acl_obj.create_acl_table(vars.D1, name=data.acl_table_in_nat_eg, stage="INGRESS", type=data.type, description="ingress-acl", ports=[vars.D1T1P1]) acl_obj.create_acl_rule(vars.D1, table_name=data.acl_table_in_nat_eg, rule_name="rule-32", packet_action=data.packet_forward_action, SRC_IP="{}/{}".format(data.in1_ip_addr_rt, data.in1_ip_addr_mask), priority='98', type=data.type, ip_protocol="4") acl_obj.create_acl_rule(vars.D1, table_name=data.acl_table_in_nat_eg, rule_name="rule-33", packet_action=data.packet_do_not_nat_action, SRC_IP="{}/{}".format('14.1.0.1', data.mask), priority='97', type=data.type, ip_protocol="4") # Checking arp table for debugging arp_obj.show_arp(vars.D1) ip_obj.show_ip_route(vars.D1) # Clearing all interface counters for debugging purpose intf_obj.clear_interface_counters(vars.D1) tg_str_data = util_tg_stream_config(tg1, tg2, tg_ph_1, tg_ph_2)
def acl_v4_module_hooks(request): # initialize topology initialize_topology() # apply module configuration apply_module_configuration() acl_config1 = acl_data.acl_json_config_v4_l3_traffic add_port_to_acl_table(acl_config1, 'L3_IPV4_INGRESS', vars.D1T1P1) acl_config2 = acl_data.acl_json_config_v6_l3_traffic add_port_to_acl_table(acl_config2, 'L3_IPV6_INGRESS', vars.D2T1P1) # creating ACL tables and rules print_log('Creating ACL tables and rules') utils.exec_all(True, [ utils.ExecAllFunc(acl_obj.apply_acl_config, vars.D1, acl_config1), utils.ExecAllFunc(acl_obj.apply_acl_config, vars.D2, acl_config2), ]) # create streams data.mac1 = basic_obj.get_ifconfig_ether(vars.D1, vars.D1T1P1) data.mac2 = basic_obj.get_ifconfig_ether(vars.D2, vars.D2T1P1) print_log('Creating streams') create_streams("tg1", "tg2", acl_config1['ACL_RULE'], "L3_IPV4_INGRESS", \ mac_src="00:0a:01:00:00:01", mac_dst=data.mac1) create_streams("tg1", "tg2", acl_config2['ACL_RULE'], "L3_IPV6_EGRESS", \ mac_src="00:0a:01:00:00:01", mac_dst="00:0a:01:00:11:02") create_streams("tg2", "tg1", acl_config2['ACL_RULE'], "L3_IPV6_INGRESS", \ mac_src="00:0a:01:00:11:02", mac_dst=data.mac2) create_streams("tg2", "tg1", acl_config1['ACL_RULE'], "L3_IPV4_EGRESS", \ mac_src="00:0a:01:00:11:02", mac_dst="00:0a:01:00:00:01") print_log('Completed module configuration') st.log("Configuring ipv4 address on ixia connected interfaces and portchannels present on both the DUTs") ip_obj.config_ip_addr_interface(vars.D1, vars.D1T1P1, data.ipv4_address_D1, 24, family="ipv4", config='add') ip_obj.config_ip_addr_interface(vars.D2, vars.D2T1P1, data.ipv4_address_D2, 24, family="ipv4", config='add') ip_obj.config_ip_addr_interface(vars.D1, data.portChannelName, data.ipv4_portchannel_D1, 24, family="ipv4", config='add') ip_obj.config_ip_addr_interface(vars.D2, data.portChannelName, data.ipv4_portchannel_D2, 24, family="ipv4", config='add') st.log("Configuring ipv6 address on ixia connected interfaces and portchannels present on both the DUTs") ip_obj.config_ip_addr_interface(vars.D1, vars.D1T1P1, data.ipv6_address_D1, 64, family="ipv6", config='add') ip_obj.config_ip_addr_interface(vars.D2, vars.D2T1P1, data.ipv6_address_D2, 64, family="ipv6", config='add') ip_obj.config_ip_addr_interface(vars.D1, data.portChannelName, data.ipv6_portchannel_D1, 64, family="ipv6", config='add') ip_obj.config_ip_addr_interface(vars.D2, data.portChannelName, data.ipv6_portchannel_D2, 64, family="ipv6", config='add') st.log("configuring ipv4 static routes on both the DUTs") ip_obj.create_static_route(vars.D1, data.ipv4_portchannel_D2, data.ipv4_network_D2, shell="vtysh", family="ipv4") ip_obj.create_static_route(vars.D2, data.ipv4_portchannel_D1, data.ipv4_network_D1, shell="vtysh", family="ipv4") st.log("configuring ipv6 static routes on both the DUTs") ip_obj.create_static_route(vars.D1, data.ipv6_portchannel_D2, data.ipv6_network_D2, shell="vtysh", family="ipv6") ip_obj.create_static_route(vars.D2, data.ipv6_portchannel_D1, data.ipv6_network_D1, shell="vtysh", family="ipv6") st.log("configuring static arp entries") arp_obj.add_static_arp(vars.D1, "1.1.1.2", "00:0a:01:00:00:01", vars.D1T1P1) arp_obj.add_static_arp(vars.D2, "2.2.2.2", "00:0a:01:00:11:02", vars.D2T1P1) arp_obj.add_static_arp(vars.D2, "2.2.2.4", "00:0a:01:00:11:02", vars.D2T1P1) arp_obj.add_static_arp(vars.D1, "1.1.1.4", "00:0a:01:00:00:01", vars.D1T1P1) arp_obj.add_static_arp(vars.D2, "2.2.2.5", "00:0a:01:00:11:02", vars.D2T1P1) arp_obj.add_static_arp(vars.D1, "1.1.1.5", "00:0a:01:00:00:01", vars.D1T1P1) arp_obj.add_static_arp(vars.D2, "2.2.2.6", "00:0a:01:00:11:02", vars.D2T1P1) arp_obj.add_static_arp(vars.D1, "1.1.1.6", "00:0a:01:00:00:01", vars.D1T1P1) arp_obj.show_arp(vars.D1) arp_obj.show_arp(vars.D2) st.log("configuring static ndp entries") arp_obj.config_static_ndp(vars.D1, "1001::2", "00:0a:01:00:00:01", vars.D1T1P1, operation="add") arp_obj.config_static_ndp(vars.D2, "2001::2", "00:0a:01:00:11:02", vars.D2T1P1, operation="add") arp_obj.show_ndp(vars.D1) arp_obj.show_ndp(vars.D2) yield clear_module_configuration()