xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun
4*4882a593SmuzhiyunALL_TESTS="
5*4882a593Smuzhiyun	port_pool_test
6*4882a593Smuzhiyun	port_tc_ip_test
7*4882a593Smuzhiyun	port_tc_arp_test
8*4882a593Smuzhiyun"
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunNUM_NETIFS=2
11*4882a593Smuzhiyunsource ../../../net/forwarding/lib.sh
12*4882a593Smuzhiyunsource ../../../net/forwarding/devlink_lib.sh
13*4882a593Smuzhiyunsource mlxsw_lib.sh
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunSB_POOL_ING=0
16*4882a593SmuzhiyunSB_POOL_EGR_CPU=10
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunSB_ITC_CPU_IP=2
19*4882a593SmuzhiyunSB_ITC_CPU_ARP=2
20*4882a593SmuzhiyunSB_ITC=0
21*4882a593Smuzhiyun
22*4882a593Smuzhiyunh1_create()
23*4882a593Smuzhiyun{
24*4882a593Smuzhiyun	simple_if_init $h1 192.0.1.1/24
25*4882a593Smuzhiyun}
26*4882a593Smuzhiyun
27*4882a593Smuzhiyunh1_destroy()
28*4882a593Smuzhiyun{
29*4882a593Smuzhiyun	simple_if_fini $h1 192.0.1.1/24
30*4882a593Smuzhiyun}
31*4882a593Smuzhiyun
32*4882a593Smuzhiyunh2_create()
33*4882a593Smuzhiyun{
34*4882a593Smuzhiyun	simple_if_init $h2 192.0.1.2/24
35*4882a593Smuzhiyun}
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunh2_destroy()
38*4882a593Smuzhiyun{
39*4882a593Smuzhiyun	simple_if_fini $h2 192.0.1.2/24
40*4882a593Smuzhiyun}
41*4882a593Smuzhiyun
42*4882a593Smuzhiyunsb_occ_pool_check()
43*4882a593Smuzhiyun{
44*4882a593Smuzhiyun	local dl_port=$1; shift
45*4882a593Smuzhiyun	local pool=$1; shift
46*4882a593Smuzhiyun	local exp_max_occ=$1
47*4882a593Smuzhiyun	local max_occ
48*4882a593Smuzhiyun	local err=0
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun	max_occ=$(devlink sb -j occupancy show $dl_port \
51*4882a593Smuzhiyun		  | jq -e ".[][][\"pool\"][\"$pool\"][\"max\"]")
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun	if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
54*4882a593Smuzhiyun		err=1
55*4882a593Smuzhiyun	fi
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun	echo $max_occ
58*4882a593Smuzhiyun	return $err
59*4882a593Smuzhiyun}
60*4882a593Smuzhiyun
61*4882a593Smuzhiyunsb_occ_itc_check()
62*4882a593Smuzhiyun{
63*4882a593Smuzhiyun	local dl_port=$1; shift
64*4882a593Smuzhiyun	local itc=$1; shift
65*4882a593Smuzhiyun	local exp_max_occ=$1
66*4882a593Smuzhiyun	local max_occ
67*4882a593Smuzhiyun	local err=0
68*4882a593Smuzhiyun
69*4882a593Smuzhiyun	max_occ=$(devlink sb -j occupancy show $dl_port \
70*4882a593Smuzhiyun		  | jq -e ".[][][\"itc\"][\"$itc\"][\"max\"]")
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun	if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
73*4882a593Smuzhiyun		err=1
74*4882a593Smuzhiyun	fi
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun	echo $max_occ
77*4882a593Smuzhiyun	return $err
78*4882a593Smuzhiyun}
79*4882a593Smuzhiyun
80*4882a593Smuzhiyunsb_occ_etc_check()
81*4882a593Smuzhiyun{
82*4882a593Smuzhiyun	local dl_port=$1; shift
83*4882a593Smuzhiyun	local etc=$1; shift
84*4882a593Smuzhiyun	local exp_max_occ=$1; shift
85*4882a593Smuzhiyun	local max_occ
86*4882a593Smuzhiyun	local err=0
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun	max_occ=$(devlink sb -j occupancy show $dl_port \
89*4882a593Smuzhiyun		  | jq -e ".[][][\"etc\"][\"$etc\"][\"max\"]")
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun	if [[ "$max_occ" -ne "$exp_max_occ" ]]; then
92*4882a593Smuzhiyun		err=1
93*4882a593Smuzhiyun	fi
94*4882a593Smuzhiyun
95*4882a593Smuzhiyun	echo $max_occ
96*4882a593Smuzhiyun	return $err
97*4882a593Smuzhiyun}
98*4882a593Smuzhiyun
99*4882a593Smuzhiyunport_pool_test()
100*4882a593Smuzhiyun{
101*4882a593Smuzhiyun	local exp_max_occ=288
102*4882a593Smuzhiyun	local max_occ
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun	devlink sb occupancy clearmax $DEVLINK_DEV
105*4882a593Smuzhiyun
106*4882a593Smuzhiyun	$MZ $h1 -c 1 -p 160 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
107*4882a593Smuzhiyun		-t ip -q
108*4882a593Smuzhiyun
109*4882a593Smuzhiyun	devlink sb occupancy snapshot $DEVLINK_DEV
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun	RET=0
112*4882a593Smuzhiyun	max_occ=$(sb_occ_pool_check $dl_port1 $SB_POOL_ING $exp_max_occ)
113*4882a593Smuzhiyun	check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
114*4882a593Smuzhiyun	log_test "physical port's($h1) ingress pool"
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun	RET=0
117*4882a593Smuzhiyun	max_occ=$(sb_occ_pool_check $dl_port2 $SB_POOL_ING $exp_max_occ)
118*4882a593Smuzhiyun	check_err $? "Expected iPool($SB_POOL_ING) max occupancy to be $exp_max_occ, but got $max_occ"
119*4882a593Smuzhiyun	log_test "physical port's($h2) ingress pool"
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun	RET=0
122*4882a593Smuzhiyun	max_occ=$(sb_occ_pool_check $cpu_dl_port $SB_POOL_EGR_CPU $exp_max_occ)
123*4882a593Smuzhiyun	check_err $? "Expected ePool($SB_POOL_EGR_CPU) max occupancy to be $exp_max_occ, but got $max_occ"
124*4882a593Smuzhiyun	log_test "CPU port's egress pool"
125*4882a593Smuzhiyun}
126*4882a593Smuzhiyun
127*4882a593Smuzhiyunport_tc_ip_test()
128*4882a593Smuzhiyun{
129*4882a593Smuzhiyun	local exp_max_occ=288
130*4882a593Smuzhiyun	local max_occ
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun	devlink sb occupancy clearmax $DEVLINK_DEV
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun	$MZ $h1 -c 1 -p 160 -a $h1mac -b $h2mac -A 192.0.1.1 -B 192.0.1.2 \
135*4882a593Smuzhiyun		-t ip -q
136*4882a593Smuzhiyun
137*4882a593Smuzhiyun	devlink sb occupancy snapshot $DEVLINK_DEV
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun	RET=0
140*4882a593Smuzhiyun	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
141*4882a593Smuzhiyun	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
142*4882a593Smuzhiyun	log_test "physical port's($h1) ingress TC - IP packet"
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun	RET=0
145*4882a593Smuzhiyun	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
146*4882a593Smuzhiyun	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
147*4882a593Smuzhiyun	log_test "physical port's($h2) ingress TC - IP packet"
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun	RET=0
150*4882a593Smuzhiyun	max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_IP $exp_max_occ)
151*4882a593Smuzhiyun	check_err $? "Expected egress TC($SB_ITC_CPU_IP) max occupancy to be $exp_max_occ, but got $max_occ"
152*4882a593Smuzhiyun	log_test "CPU port's egress TC - IP packet"
153*4882a593Smuzhiyun}
154*4882a593Smuzhiyun
155*4882a593Smuzhiyunport_tc_arp_test()
156*4882a593Smuzhiyun{
157*4882a593Smuzhiyun	local exp_max_occ=96
158*4882a593Smuzhiyun	local max_occ
159*4882a593Smuzhiyun
160*4882a593Smuzhiyun	if [[ $MLXSW_CHIP != "mlxsw_spectrum" ]]; then
161*4882a593Smuzhiyun		exp_max_occ=144
162*4882a593Smuzhiyun	fi
163*4882a593Smuzhiyun
164*4882a593Smuzhiyun	devlink sb occupancy clearmax $DEVLINK_DEV
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun	$MZ $h1 -c 1 -p 160 -a $h1mac -A 192.0.1.1 -t arp -q
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun	devlink sb occupancy snapshot $DEVLINK_DEV
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun	RET=0
171*4882a593Smuzhiyun	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
172*4882a593Smuzhiyun	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
173*4882a593Smuzhiyun	log_test "physical port's($h1) ingress TC - ARP packet"
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun	RET=0
176*4882a593Smuzhiyun	max_occ=$(sb_occ_itc_check $dl_port2 $SB_ITC $exp_max_occ)
177*4882a593Smuzhiyun	check_err $? "Expected ingress TC($SB_ITC) max occupancy to be $exp_max_occ, but got $max_occ"
178*4882a593Smuzhiyun	log_test "physical port's($h2) ingress TC - ARP packet"
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun	RET=0
181*4882a593Smuzhiyun	max_occ=$(sb_occ_etc_check $cpu_dl_port $SB_ITC_CPU_ARP $exp_max_occ)
182*4882a593Smuzhiyun	check_err $? "Expected egress TC($SB_ITC_IP2ME) max occupancy to be $exp_max_occ, but got $max_occ"
183*4882a593Smuzhiyun	log_test "CPU port's egress TC - ARP packet"
184*4882a593Smuzhiyun}
185*4882a593Smuzhiyun
186*4882a593Smuzhiyunsetup_prepare()
187*4882a593Smuzhiyun{
188*4882a593Smuzhiyun	h1=${NETIFS[p1]}
189*4882a593Smuzhiyun	h2=${NETIFS[p2]}
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun	h1mac=$(mac_get $h1)
192*4882a593Smuzhiyun	h2mac=$(mac_get $h2)
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun	dl_port1=$(devlink_port_by_netdev $h1)
195*4882a593Smuzhiyun	dl_port2=$(devlink_port_by_netdev $h2)
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun	cpu_dl_port=$(devlink_cpu_port_get)
198*4882a593Smuzhiyun
199*4882a593Smuzhiyun	vrf_prepare
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun	h1_create
202*4882a593Smuzhiyun	h2_create
203*4882a593Smuzhiyun}
204*4882a593Smuzhiyun
205*4882a593Smuzhiyuncleanup()
206*4882a593Smuzhiyun{
207*4882a593Smuzhiyun	pre_cleanup
208*4882a593Smuzhiyun
209*4882a593Smuzhiyun	h2_destroy
210*4882a593Smuzhiyun	h1_destroy
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun	vrf_cleanup
213*4882a593Smuzhiyun}
214*4882a593Smuzhiyun
215*4882a593Smuzhiyuntrap cleanup EXIT
216*4882a593Smuzhiyun
217*4882a593Smuzhiyunsetup_prepare
218*4882a593Smuzhiyunsetup_wait
219*4882a593Smuzhiyun
220*4882a593Smuzhiyuntests_run
221*4882a593Smuzhiyun
222*4882a593Smuzhiyunexit $EXIT_STATUS
223