WIP FPC-III support
[linux/fpc-iii.git] / tools / testing / selftests / drivers / net / mlxsw / qos_lib.sh
blob0bf76f13c0305f0d8119c3ccc7f52f778ba502b9
1 # SPDX-License-Identifier: GPL-2.0
3 check_rate()
5 local rate=$1; shift
6 local min=$1; shift
7 local what=$1; shift
9 if ((rate > min)); then
10 return 0
13 echo "$what $(humanize $ir) < $(humanize $min)" > /dev/stderr
14 return 1
17 measure_rate()
19 local sw_in=$1; shift # Where the traffic ingresses the switch
20 local host_in=$1; shift # Where it ingresses another host
21 local counter=$1; shift # Counter to use for measurement
22 local what=$1; shift
24 local interval=10
25 local i
26 local ret=0
28 # Dips in performance might cause momentary ingress rate to drop below
29 # 1Gbps. That wouldn't saturate egress and MC would thus get through,
30 # seemingly winning bandwidth on account of UC. Demand at least 2Gbps
31 # average ingress rate to somewhat mitigate this.
32 local min_ingress=2147483648
34 for i in {5..0}; do
35 local t0=$(ethtool_stats_get $host_in $counter)
36 local u0=$(ethtool_stats_get $sw_in $counter)
37 sleep $interval
38 local t1=$(ethtool_stats_get $host_in $counter)
39 local u1=$(ethtool_stats_get $sw_in $counter)
41 local ir=$(rate $u0 $u1 $interval)
42 local er=$(rate $t0 $t1 $interval)
44 if check_rate $ir $min_ingress "$what ingress rate"; then
45 break
48 # Fail the test if we can't get the throughput.
49 if ((i == 0)); then
50 ret=1
52 done
54 echo $ir $er
55 return $ret
58 bail_on_lldpad()
60 if systemctl is-active --quiet lldpad; then
62 cat >/dev/stderr <<-EOF
63 WARNING: lldpad is running
65 lldpad will likely configure DCB, and this test will
66 configure Qdiscs. mlxsw does not support both at the
67 same time, one of them is arbitrarily going to overwrite
68 the other. That will cause spurious failures (or,
69 unlikely, passes) of this test.
70 EOF
72 if [[ -z $ALLOW_LLDPAD ]]; then
73 cat >/dev/stderr <<-EOF
75 If you want to run the test anyway, please set
76 an environment variable ALLOW_LLDPAD to a
77 non-empty string.
78 EOF
79 exit 1
80 else
81 return
86 __mlnx_qos()
88 local err
90 mlnx_qos "$@" 2>/dev/null
91 err=$?
93 if ((err)); then
94 echo "Error ($err) in mlnx_qos $@" >/dev/stderr
97 return $err