162306a36Sopenharmony_ci#!/bin/bash 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0-only 362306a36Sopenharmony_ci 462306a36Sopenharmony_cisource ethtool-common.sh 562306a36Sopenharmony_ci 662306a36Sopenharmony_cifunction get_value { 762306a36Sopenharmony_ci local query="${SETTINGS_MAP[$1]}" 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci echo $(ethtool -c $NSIM_NETDEV | \ 1062306a36Sopenharmony_ci awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[ \t]/, "", $2); print $2}') 1162306a36Sopenharmony_ci} 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cifunction update_current_settings { 1462306a36Sopenharmony_ci for key in ${!SETTINGS_MAP[@]}; do 1562306a36Sopenharmony_ci CURRENT_SETTINGS[$key]=$(get_value $key) 1662306a36Sopenharmony_ci done 1762306a36Sopenharmony_ci echo ${CURRENT_SETTINGS[@]} 1862306a36Sopenharmony_ci} 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciif ! ethtool -h | grep -q coalesce; then 2162306a36Sopenharmony_ci echo "SKIP: No --coalesce support in ethtool" 2262306a36Sopenharmony_ci exit 4 2362306a36Sopenharmony_cifi 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ciNSIM_NETDEV=$(make_netdev) 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciset -o pipefail 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cideclare -A SETTINGS_MAP=( 3062306a36Sopenharmony_ci ["rx-frames-low"]="rx-frame-low" 3162306a36Sopenharmony_ci ["tx-frames-low"]="tx-frame-low" 3262306a36Sopenharmony_ci ["rx-frames-high"]="rx-frame-high" 3362306a36Sopenharmony_ci ["tx-frames-high"]="tx-frame-high" 3462306a36Sopenharmony_ci ["rx-usecs"]="rx-usecs" 3562306a36Sopenharmony_ci ["rx-frames"]="rx-frames" 3662306a36Sopenharmony_ci ["rx-usecs-irq"]="rx-usecs-irq" 3762306a36Sopenharmony_ci ["rx-frames-irq"]="rx-frames-irq" 3862306a36Sopenharmony_ci ["tx-usecs"]="tx-usecs" 3962306a36Sopenharmony_ci ["tx-frames"]="tx-frames" 4062306a36Sopenharmony_ci ["tx-usecs-irq"]="tx-usecs-irq" 4162306a36Sopenharmony_ci ["tx-frames-irq"]="tx-frames-irq" 4262306a36Sopenharmony_ci ["stats-block-usecs"]="stats-block-usecs" 4362306a36Sopenharmony_ci ["pkt-rate-low"]="pkt-rate-low" 4462306a36Sopenharmony_ci ["rx-usecs-low"]="rx-usecs-low" 4562306a36Sopenharmony_ci ["tx-usecs-low"]="tx-usecs-low" 4662306a36Sopenharmony_ci ["pkt-rate-high"]="pkt-rate-high" 4762306a36Sopenharmony_ci ["rx-usecs-high"]="rx-usecs-high" 4862306a36Sopenharmony_ci ["tx-usecs-high"]="tx-usecs-high" 4962306a36Sopenharmony_ci ["sample-interval"]="sample-interval" 5062306a36Sopenharmony_ci) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cideclare -A CURRENT_SETTINGS=( 5362306a36Sopenharmony_ci ["rx-frames-low"]="" 5462306a36Sopenharmony_ci ["tx-frames-low"]="" 5562306a36Sopenharmony_ci ["rx-frames-high"]="" 5662306a36Sopenharmony_ci ["tx-frames-high"]="" 5762306a36Sopenharmony_ci ["rx-usecs"]="" 5862306a36Sopenharmony_ci ["rx-frames"]="" 5962306a36Sopenharmony_ci ["rx-usecs-irq"]="" 6062306a36Sopenharmony_ci ["rx-frames-irq"]="" 6162306a36Sopenharmony_ci ["tx-usecs"]="" 6262306a36Sopenharmony_ci ["tx-frames"]="" 6362306a36Sopenharmony_ci ["tx-usecs-irq"]="" 6462306a36Sopenharmony_ci ["tx-frames-irq"]="" 6562306a36Sopenharmony_ci ["stats-block-usecs"]="" 6662306a36Sopenharmony_ci ["pkt-rate-low"]="" 6762306a36Sopenharmony_ci ["rx-usecs-low"]="" 6862306a36Sopenharmony_ci ["tx-usecs-low"]="" 6962306a36Sopenharmony_ci ["pkt-rate-high"]="" 7062306a36Sopenharmony_ci ["rx-usecs-high"]="" 7162306a36Sopenharmony_ci ["tx-usecs-high"]="" 7262306a36Sopenharmony_ci ["sample-interval"]="" 7362306a36Sopenharmony_ci) 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cideclare -A EXPECTED_SETTINGS=( 7662306a36Sopenharmony_ci ["rx-frames-low"]="" 7762306a36Sopenharmony_ci ["tx-frames-low"]="" 7862306a36Sopenharmony_ci ["rx-frames-high"]="" 7962306a36Sopenharmony_ci ["tx-frames-high"]="" 8062306a36Sopenharmony_ci ["rx-usecs"]="" 8162306a36Sopenharmony_ci ["rx-frames"]="" 8262306a36Sopenharmony_ci ["rx-usecs-irq"]="" 8362306a36Sopenharmony_ci ["rx-frames-irq"]="" 8462306a36Sopenharmony_ci ["tx-usecs"]="" 8562306a36Sopenharmony_ci ["tx-frames"]="" 8662306a36Sopenharmony_ci ["tx-usecs-irq"]="" 8762306a36Sopenharmony_ci ["tx-frames-irq"]="" 8862306a36Sopenharmony_ci ["stats-block-usecs"]="" 8962306a36Sopenharmony_ci ["pkt-rate-low"]="" 9062306a36Sopenharmony_ci ["rx-usecs-low"]="" 9162306a36Sopenharmony_ci ["tx-usecs-low"]="" 9262306a36Sopenharmony_ci ["pkt-rate-high"]="" 9362306a36Sopenharmony_ci ["rx-usecs-high"]="" 9462306a36Sopenharmony_ci ["tx-usecs-high"]="" 9562306a36Sopenharmony_ci ["sample-interval"]="" 9662306a36Sopenharmony_ci) 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci# populate the expected settings map 9962306a36Sopenharmony_cifor key in ${!SETTINGS_MAP[@]}; do 10062306a36Sopenharmony_ci EXPECTED_SETTINGS[$key]=$(get_value $key) 10162306a36Sopenharmony_cidone 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci# test 10462306a36Sopenharmony_cifor key in ${!SETTINGS_MAP[@]}; do 10562306a36Sopenharmony_ci value=$((RANDOM % $((2**32-1)))) 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci ethtool -C $NSIM_NETDEV "$key" "$value" 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci EXPECTED_SETTINGS[$key]="$value" 11062306a36Sopenharmony_ci expected=${EXPECTED_SETTINGS[@]} 11162306a36Sopenharmony_ci current=$(update_current_settings) 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci check $? "$current" "$expected" 11462306a36Sopenharmony_ci set +x 11562306a36Sopenharmony_cidone 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci# bool settings which ethtool displays on the same line 11862306a36Sopenharmony_ciethtool -C $NSIM_NETDEV adaptive-rx on 11962306a36Sopenharmony_cis=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on TX: off") 12062306a36Sopenharmony_cicheck $? "$s" "" 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ciethtool -C $NSIM_NETDEV adaptive-tx on 12362306a36Sopenharmony_cis=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on TX: on") 12462306a36Sopenharmony_cicheck $? "$s" "" 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ciif [ $num_errors -eq 0 ]; then 12762306a36Sopenharmony_ci echo "PASSED all $((num_passes)) checks" 12862306a36Sopenharmony_ci exit 0 12962306a36Sopenharmony_cielse 13062306a36Sopenharmony_ci echo "FAILED $num_errors/$((num_errors+num_passes)) checks" 13162306a36Sopenharmony_ci exit 1 13262306a36Sopenharmony_cifi 133