def ErrorHandler(cmd, retval): global ixiatcl err = ixiatcl.tcl_error_info() log = retval['log'] additional_info = '> command: %s\n> tcl errorInfo: %s\n> log: %s' % ( cmd, err, log) raise IxiaError(IxiaError.COMMAND_FAIL, additional_info)
def ixnHLT_Scriptgen_RunTest(ixiahlt, ixnHLT): ixiatcl = ixiahlt.ixiatcl # ####################### # start phase of the test # ####################### ixnHLT_logger('Waiting 60 seconds before starting protocol(s) ...') time.sleep(60) ixnHLT_logger('Starting all protocol(s) ...') _result_ = ixiahlt.test_control(action='start_all_protocols') # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('ixiahlt::traffic_control', _result_) time.sleep(30) # # Reset traffic # ixnHLT_logger('Resetting traffic...') _result_ = ixiahlt.traffic_control( action='reset', traffic_generator='ixnetwork_540', cpdp_convergence_enable='0', l1_rate_stats_enable ='1', misdirected_per_flow ='0', delay_variation_enable='0', packet_loss_duration_enable='0', latency_bins='enabled', latency_control='store_and_forward', instantaneous_stats_enable='0' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_control', _result_) # # Collect port_handles for traffic_stats # traffic_stats_ph = set() for (k, v) in ixnHLT.iteritems(): if k.startswith('PORT-HANDLE,'): traffic_stats_ph.add(v) # # Configure traffic for all configuration elements # # -- Traffic item//traffic/trafficItem:<1> ixnHLT_logger('Configuring traffic for traffic item: //traffic/trafficItem:<1>') ti_srcs, ti_dsts = {}, {} ti_mcast_rcvr_handle, ti_mcast_rcvr_port_index, ti_mcast_rcvr_host_index, ti_mcast_rcvr_mcast_index = {}, {}, {}, {} ti_srcs['EndpointSet-1'] = ixnHLT_endpointMatch(ixnHLT, ['//topology:<1>'], 'HANDLE') if len(ti_srcs) == 0: match_err = {'log': 'Cannot find any src endpoints for EndpointSet-1'} ixnHLT_errorHandler('ixnHLT_endpointMatch', match_err) ti_dsts['EndpointSet-1'] = ixnHLT_endpointMatch(ixnHLT, ['//topology:<2>'], 'HANDLE') if len(ti_dsts) == 0: match_err = {'log': 'Cannot find any dst endpoints for elem EndpointSet-1'} ixnHLT_errorHandler('ixnHLT_endpointMatch', match_err) _result_ = ixiahlt.traffic_config( mode='create', traffic_generator='ixnetwork_540', endpointset_count=1, emulation_src_handle=[[ti_srcs['EndpointSet-1']]], emulation_dst_handle=[[ti_dsts['EndpointSet-1']]], emulation_multicast_dst_handle=[[]], emulation_multicast_dst_handle_type=[[]], global_dest_mac_retry_count='1', global_dest_mac_retry_delay='5', enable_data_integrity='1', global_enable_dest_mac_retry='1', global_enable_min_frame_size='0', global_enable_staggered_transmit='0', global_enable_stream_ordering='0', global_stream_control='continuous', global_stream_control_iterations='1', global_large_error_threshhold='2', global_enable_mac_change_on_fly='0', global_max_traffic_generation_queries='500', global_mpls_label_learning_timeout='30', global_refresh_learned_info_before_apply='0', global_use_tx_rx_sync='1', global_wait_time='1', global_display_mpls_current_label_value='0', global_detect_misdirected_packets='0', global_frame_ordering='none', frame_sequencing='disable', frame_sequencing_mode='rx_threshold', src_dest_mesh='one_to_one', route_mesh='one_to_one', bidirectional='0', allow_self_destined='0', use_cp_rate='1', use_cp_size='1', enable_dynamic_mpls_labels='0', hosts_per_net='1', name='TI0-Traffic_Item_1', source_filter='all', destination_filter='all', tag_filter=[[]], merge_destinations='1', circuit_endpoint_type='ipv4', pending_operations_timeout='30' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_config', _result_) # -- All current config elements config_elements = ixiatcl.convert_tcl_list(_result_['traffic_item']) # -- Config Element //traffic/trafficItem:<1>/configElement:<1> ixnHLT_logger('Configuring options for config elem: //traffic/trafficItem:<1>/configElement:<1>') _result_ = ixiahlt.traffic_config( mode='modify', traffic_generator='ixnetwork_540', stream_id=config_elements[0], preamble_size_mode='auto', preamble_custom_size='8', data_pattern='', data_pattern_mode='incr_byte', enforce_min_gap='0', rate_percent='100', frame_rate_distribution_port='split_evenly', frame_rate_distribution_stream='split_evenly', frame_size='256', length_mode='fixed', tx_mode='advanced', transmit_mode='single_burst', burst_loop_count='1', pkts_per_burst='50000', tx_delay='0', tx_delay_unit='bytes', number_of_packets_per_stream='50000', loop_count='1', min_gap_bytes='12' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_config', _result_) # -- Endpoint set EndpointSet-1 ixnHLT_logger('Configuring traffic for config elem: //traffic/trafficItem:<1>/configElement:<1>') ixnHLT_logger('Configuring traffic for endpoint set: EndpointSet-1') # -- Stack //traffic/trafficItem:<1>/configElement:<1>/stack:"ethernet-1" _result_ = ixiahlt.traffic_config( mode='modify_or_insert', traffic_generator='ixnetwork_540', stream_id=config_elements[0], stack_index='1', l2_encap='ethernet_ii', mac_src_mode='fixed', mac_src_tracking='0', mac_src='00:00:00:00:00:00' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_config', _result_) # -- Stack //traffic/trafficItem:<1>/configElement:<1>/stack:"ipv4-2" _result_ = ixiahlt.traffic_config( mode='modify_or_insert', traffic_generator='ixnetwork_540', stream_id=config_elements[0], stack_index='2', l3_protocol='ipv4', qos_type_ixn='tos', ip_precedence_mode='fixed', ip_precedence='0', ip_precedence_tracking='0', ip_delay_mode='fixed', ip_delay='0', ip_delay_tracking='0', ip_throughput_mode='fixed', ip_throughput='0', ip_throughput_tracking='0', ip_reliability_mode='fixed', ip_reliability='0', ip_reliability_tracking='0', ip_cost_mode='fixed', ip_cost='0', ip_cost_tracking='0', ip_cu_mode='fixed', ip_cu='0', ip_cu_tracking='0', ip_id_mode='fixed', ip_id='0', ip_id_tracking='0', ip_reserved_mode='fixed', ip_reserved='0', ip_reserved_tracking='0', ip_fragment_mode='fixed', ip_fragment='1', ip_fragment_tracking='0', ip_fragment_last_mode='fixed', ip_fragment_last='1', ip_fragment_last_tracking='0', ip_fragment_offset_mode='fixed', ip_fragment_offset='0', ip_fragment_offset_tracking='0', ip_ttl_mode='fixed', ip_ttl='64', ip_ttl_tracking='0', track_by='sourceDestValuePair0 flowGroup0 trackingenabled0', egress_tracking='none' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_config', _result_) # -- Post Options ixnHLT_logger('Configuring post options for config elem: //traffic/trafficItem:<1>/configElement:<1>') _result_ = ixiahlt.traffic_config( mode='modify', traffic_generator='ixnetwork_540', stream_id=config_elements[0], transmit_distribution='none' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_config', _result_) # # Configure traffic for Layer 4-7 AppLibrary Profile # # # Start traffic configured earlier # ixnHLT_logger('Running Traffic...') _result_ = ixiahlt.traffic_control( action='run', traffic_generator='ixnetwork_540', type='l23' ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_control', _result_) time.sleep(30) # ################################ # protocol stats phase of the test # ################################ # stats for: # packet_config_buffers handles ixnHLT_logger('getting stats for packet_config_buffers configuration elements') # ###################### # stop phase of the test # ###################### # # Stop traffic started earlier # ixnHLT_logger('Stopping Traffic...') _result_ = ixiahlt.traffic_control( action='stop', traffic_generator='ixnetwork_540', type='l23', ) # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_control', _result_) # ############################### # traffic stats phase of the test # ############################### time.sleep(30) # # print stats for all ports that are involved w/ # ixnHLT(TRAFFIC-ENDPOINT-HANDLES) # ixnHLT_logger('Traffic stats') for traffic_stats_retry in range(120): _result_ = ixiahlt.traffic_stats( mode='aggregate', traffic_generator='ixnetwork_540', measure_mode='mixed' ) if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('traffic_stats', _result_) if _result_['waiting_for_stats'] == '0': break ixnHLT_logger('Traffic waiting_for_stats flag is 1. Trial %d' % traffic_stats_retry) time.sleep(1) if _result_['waiting_for_stats'] != '0': add_info = 'Traffic statistics are not ready after 120 seconds. waiting_for_stats is 1' raise IxiaError(IxiaError.COMMAND_FAIL, add_info) for port_handle in traffic_stats_ph: ixnHLT_logger('') ixnHLT_logger('port %s' % port_handle) ixnHLT_logger('-----------------------------------') ixnHLT_logger('TX') for (k, v) in _result_[port_handle]['aggregate']['tx'].iteritems(): ixnHLT_logger('{0:40s} = {1}'.format(k, v)) ixnHLT_logger('RX') for (k, v) in _result_[port_handle]['aggregate']['rx'].iteritems(): ixnHLT_logger('{0:40s} = {1}'.format(k, v)) ixnHLT_logger('') ixnHLT_logger('Stopping all protocol(s) ...') _result_ = ixiahlt.test_control(action='stop_all_protocols') # Check status if _result_['status'] != IxiaHlt.SUCCESS: ixnHLT_errorHandler('ixiahlt::traffic_control', _result_)
time.sleep(3) print('\n\nVXLAN aggregate stats port 1:\n') printDict(vxlan_stats_2) print('\n\nVXLAN aggregate stats port 2:\n') printDict(vxlan_stats_1) print('\n\nDHCP Client aggregate stats:\n') printDict(dhcp_client_stats) print('\n\nDHCP Server aggregate stats:\n') printDict(dhcp_server_stats) if dhcp_client_stats[port_0]['aggregate']['success_percentage'] != '100': raise IxiaError(IxiaError.COMMAND_FAIL, 'Not all DHCP sessions are up!') if dhcp_server_stats['aggregate'][port_1]['sessions_up'] != '3': raise IxiaError(IxiaError.COMMAND_FAIL, 'Not all DHCP Server sessions are up!') time.sleep(5) # ############################################################################# # TRAFFIC CONFIG # ############################################################################# rate_start_value = '10' frame_size_start = '512' print('\n\nConfiguring traffic between DHCP Clients and IPv4...\n\n')