162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci
462306a36Sopenharmony_ciALL_TESTS="
562306a36Sopenharmony_ci	port_pool_test
662306a36Sopenharmony_ci	port_tc_ip_test
762306a36Sopenharmony_ci	port_tc_arp_test
862306a36Sopenharmony_ci"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciNUM_NETIFS=2
1162306a36Sopenharmony_cisource ../../../net/forwarding/lib.sh
1262306a36Sopenharmony_cisource ../../../net/forwarding/devlink_lib.sh
1362306a36Sopenharmony_cisource mlxsw_lib.sh
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciSB_POOL_ING=0
1662306a36Sopenharmony_ciSB_POOL_EGR_CPU=10
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ciSB_ITC_CPU_IP=2
1962306a36Sopenharmony_ciSB_ITC_CPU_ARP=2
2062306a36Sopenharmony_ciSB_ITC=0
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cih1_create()
2362306a36Sopenharmony_ci{
2462306a36Sopenharmony_ci	simple_if_init $h1 192.0.1.1/24
2562306a36Sopenharmony_ci}
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cih1_destroy()
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	simple_if_fini $h1 192.0.1.1/24
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cih2_create()
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci	simple_if_init $h2 192.0.1.2/24
3562306a36Sopenharmony_ci}
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cih2_destroy()
3862306a36Sopenharmony_ci{
3962306a36Sopenharmony_ci	simple_if_fini $h2 192.0.1.2/24
4062306a36Sopenharmony_ci}
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cisb_occ_pool_check()
4362306a36Sopenharmony_ci{
4462306a36Sopenharmony_ci	local dl_port=$1; shift
4562306a36Sopenharmony_ci	local pool=$1; shift
4662306a36Sopenharmony_ci	local exp_max_occ=$1
4762306a36Sopenharmony_ci	local max_occ
4862306a36Sopenharmony_ci	local err=0
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci	max_occ=$(devlink sb -j occupancy show $dl_port \
5162306a36Sopenharmony_ci		  | jq -e ".[][][\"pool\"][\"$pool\"][\"max\"]")
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci	if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
5462306a36Sopenharmony_ci		err=1
5562306a36Sopenharmony_ci	fi
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	echo $max_occ
5862306a36Sopenharmony_ci	return $err
5962306a36Sopenharmony_ci}
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cisb_occ_itc_check()
6262306a36Sopenharmony_ci{
6362306a36Sopenharmony_ci	local dl_port=$1; shift
6462306a36Sopenharmony_ci	local itc=$1; shift
6562306a36Sopenharmony_ci	local exp_max_occ=$1
6662306a36Sopenharmony_ci	local max_occ
6762306a36Sopenharmony_ci	local err=0
6862306a36Sopenharmony_ci
6962306a36Sopenharmony_ci	max_occ=$(devlink sb -j occupancy show $dl_port \
7062306a36Sopenharmony_ci		  | jq -e ".[][][\"itc\"][\"$itc\"][\"max\"]")
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
7362306a36Sopenharmony_ci		err=1
7462306a36Sopenharmony_ci	fi
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci	echo $max_occ
7762306a36Sopenharmony_ci	return $err
7862306a36Sopenharmony_ci}
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_cisb_occ_etc_check()
8162306a36Sopenharmony_ci{
8262306a36Sopenharmony_ci	local dl_port=$1; shift
8362306a36Sopenharmony_ci	local etc=$1; shift
8462306a36Sopenharmony_ci	local exp_max_occ=$1; shift
8562306a36Sopenharmony_ci	local max_occ
8662306a36Sopenharmony_ci	local err=0
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci	max_occ=$(devlink sb -j occupancy show $dl_port \
8962306a36Sopenharmony_ci		  | jq -e ".[][][\"etc\"][\"$etc\"][\"max\"]")
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci	if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
9262306a36Sopenharmony_ci		err=1
9362306a36Sopenharmony_ci	fi
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci	echo $max_occ
9662306a36Sopenharmony_ci	return $err
9762306a36Sopenharmony_ci}
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ciport_pool_test()
10062306a36Sopenharmony_ci{
10162306a36Sopenharmony_ci	local exp_max_occ=$(devlink_cell_size_get)
10262306a36Sopenharmony_ci	local max_occ
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci	devlink sb occupancy clearmax $DEVLINK_DEV
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci	$MZ $h1 -c 1 -p 10 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
10762306a36Sopenharmony_ci		-t ip -q
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	devlink sb occupancy snapshot $DEVLINK_DEV
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci	RET=0
11262306a36Sopenharmony_ci	max_occ=$(sb_occ_pool_check $dl_port1 $SB_POOL_ING $exp_max_occ)
11362306a36Sopenharmony_ci	check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
11462306a36Sopenharmony_ci	log_test "physical port's($h1) ingress pool"
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci	RET=0
11762306a36Sopenharmony_ci	max_occ=$(sb_occ_pool_check $dl_port2 $SB_POOL_ING $exp_max_occ)
11862306a36Sopenharmony_ci	check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
11962306a36Sopenharmony_ci	log_test "physical port's($h2) ingress pool"
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci	RET=0
12262306a36Sopenharmony_ci	max_occ=$(sb_occ_pool_check $cpu_dl_port $SB_POOL_EGR_CPU $exp_max_occ)
12362306a36Sopenharmony_ci	check_err $? "Expected ePool($SB_POOL_EGR_CPU) max occupancy to be $exp_max_occ, but got $max_occ"
12462306a36Sopenharmony_ci	log_test "CPU port's egress pool"
12562306a36Sopenharmony_ci}
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciport_tc_ip_test()
12862306a36Sopenharmony_ci{
12962306a36Sopenharmony_ci	local exp_max_occ=$(devlink_cell_size_get)
13062306a36Sopenharmony_ci	local max_occ
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci	devlink sb occupancy clearmax $DEVLINK_DEV
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci	$MZ $h1 -c 1 -p 10 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
13562306a36Sopenharmony_ci		-t ip -q
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci	devlink sb occupancy snapshot $DEVLINK_DEV
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci	RET=0
14062306a36Sopenharmony_ci	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
14162306a36Sopenharmony_ci	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
14262306a36Sopenharmony_ci	log_test "physical port's($h1) ingress TC - IP packet"
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci	RET=0
14562306a36Sopenharmony_ci	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
14662306a36Sopenharmony_ci	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
14762306a36Sopenharmony_ci	log_test "physical port's($h2) ingress TC - IP packet"
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci	RET=0
15062306a36Sopenharmony_ci	max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_IP $exp_max_occ)
15162306a36Sopenharmony_ci	check_err $? "Expected egress TC($SB_ITC_CPU_IP) max occupancy to be $exp_max_occ, but got $max_occ"
15262306a36Sopenharmony_ci	log_test "CPU port's egress TC - IP packet"
15362306a36Sopenharmony_ci}
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ciport_tc_arp_test()
15662306a36Sopenharmony_ci{
15762306a36Sopenharmony_ci	local exp_max_occ=$(devlink_cell_size_get)
15862306a36Sopenharmony_ci	local max_occ
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_ci	devlink sb occupancy clearmax $DEVLINK_DEV
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ci	$MZ $h1 -c 1 -p 10 -a $h1mac -A 192.0.1.1 -t arp -q
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci	devlink sb occupancy snapshot $DEVLINK_DEV
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci	RET=0
16762306a36Sopenharmony_ci	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
16862306a36Sopenharmony_ci	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
16962306a36Sopenharmony_ci	log_test "physical port's($h1) ingress TC - ARP packet"
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci	RET=0
17262306a36Sopenharmony_ci	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
17362306a36Sopenharmony_ci	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
17462306a36Sopenharmony_ci	log_test "physical port's($h2) ingress TC - ARP packet"
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci	RET=0
17762306a36Sopenharmony_ci	max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_ARP $exp_max_occ)
17862306a36Sopenharmony_ci	check_err $? "Expected egress TC($SB_ITC_IP2ME) max occupancy to be $exp_max_occ, but got $max_occ"
17962306a36Sopenharmony_ci	log_test "CPU port's egress TC - ARP packet"
18062306a36Sopenharmony_ci}
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_cisetup_prepare()
18362306a36Sopenharmony_ci{
18462306a36Sopenharmony_ci	h1=${NETIFS[p1]}
18562306a36Sopenharmony_ci	h2=${NETIFS[p2]}
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci	h1mac=$(mac_get $h1)
18862306a36Sopenharmony_ci	h2mac=$(mac_get $h2)
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci	dl_port1=$(devlink_port_by_netdev $h1)
19162306a36Sopenharmony_ci	dl_port2=$(devlink_port_by_netdev $h2)
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_ci	cpu_dl_port=$(devlink_cpu_port_get)
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_ci	vrf_prepare
19662306a36Sopenharmony_ci
19762306a36Sopenharmony_ci	h1_create
19862306a36Sopenharmony_ci	h2_create
19962306a36Sopenharmony_ci}
20062306a36Sopenharmony_ci
20162306a36Sopenharmony_cicleanup()
20262306a36Sopenharmony_ci{
20362306a36Sopenharmony_ci	pre_cleanup
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci	h2_destroy
20662306a36Sopenharmony_ci	h1_destroy
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci	vrf_cleanup
20962306a36Sopenharmony_ci}
21062306a36Sopenharmony_ci
21162306a36Sopenharmony_citrap cleanup EXIT
21262306a36Sopenharmony_ci
21362306a36Sopenharmony_cisetup_prepare
21462306a36Sopenharmony_cisetup_wait
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_citests_run
21762306a36Sopenharmony_ci
21862306a36Sopenharmony_ciexit $EXIT_STATUS
219