brintos

brintos / linux-shallow public Read only

0
0
Text · 19.0 KiB · 82be5d0 Raw
669 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03# Copyright (c) 2024 Pengutronix, Oleksij Rempel <kernel@pengutronix.de>4 5# The script is adopted to work with the Microchip KSZ switch driver.6 7ETH_FCS_LEN=48 9WAIT_TIME=110NUM_NETIFS=411REQUIRE_JQ="yes"12REQUIRE_MZ="yes"13STABLE_MAC_ADDRS=yes14NETIF_CREATE=no15lib_dir=$(dirname $0)/../../../net/forwarding16source $lib_dir/tc_common.sh17source $lib_dir/lib.sh18 19require_command dcb20 21h1=${NETIFS[p1]}22swp1=${NETIFS[p2]}23swp2=${NETIFS[p3]}24h2=${NETIFS[p4]}25 26H1_IPV4="192.0.2.1"27H2_IPV4="192.0.2.2"28H1_IPV6="2001:db8:1::1"29H2_IPV6="2001:db8:1::2"30 31# On h1_ and h2_create do not set IP addresses to avoid interaction with the32# system, to keep packet counters clean.33h1_create()34{35	simple_if_init $h136	sysctl_set net.ipv6.conf.${h1}.disable_ipv6 137	# Get the MAC address of the interface to use it with mausezahn38	h1_mac=$(ip -j link show dev ${h1} | jq -e '.[].address')39}40 41h1_destroy()42{43	sysctl_restore net.ipv6.conf.${h1}.disable_ipv644	simple_if_fini $h145}46 47h2_create()48{49	simple_if_init $h250	sysctl_set net.ipv6.conf.${h2}.disable_ipv6 151	h2_mac=$(ip -j link show dev ${h2} | jq -e '.[].address')52}53 54h2_destroy()55{56	sysctl_restore net.ipv6.conf.${h2}.disable_ipv657	simple_if_fini $h258}59 60switch_create()61{62	ip link set ${swp1} up63	ip link set ${swp2} up64	sysctl_set net.ipv6.conf.${swp1}.disable_ipv6 165	sysctl_set net.ipv6.conf.${swp2}.disable_ipv6 166 67	# Ports should trust VLAN PCP even with vlan_filtering=068	ip link add br0 type bridge69	ip link set ${swp1} master br070	ip link set ${swp2} master br071	ip link set br0 up72	sysctl_set net.ipv6.conf.br0.disable_ipv6 173}74 75switch_destroy()76{77	sysctl_restore net.ipv6.conf.${swp2}.disable_ipv678	sysctl_restore net.ipv6.conf.${swp1}.disable_ipv679 80	ip link del br081}82 83setup_prepare()84{85	vrf_prepare86 87	h1_create88	h2_create89	switch_create90}91 92cleanup()93{94	pre_cleanup95 96	h2_destroy97	h1_destroy98	switch_destroy99 100	vrf_cleanup101}102 103set_apptrust_order()104{105	local if_name=$1106	local order=$2107 108	dcb apptrust set dev ${if_name} order ${order}109}110 111# Function to extract a specified field from a given JSON stats string112extract_network_stat() {113	local stats_json=$1114	local field_name=$2115 116	echo $(echo "$stats_json" | jq -r "$field_name")117}118 119run_test()120{121	local test_name=$1;122	local apptrust_order=$2;123	local port_prio=$3;124	local dscp_ipv=$4;125	local dscp=$5;126	local have_vlan=$6;127	local pcp_ipv=$7;128	local vlan_pcp=$8;129	local ip_v6=$9130 131	local rx_ipv132	local tx_ipv133 134	RET=0135 136	# Send some packet to populate the switch MAC table137	$MZ ${h2} -a ${h2_mac} -b ${h1_mac} -p 64 -t icmp echores -c 1138 139	# Based on the apptrust order, set the expected Internal Priority values140	# for the RX and TX paths.141	if [ "${apptrust_order}" == "" ]; then142		echo "Apptrust order not set."143		rx_ipv=${port_prio}144		tx_ipv=${port_prio}145	elif [ "${apptrust_order}" == "dscp" ]; then146		echo "Apptrust order is DSCP."147		rx_ipv=${dscp_ipv}148		tx_ipv=${dscp_ipv}149	elif [ "${apptrust_order}" == "pcp" ]; then150		echo "Apptrust order is PCP."151		rx_ipv=${pcp_ipv}152		tx_ipv=${pcp_ipv}153	elif [ "${apptrust_order}" == "pcp dscp" ]; then154		echo "Apptrust order is PCP DSCP."155		if [ ${have_vlan} -eq 1 ]; then156			rx_ipv=$((dscp_ipv > pcp_ipv ? dscp_ipv : pcp_ipv))157			tx_ipv=${pcp_ipv}158		else159			rx_ipv=${dscp_ipv}160			tx_ipv=${dscp_ipv}161		fi162	else163		RET=1164		echo "Error: Unknown apptrust order ${apptrust_order}"165		log_test "${test_name}"166		return167	fi168 169	# Most/all? of the KSZ switches do not provide per-TC counters. There170	# are only tx_hi and rx_hi counters, which are used to count packets171	# which are considered as high priority and most likely not assigned172	# to the queue 0.173	# On the ingress path, packets seem to get high priority status174	# independently of the DSCP or PCP global mapping. On the egress path,175	# the high priority status is assigned based on the DSCP or PCP global176	# map configuration.177	# The thresholds for the high priority status are not documented, but178	# it seems that the switch considers packets as high priority on the179	# ingress path if detected Internal Priority is greater than 0. On the180	# egress path, the switch considers packets as high priority if181	# detected Internal Priority is greater than 1.182	if [ ${rx_ipv} -ge 1 ]; then183		local expect_rx_high_prio=1184	else185		local expect_rx_high_prio=0186	fi187 188	if [ ${tx_ipv} -ge 2 ]; then189		local expect_tx_high_prio=1190	else191		local expect_tx_high_prio=0192	fi193 194	# Use ip tool to get the current switch packet counters. ethool stats195	# need to be recalculated to get the correct values.196	local swp1_stats=$(ip -s -j link show dev ${swp1})197	local swp2_stats=$(ip -s -j link show dev ${swp2})198	local swp1_rx_packets_before=$(extract_network_stat "$swp1_stats" \199				       '.[0].stats64.rx.packets')200	local swp1_rx_bytes_before=$(extract_network_stat "$swp1_stats" \201				     '.[0].stats64.rx.bytes')202	local swp2_tx_packets_before=$(extract_network_stat "$swp2_stats" \203				       '.[0].stats64.tx.packets')204	local swp2_tx_bytes_before=$(extract_network_stat "$swp2_stats" \205				     '.[0].stats64.tx.bytes')206	local swp1_rx_hi_before=$(ethtool_stats_get ${swp1} "rx_hi")207	local swp2_tx_hi_before=$(ethtool_stats_get ${swp2} "tx_hi")208 209	# Assamble the mausezahn command based on the test parameters210	# For the testis with ipv4 or ipv6, use icmp response packets,211	# to avoid interaction with the system, to keep packet counters212	# clean.213	if [ ${ip_v6} -eq 0 ]; then214		local ip="-a ${h1_mac} -b ${h2_mac} -A ${H1_IPV4} \215			  -B ${H2_IPV4} -t icmp unreach,code=1,dscp=${dscp}"216	else217		local ip="-6 -a ${h1_mac} -b ${h2_mac} -A ${H1_IPV6} \218			  -B ${H2_IPV6} -t icmp6 type=1,code=0,dscp=${dscp}"219	fi220 221	if [ ${have_vlan} -eq 1 ]; then222		local vlan_pcp_opt="-Q ${vlan_pcp}:0"223	else224		local vlan_pcp_opt=""225	fi226	$MZ ${h1} ${ip} -c ${PING_COUNT} -d 10msec ${vlan_pcp_opt}227 228	# Wait until the switch packet counters are updated229	sleep 6230 231	local swp1_stats=$(ip -s -j link show dev ${swp1})232	local swp2_stats=$(ip -s -j link show dev ${swp2})233 234	local swp1_rx_packets_after=$(extract_network_stat "$swp1_stats" \235				      '.[0].stats64.rx.packets')236	local swp1_rx_bytes_after=$(extract_network_stat "$swp1_stats" \237				    '.[0].stats64.rx.bytes')238	local swp2_tx_packets_after=$(extract_network_stat "$swp2_stats" \239				      '.[0].stats64.tx.packets')240	local swp2_tx_bytes_after=$(extract_network_stat "$swp2_stats" \241				    '.[0].stats64.tx.bytes')242 243	local swp1_rx_packets_diff=$((${swp1_rx_packets_after} - \244				      ${swp1_rx_packets_before}))245	local swp2_tx_packets_diff=$((${swp2_tx_packets_after} - \246				      ${swp2_tx_packets_before}))247 248	local swp1_rx_hi_after=$(ethtool_stats_get ${swp1} "rx_hi")249	local swp2_tx_hi_after=$(ethtool_stats_get ${swp2} "tx_hi")250 251	# Test if any packets were received on swp1, we will rx before and after252	if [ ${swp1_rx_packets_diff} -lt ${PING_COUNT} ]; then253		echo "Not expected amount of received packets on ${swp1}"254		echo "before ${swp1_rx_packets_before} after ${swp1_rx_packets_after}"255		RET=1256	fi257 258	# Test if any packets were transmitted on swp2, we will tx before and after259	if [ ${swp2_tx_packets_diff} -lt ${PING_COUNT} ]; then260		echo "Not expected amount of transmitted packets on ${swp2}"261		echo "before ${swp2_tx_packets_before} after ${swp2_tx_packets_after}"262		RET=1263	fi264 265	# tx/rx_hi counted in bytes. So, we need to compare the difference in bytes266	local swp1_rx_bytes_diff=$(($swp1_rx_bytes_after - $swp1_rx_bytes_before))267	local swp2_tx_bytes_diff=$(($swp2_tx_bytes_after - $swp2_tx_bytes_before))268	local swp1_rx_hi_diff=$(($swp1_rx_hi_after - $swp1_rx_hi_before))269	local swp2_tx_hi_diff=$(($swp2_tx_hi_after - $swp2_tx_hi_before))270 271	if [ ${expect_rx_high_prio} -eq 1 ]; then272		swp1_rx_hi_diff=$((${swp1_rx_hi_diff} - \273				   ${swp1_rx_packets_diff} * ${ETH_FCS_LEN}))274		if [ ${swp1_rx_hi_diff} -ne ${swp1_rx_bytes_diff} ]; then275			echo "Not expected amount of high priority packets received on ${swp1}"276			echo "RX hi diff: ${swp1_rx_hi_diff}, expected RX bytes diff: ${swp1_rx_bytes_diff}"277			RET=1278		fi279	else280		if [ ${swp1_rx_hi_diff} -ne 0 ]; then281			echo "Unexpected amount of high priority packets received on ${swp1}"282			echo "RX hi diff: ${swp1_rx_hi_diff}, expected 0"283			RET=1284		fi285	fi286 287	if [ ${expect_tx_high_prio} -eq 1 ]; then288		swp2_tx_hi_diff=$((${swp2_tx_hi_diff} - \289				   ${swp2_tx_packets_diff} * ${ETH_FCS_LEN}))290		if [ ${swp2_tx_hi_diff} -ne ${swp2_tx_bytes_diff} ]; then291			echo "Not expected amount of high priority packets transmitted on ${swp2}"292			echo "TX hi diff: ${swp2_tx_hi_diff}, expected TX bytes diff: ${swp2_tx_bytes_diff}"293			RET=1294		fi295	else296		if [ ${swp2_tx_hi_diff} -ne 0 ]; then297			echo "Unexpected amount of high priority packets transmitted on ${swp2}"298			echo "TX hi diff: ${swp2_tx_hi_diff}, expected 0"299			RET=1300		fi301	fi302 303	log_test "${test_name}"304}305 306run_test_dscp()307{308	# IPv4 test309	run_test "$1" "$2" "$3" "$4" "$5" 0 0 0 0310	# IPv6 test311	run_test "$1" "$2" "$3" "$4" "$5" 0 0 0 1312}313 314run_test_dscp_pcp()315{316	# IPv4 test317	run_test "$1" "$2" "$3" "$4" "$5" 1 "$6" "$7" 0318	# IPv6 test319	run_test "$1" "$2" "$3" "$4" "$5" 1 "$6" "$7" 1320}321 322port_default_prio_get()323{324	local if_name=$1325	local prio326 327	prio="$(dcb -j app show dev ${if_name} default-prio | \328		jq '.default_prio[]')"329	if [ -z "${prio}" ]; then330		prio=0331	fi332 333	echo ${prio}334}335 336test_port_default()337{338	local orig_apptrust=$(port_get_default_apptrust ${swp1})339	local orig_prio=$(port_default_prio_get ${swp1})340	local apptrust_order=""341 342	RET=0343 344	# Make sure no other priority sources will interfere with the test345	set_apptrust_order ${swp1} "${apptrust_order}"346 347	for val in $(seq 0 7); do348		dcb app replace dev ${swp1} default-prio ${val}349		if [ $val -ne $(port_default_prio_get ${swp1}) ]; then350			RET=1351			break352		fi353 354		run_test_dscp "Port-default QoS classification, prio: ${val}" \355			"${apptrust_order}" ${val} 0 0356	done357 358	set_apptrust_order ${swp1} "${orig_apptrust}"359	if [[ "$orig_apptrust" != "$(port_get_default_apptrust ${swp1})" ]]; then360		RET=1361	fi362 363	dcb app replace dev ${swp1} default-prio ${orig_prio}364	if [ $orig_prio -ne $(port_default_prio_get ${swp1}) ]; then365		RET=1366	fi367 368	log_test "Port-default QoS classification"369}370 371port_get_default_apptrust()372{373	local if_name=$1374 375	dcb -j apptrust show dev ${if_name} | jq -r '.order[]' | \376		tr '\n' ' ' | xargs377}378 379test_port_apptrust()380{381	local original_dscp_prios_swp1=$(get_dscp_prios ${swp1})382	local orig_apptrust=$(port_get_default_apptrust ${swp1})383	local orig_port_prio=$(port_default_prio_get ${swp1})384	local order_variants=("pcp dscp" "dscp" "pcp")385	local apptrust_order386	local port_prio387	local dscp_prio388	local pcp_prio389	local dscp390	local pcp391 392	RET=0393 394	# First, test if apptrust configuration as taken by the kernel395	for order in "${order_variants[@]}"; do396		set_apptrust_order ${swp1} "${order}"397		if [[ "$order" != "$(port_get_default_apptrust ${swp1})" ]]; then398			RET=1399			break400		fi401	done402 403	log_test "Apptrust, supported variants"404 405	# To test if the apptrust configuration is working as expected, we need406	# to set DSCP priorities for the switch port.407	init_dscp_prios "${swp1}" "${original_dscp_prios_swp1}"408 409	# Start with a simple test where all apptrust sources are disabled410	# default port priority is 0, DSCP priority is mapped to 7.411	# No high priority packets should be received or transmitted.412	port_prio=0413	dscp_prio=7414	dscp=4415 416	dcb app replace dev ${swp1} default-prio ${port_prio}417	dcb app replace dev ${swp1} dscp-prio ${dscp}:${dscp_prio}418 419	apptrust_order=""420	set_apptrust_order ${swp1} "${apptrust_order}"421	# Test with apptrust sources disabled, Packets should get port default422	# priority which is 0423	run_test_dscp "Apptrust, all disabled. DSCP-prio ${dscp}:${dscp_prio}" \424		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp}425 426	apptrust_order="pcp"427	set_apptrust_order ${swp1} "${apptrust_order}"428	# If PCP is enabled, packets should get PCP priority, which is not429	# set in this test (no VLAN tags are present in the packet). No high430	# priority packets should be received or transmitted.431	run_test_dscp "Apptrust, PCP enabled. DSCP-prio ${dscp}:${dscp_prio}" \432		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp}433 434	apptrust_order="dscp"435	set_apptrust_order ${swp1} "${apptrust_order}"436	# If DSCP is enabled, packets should get DSCP priority which is set to 7437	# in this test. High priority packets should be received and transmitted.438	run_test_dscp "Apptrust, DSCP enabled. DSCP-prio ${dscp}:${dscp_prio}" \439		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp}440 441	apptrust_order="pcp dscp"442	set_apptrust_order ${swp1} "${apptrust_order}"443	# If PCP and DSCP are enabled, PCP would have higher apptrust priority444	# so packets should get PCP priority. But in this test VLAN PCP is not445	# set, so it should get DSCP priority which is set to 7. High priority446	# packets should be received and transmitted.447	run_test_dscp "Apptrust, PCP and DSCP are enabled. DSCP-prio ${dscp}:${dscp_prio}" \448		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp}449 450	# If VLAN PCP is set, it should have higher apptrust priority than DSCP451	# so packets should get VLAN PCP priority. Send packets with VLAN PCP452	# set to 0, DSCP set to 7. Packets should get VLAN PCP priority.453	# No high priority packets should be transmitted. Due to nature of the454	# switch, high priority packets will be received.455	pcp_prio=0456	pcp=0457	run_test_dscp_pcp "Apptrust, PCP and DSCP are enabled. PCP ${pcp_prio}, DSCP-prio ${dscp}:${dscp_prio}" \458		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp} ${pcp_prio} ${pcp}459 460	# If VLAN PCP is set to 7, it should have higher apptrust priority than461	# DSCP so packets should get VLAN PCP priority. Send packets with VLAN462	# PCP set to 7, DSCP set to 7. Packets should get VLAN PCP priority.463	# High priority packets should be received and transmitted.464	pcp_prio=7465	pcp=7466	run_test_dscp_pcp "Apptrust, PCP and DSCP are enabled. PCP ${pcp_prio}, DSCP-prio ${dscp}:${dscp_prio}" \467		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp} ${pcp_prio} ${pcp}468	# Now make sure that the switch is able to handle the case where DSCP469	# priority is set to 0 and PCP priority is set to 7. Packets should get470	# PCP priority. High priority packets should be received and transmitted.471	dscp_prio=0472	dcb app replace dev ${swp1} dscp-prio ${dscp}:${dscp_prio}473	run_test_dscp_pcp "Apptrust, PCP and DSCP are enabled. PCP ${pcp_prio}, DSCP-prio ${dscp}:${dscp_prio}" \474		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp} ${pcp_prio} ${pcp}475	# If both VLAN PCP and DSCP are set to 0, packets should get 0 priority.476	# No high priority packets should be received or transmitted.477	pcp_prio=0478	pcp=0479	run_test_dscp_pcp "Apptrust, PCP and DSCP are enabled. PCP ${pcp_prio}, DSCP-prio ${dscp}:${dscp_prio}" \480		"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp} ${pcp_prio} ${pcp}481 482	# Restore original priorities483	if ! restore_priorities "${swp1}" "${original_dscp_prios_swp1}"; then484		RET=1485	fi486 487	set_apptrust_order ${swp1} "${orig_apptrust}"488	if [ "$orig_apptrust" != "$(port_get_default_apptrust ${swp1})" ]; then489		RET=1490	fi491 492	dcb app replace dev ${swp1} default-prio ${orig_port_prio}493	if [ $orig_port_prio -ne $(port_default_prio_get ${swp1}) ]; then494		RET=1495	fi496 497	log_test "Apptrust, restore original settings"498}499 500# Function to get current DSCP priorities501get_dscp_prios() {502	local if_name=$1503	dcb -j app show dev ${if_name} | jq -c '.dscp_prio'504}505 506# Function to set a specific DSCP priority on a device507replace_dscp_prio() {508	local if_name=$1509	local dscp=$2510	local prio=$3511	dcb app replace dev ${if_name} dscp-prio ${dscp}:${prio}512}513 514# Function to compare DSCP maps515compare_dscp_maps() {516	local old_json=$1517	local new_json=$2518	local dscp=$3519	local prio=$4520 521	# Create a modified old_json with the expected change for comparison522	local modified_old_json=$(echo "$old_json" |523		jq --argjson dscp $dscp --argjson prio $prio \524			'map(if .[0] == $dscp then [$dscp, $prio] else . end)' |525		tr -d " \n")526 527	# Compare new_json with the modified_old_json528	if [[ "$modified_old_json" == "$new_json" ]]; then529		return 0530	else531		return 1532	fi533}534 535# Function to set DSCP priorities536set_and_verify_dscp() {537	local port=$1538	local dscp=$2539	local new_prio=$3540 541	local old_prios=$(get_dscp_prios $port)542 543	replace_dscp_prio "$port" $dscp $new_prio544 545	# Fetch current settings and compare546	local current_prios=$(get_dscp_prios $port)547	if ! compare_dscp_maps "$old_prios" "$current_prios" $dscp $new_prio; then548		echo "Error: Unintended changes detected in DSCP map for $port after setting DSCP $dscp to $new_prio."549		return 1550	fi551	return 0552}553 554# Function to restore original priorities555restore_priorities() {556	local port=$1557	local original_prios=$2558 559	echo "Removing test artifacts for $port"560	local current_prios=$(get_dscp_prios $port)561	local prio_str=$(echo "$current_prios" |562		jq -r 'map("\(.[0]):\(.[1])") | join(" ")')563	dcb app del dev $port dscp-prio $prio_str564 565	echo "Restoring original DSCP priorities for $port"566	local restore_str=$(echo "$original_prios" |567		jq -r 'map("\(.[0]):\(.[1])") | join(" ")')568	dcb app add dev $port dscp-prio $restore_str569 570	local current_prios=$(get_dscp_prios $port)571	if [[ "$original_prios" != "$current_prios" ]]; then572		echo "Error: Failed to restore original DSCP priorities for $port"573		return 1574	fi575	return 0576}577 578# Initialize DSCP priorities. Set them to predictable values for testing.579init_dscp_prios() {580	local port=$1581	local original_prios=$2582 583	echo "Removing any existing DSCP priority mappins for $port"584	local prio_str=$(echo "$original_prios" |585		jq -r 'map("\(.[0]):\(.[1])") | join(" ")')586	dcb app del dev $port dscp-prio $prio_str587 588	# Initialize DSCP priorities list589	local dscp_prios=""590	for dscp in {0..63}; do591		dscp_prios+=("$dscp:0")592	done593 594	echo "Setting initial DSCP priorities map to 0 for $port"595	dcb app add dev $port dscp-prio ${dscp_prios[@]}596}597 598# Main function to test global DSCP map across specified ports599test_global_dscp_map() {600	local ports=("$swp1" "$swp2")601	local original_dscp_prios_port0=$(get_dscp_prios ${ports[0]})602	local orig_apptrust=$(port_get_default_apptrust ${swp1})603	local orig_port_prio=$(port_default_prio_get ${swp1})604	local apptrust_order="dscp"605	local port_prio=0606	local dscp_prio607	local dscp608 609	RET=0610 611	set_apptrust_order ${swp1} "${apptrust_order}"612	dcb app replace dev ${swp1} default-prio ${port_prio}613 614	# Initialize DSCP priorities615	init_dscp_prios "${ports[0]}" "$original_dscp_prios_port0"616 617	# Loop over each DSCP index618	for dscp in {0..63}; do619		# and test each Internal Priority value620		for dscp_prio in {0..7}; do621			# do it for each port. This is to test if the global DSCP map622			# is accessible from all ports.623			for port in "${ports[@]}"; do624				if ! set_and_verify_dscp "$port" $dscp $dscp_prio; then625					RET=1626				fi627			done628 629			# Test if the DSCP priority is correctly applied to the packets630			run_test_dscp "DSCP (${dscp}) QoS classification, prio: ${dscp_prio}" \631				"${apptrust_order}" ${port_prio} ${dscp_prio} ${dscp}632			if [ ${RET} -eq 1 ]; then633				break634			fi635		done636	done637 638	# Restore original priorities639	if ! restore_priorities "${ports[0]}" "${original_dscp_prios_port0}"; then640		RET=1641	fi642 643	set_apptrust_order ${swp1} "${orig_apptrust}"644	if [[ "$orig_apptrust" != "$(port_get_default_apptrust ${swp1})" ]]; then645		RET=1646	fi647 648	dcb app replace dev ${swp1} default-prio ${orig_port_prio}649	if [ $orig_port_prio -ne $(port_default_prio_get ${swp1}) ]; then650		RET=1651	fi652 653	log_test "DSCP global map"654}655 656trap cleanup EXIT657 658ALL_TESTS="659	test_port_default660	test_port_apptrust661	test_global_dscp_map662"663 664setup_prepare665setup_wait666tests_run667 668exit $EXIT_STATUS669