167 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
# SPDX-License-Identifier: GPL-2.0
 | 
						|
 | 
						|
# Test for port-default priority. Non-IP packets ingress $swp1 and are
 | 
						|
# prioritized according to the default priority specified at the port.
 | 
						|
# rx_octets_prio_* counters are used to verify the prioritization.
 | 
						|
#
 | 
						|
# +-----------------------+
 | 
						|
# | H1                    |
 | 
						|
# |    + $h1              |
 | 
						|
# |    | 192.0.2.1/28     |
 | 
						|
# +----|------------------+
 | 
						|
#      |
 | 
						|
# +----|------------------+
 | 
						|
# | SW |                  |
 | 
						|
# |    + $swp1            |
 | 
						|
# |      192.0.2.2/28     |
 | 
						|
# |      APP=<prio>,1,0   |
 | 
						|
# +-----------------------+
 | 
						|
 | 
						|
ALL_TESTS="
 | 
						|
	ping_ipv4
 | 
						|
	test_defprio
 | 
						|
"
 | 
						|
 | 
						|
lib_dir=$(dirname $0)/../../../net/forwarding
 | 
						|
 | 
						|
NUM_NETIFS=2
 | 
						|
: ${HIT_TIMEOUT:=1000} # ms
 | 
						|
source $lib_dir/lib.sh
 | 
						|
 | 
						|
declare -a APP
 | 
						|
 | 
						|
defprio_install()
 | 
						|
{
 | 
						|
	local dev=$1; shift
 | 
						|
	local prio=$1; shift
 | 
						|
	local app="app=$prio,1,0"
 | 
						|
 | 
						|
	lldptool -T -i $dev -V APP $app >/dev/null
 | 
						|
	lldpad_app_wait_set $dev
 | 
						|
	APP[$prio]=$app
 | 
						|
}
 | 
						|
 | 
						|
defprio_uninstall()
 | 
						|
{
 | 
						|
	local dev=$1; shift
 | 
						|
	local prio=$1; shift
 | 
						|
	local app=${APP[$prio]}
 | 
						|
 | 
						|
	lldptool -T -i $dev -V APP -d $app >/dev/null
 | 
						|
	lldpad_app_wait_del
 | 
						|
	unset APP[$prio]
 | 
						|
}
 | 
						|
 | 
						|
defprio_flush()
 | 
						|
{
 | 
						|
	local dev=$1; shift
 | 
						|
	local prio
 | 
						|
 | 
						|
	if ((${#APP[@]})); then
 | 
						|
		lldptool -T -i $dev -V APP -d ${APP[@]} >/dev/null
 | 
						|
	fi
 | 
						|
	lldpad_app_wait_del
 | 
						|
	APP=()
 | 
						|
}
 | 
						|
 | 
						|
h1_create()
 | 
						|
{
 | 
						|
	simple_if_init $h1 192.0.2.1/28
 | 
						|
}
 | 
						|
 | 
						|
h1_destroy()
 | 
						|
{
 | 
						|
	simple_if_fini $h1 192.0.2.1/28
 | 
						|
}
 | 
						|
 | 
						|
switch_create()
 | 
						|
{
 | 
						|
	ip link set dev $swp1 up
 | 
						|
	ip addr add dev $swp1 192.0.2.2/28
 | 
						|
}
 | 
						|
 | 
						|
switch_destroy()
 | 
						|
{
 | 
						|
	defprio_flush $swp1
 | 
						|
	ip addr del dev $swp1 192.0.2.2/28
 | 
						|
	ip link set dev $swp1 down
 | 
						|
}
 | 
						|
 | 
						|
setup_prepare()
 | 
						|
{
 | 
						|
	h1=${NETIFS[p1]}
 | 
						|
	swp1=${NETIFS[p2]}
 | 
						|
 | 
						|
	vrf_prepare
 | 
						|
 | 
						|
	h1_create
 | 
						|
	switch_create
 | 
						|
}
 | 
						|
 | 
						|
cleanup()
 | 
						|
{
 | 
						|
	pre_cleanup
 | 
						|
 | 
						|
	switch_destroy
 | 
						|
	h1_destroy
 | 
						|
 | 
						|
	vrf_cleanup
 | 
						|
}
 | 
						|
 | 
						|
ping_ipv4()
 | 
						|
{
 | 
						|
	ping_test $h1 192.0.2.2
 | 
						|
}
 | 
						|
 | 
						|
__test_defprio()
 | 
						|
{
 | 
						|
	local prio_install=$1; shift
 | 
						|
	local prio_observe=$1; shift
 | 
						|
	local key
 | 
						|
	local t1
 | 
						|
	local i
 | 
						|
 | 
						|
	RET=0
 | 
						|
 | 
						|
	defprio_install $swp1 $prio_install
 | 
						|
 | 
						|
	local t0=$(ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
 | 
						|
	mausezahn -q $h1 -d 100m -c 10 -t arp reply
 | 
						|
	t1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((t0 + 10))" \
 | 
						|
		ethtool_stats_get $swp1 rx_frames_prio_$prio_observe)
 | 
						|
 | 
						|
	check_err $? "Default priority $prio_install/$prio_observe: Expected to capture 10 packets, got $((t1 - t0))."
 | 
						|
	log_test "Default priority $prio_install/$prio_observe"
 | 
						|
 | 
						|
	defprio_uninstall $swp1 $prio_install
 | 
						|
}
 | 
						|
 | 
						|
test_defprio()
 | 
						|
{
 | 
						|
	local prio
 | 
						|
 | 
						|
	for prio in {0..7}; do
 | 
						|
		__test_defprio $prio $prio
 | 
						|
	done
 | 
						|
 | 
						|
	defprio_install $swp1 3
 | 
						|
	__test_defprio 0 3
 | 
						|
	__test_defprio 1 3
 | 
						|
	__test_defprio 2 3
 | 
						|
	__test_defprio 4 4
 | 
						|
	__test_defprio 5 5
 | 
						|
	__test_defprio 6 6
 | 
						|
	__test_defprio 7 7
 | 
						|
	defprio_uninstall $swp1 3
 | 
						|
}
 | 
						|
 | 
						|
trap cleanup EXIT
 | 
						|
 | 
						|
setup_prepare
 | 
						|
setup_wait
 | 
						|
 | 
						|
tests_run
 | 
						|
 | 
						|
exit $EXIT_STATUS
 |