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