mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-21 06:50:25 +00:00

mlxsw selftests often invoke a bail_on_lldpad() helper to make sure LLDPAD is not running, to prevent conflicts between the QoS configuration applied through TC or DCB command line tool, and the DCB configuration that LLDPAD might apply. This helper might be useful to others. Move the function to lib.sh, and parameterize to make reusable in other contexts. Signed-off-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Danielle Ratson <danieller@nvidia.com> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
56 lines
1.3 KiB
Bash
56 lines
1.3 KiB
Bash
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
check_rate()
|
|
{
|
|
local rate=$1; shift
|
|
local min=$1; shift
|
|
local what=$1; shift
|
|
|
|
if ((rate > min)); then
|
|
return 0
|
|
fi
|
|
|
|
echo "$what $(humanize $ir) < $(humanize $min)" > /dev/stderr
|
|
return 1
|
|
}
|
|
|
|
measure_rate()
|
|
{
|
|
local sw_in=$1; shift # Where the traffic ingresses the switch
|
|
local host_in=$1; shift # Where it ingresses another host
|
|
local counter=$1; shift # Counter to use for measurement
|
|
local what=$1; shift
|
|
|
|
local interval=10
|
|
local i
|
|
local ret=0
|
|
|
|
# Dips in performance might cause momentary ingress rate to drop below
|
|
# 1Gbps. That wouldn't saturate egress and MC would thus get through,
|
|
# seemingly winning bandwidth on account of UC. Demand at least 2Gbps
|
|
# average ingress rate to somewhat mitigate this.
|
|
local min_ingress=2147483648
|
|
|
|
for i in {5..0}; do
|
|
local t0=$(ethtool_stats_get $host_in $counter)
|
|
local u0=$(ethtool_stats_get $sw_in $counter)
|
|
sleep $interval
|
|
local t1=$(ethtool_stats_get $host_in $counter)
|
|
local u1=$(ethtool_stats_get $sw_in $counter)
|
|
|
|
local ir=$(rate $u0 $u1 $interval)
|
|
local er=$(rate $t0 $t1 $interval)
|
|
|
|
if check_rate $ir $min_ingress "$what ingress rate"; then
|
|
break
|
|
fi
|
|
|
|
# Fail the test if we can't get the throughput.
|
|
if ((i == 0)); then
|
|
ret=1
|
|
fi
|
|
done
|
|
|
|
echo $ir $er
|
|
return $ret
|
|
}
|