Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1# SPDX-License-Identifier: GPL-2.0
2
3check_rate()
4{
5 local rate=$1; shift
6 local min=$1; shift
7 local what=$1; shift
8
9 if ((rate > min)); then
10 return 0
11 fi
12
13 echo "$what $(humanize $ir) < $(humanize $min)" > /dev/stderr
14 return 1
15}
16
17measure_rate()
18{
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
23
24 local interval=10
25 local i
26 local ret=0
27
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
33
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)
40
41 local ir=$(rate $u0 $u1 $interval)
42 local er=$(rate $t0 $t1 $interval)
43
44 if check_rate $ir $min_ingress "$what ingress rate"; then
45 break
46 fi
47
48 # Fail the test if we can't get the throughput.
49 if ((i == 0)); then
50 ret=1
51 fi
52 done
53
54 echo $ir $er
55 return $ret
56}
57
58bail_on_lldpad()
59{
60 if systemctl is-active --quiet lldpad; then
61
62 cat >/dev/stderr <<-EOF
63 WARNING: lldpad is running
64
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
71
72 if [[ -z $ALLOW_LLDPAD ]]; then
73 cat >/dev/stderr <<-EOF
74
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
82 fi
83 fi
84}