Skip to content

Commit a865ad9

Browse files
Shalom Toledodavem330
authored andcommitted
selftests: mlxsw: Add shared buffer traffic test
Test the max shared buffer occupancy for port's pool and port's TC's (using different types of packets). Signed-off-by: Shalom Toledo <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4240dbd commit a865ad9

File tree

1 file changed

+222
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)