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)
示例#2
0
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')