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} 85 86__mlnx_qos() 87{ 88 local err 89 90 mlnx_qos "$@" 2>/dev/null 91 err=$? 92 93 if ((err)); then 94 echo "Error ($err) in mlnx_qos $@" >/dev/stderr 95 fi 96 97 return $err 98} 99