1*fbb7a1f8SAntonio Cardace#!/bin/bash
2*fbb7a1f8SAntonio Cardace# SPDX-License-Identifier: GPL-2.0-only
3*fbb7a1f8SAntonio Cardace
4*fbb7a1f8SAntonio Cardacesource ethtool-common.sh
5*fbb7a1f8SAntonio Cardace
6*fbb7a1f8SAntonio Cardacefunction get_value {
7*fbb7a1f8SAntonio Cardace    local query="${SETTINGS_MAP[$1]}"
8*fbb7a1f8SAntonio Cardace
9*fbb7a1f8SAntonio Cardace    echo $(ethtool -g $NSIM_NETDEV | \
10*fbb7a1f8SAntonio Cardace        tail -n +$CURR_SETT_LINE | \
11*fbb7a1f8SAntonio Cardace        awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[\t ]/, "", $2); print $2}')
12*fbb7a1f8SAntonio Cardace}
13*fbb7a1f8SAntonio Cardace
14*fbb7a1f8SAntonio Cardacefunction update_current_settings {
15*fbb7a1f8SAntonio Cardace    for key in ${!SETTINGS_MAP[@]}; do
16*fbb7a1f8SAntonio Cardace        CURRENT_SETTINGS[$key]=$(get_value $key)
17*fbb7a1f8SAntonio Cardace    done
18*fbb7a1f8SAntonio Cardace    echo ${CURRENT_SETTINGS[@]}
19*fbb7a1f8SAntonio Cardace}
20*fbb7a1f8SAntonio Cardace
21*fbb7a1f8SAntonio Cardaceif ! ethtool -h | grep -q set-ring >/dev/null; then
22*fbb7a1f8SAntonio Cardace    echo "SKIP: No --set-ring support in ethtool"
23*fbb7a1f8SAntonio Cardace    exit 4
24*fbb7a1f8SAntonio Cardacefi
25*fbb7a1f8SAntonio Cardace
26*fbb7a1f8SAntonio CardaceNSIM_NETDEV=$(make_netdev)
27*fbb7a1f8SAntonio Cardace
28*fbb7a1f8SAntonio Cardaceset -o pipefail
29*fbb7a1f8SAntonio Cardace
30*fbb7a1f8SAntonio Cardacedeclare -A SETTINGS_MAP=(
31*fbb7a1f8SAntonio Cardace    ["rx"]="RX"
32*fbb7a1f8SAntonio Cardace    ["rx-mini"]="RX Mini"
33*fbb7a1f8SAntonio Cardace    ["rx-jumbo"]="RX Jumbo"
34*fbb7a1f8SAntonio Cardace    ["tx"]="TX"
35*fbb7a1f8SAntonio Cardace)
36*fbb7a1f8SAntonio Cardace
37*fbb7a1f8SAntonio Cardacedeclare -A EXPECTED_SETTINGS=(
38*fbb7a1f8SAntonio Cardace    ["rx"]=""
39*fbb7a1f8SAntonio Cardace    ["rx-mini"]=""
40*fbb7a1f8SAntonio Cardace    ["rx-jumbo"]=""
41*fbb7a1f8SAntonio Cardace    ["tx"]=""
42*fbb7a1f8SAntonio Cardace)
43*fbb7a1f8SAntonio Cardace
44*fbb7a1f8SAntonio Cardacedeclare -A CURRENT_SETTINGS=(
45*fbb7a1f8SAntonio Cardace    ["rx"]=""
46*fbb7a1f8SAntonio Cardace    ["rx-mini"]=""
47*fbb7a1f8SAntonio Cardace    ["rx-jumbo"]=""
48*fbb7a1f8SAntonio Cardace    ["tx"]=""
49*fbb7a1f8SAntonio Cardace)
50*fbb7a1f8SAntonio Cardace
51*fbb7a1f8SAntonio CardaceMAX_VALUE=$((RANDOM % $((2**32-1))))
52*fbb7a1f8SAntonio CardaceRING_MAX_LIST=$(ls $NSIM_DEV_DFS/ethtool/ring/)
53*fbb7a1f8SAntonio Cardace
54*fbb7a1f8SAntonio Cardacefor ring_max_entry in $RING_MAX_LIST; do
55*fbb7a1f8SAntonio Cardace    echo $MAX_VALUE > $NSIM_DEV_DFS/ethtool/ring/$ring_max_entry
56*fbb7a1f8SAntonio Cardacedone
57*fbb7a1f8SAntonio Cardace
58*fbb7a1f8SAntonio CardaceCURR_SETT_LINE=$(ethtool -g $NSIM_NETDEV | grep -i -m1 -n 'Current hardware settings' | cut -f1 -d:)
59*fbb7a1f8SAntonio Cardace
60*fbb7a1f8SAntonio Cardace# populate the expected settings map
61*fbb7a1f8SAntonio Cardacefor key in ${!SETTINGS_MAP[@]}; do
62*fbb7a1f8SAntonio Cardace    EXPECTED_SETTINGS[$key]=$(get_value $key)
63*fbb7a1f8SAntonio Cardacedone
64*fbb7a1f8SAntonio Cardace
65*fbb7a1f8SAntonio Cardace# test
66*fbb7a1f8SAntonio Cardacefor key in ${!SETTINGS_MAP[@]}; do
67*fbb7a1f8SAntonio Cardace    value=$((RANDOM % $MAX_VALUE))
68*fbb7a1f8SAntonio Cardace
69*fbb7a1f8SAntonio Cardace    ethtool -G $NSIM_NETDEV "$key" "$value"
70*fbb7a1f8SAntonio Cardace
71*fbb7a1f8SAntonio Cardace    EXPECTED_SETTINGS[$key]="$value"
72*fbb7a1f8SAntonio Cardace    expected=${EXPECTED_SETTINGS[@]}
73*fbb7a1f8SAntonio Cardace    current=$(update_current_settings)
74*fbb7a1f8SAntonio Cardace
75*fbb7a1f8SAntonio Cardace    check $? "$current" "$expected"
76*fbb7a1f8SAntonio Cardace    set +x
77*fbb7a1f8SAntonio Cardacedone
78*fbb7a1f8SAntonio Cardace
79*fbb7a1f8SAntonio Cardaceif [ $num_errors -eq 0 ]; then
80*fbb7a1f8SAntonio Cardace    echo "PASSED all $((num_passes)) checks"
81*fbb7a1f8SAntonio Cardace    exit 0
82*fbb7a1f8SAntonio Cardaceelse
83*fbb7a1f8SAntonio Cardace    echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
84*fbb7a1f8SAntonio Cardace    exit 1
85*fbb7a1f8SAntonio Cardacefi
86