xref: /openbmc/linux/tools/testing/selftests/drivers/net/netdevsim/ethtool-coalesce.sh (revision cdd38c5f1ce4398ec58fec95904b75824daab7b5)
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 -c $NSIM_NETDEV | \
10*fbb7a1f8SAntonio Cardace        awk -F':' -v pattern="$query:" '$0 ~ pattern {gsub(/[ \t]/, "", $2); print $2}')
11*fbb7a1f8SAntonio Cardace}
12*fbb7a1f8SAntonio Cardace
13*fbb7a1f8SAntonio Cardacefunction update_current_settings {
14*fbb7a1f8SAntonio Cardace    for key in ${!SETTINGS_MAP[@]}; do
15*fbb7a1f8SAntonio Cardace        CURRENT_SETTINGS[$key]=$(get_value $key)
16*fbb7a1f8SAntonio Cardace    done
17*fbb7a1f8SAntonio Cardace    echo ${CURRENT_SETTINGS[@]}
18*fbb7a1f8SAntonio Cardace}
19*fbb7a1f8SAntonio Cardace
20*fbb7a1f8SAntonio Cardaceif ! ethtool -h | grep -q coalesce; then
21*fbb7a1f8SAntonio Cardace    echo "SKIP: No --coalesce support in ethtool"
22*fbb7a1f8SAntonio Cardace    exit 4
23*fbb7a1f8SAntonio Cardacefi
24*fbb7a1f8SAntonio Cardace
25*fbb7a1f8SAntonio CardaceNSIM_NETDEV=$(make_netdev)
26*fbb7a1f8SAntonio Cardace
27*fbb7a1f8SAntonio Cardaceset -o pipefail
28*fbb7a1f8SAntonio Cardace
29*fbb7a1f8SAntonio Cardacedeclare -A SETTINGS_MAP=(
30*fbb7a1f8SAntonio Cardace    ["rx-frames-low"]="rx-frame-low"
31*fbb7a1f8SAntonio Cardace    ["tx-frames-low"]="tx-frame-low"
32*fbb7a1f8SAntonio Cardace    ["rx-frames-high"]="rx-frame-high"
33*fbb7a1f8SAntonio Cardace    ["tx-frames-high"]="tx-frame-high"
34*fbb7a1f8SAntonio Cardace    ["rx-usecs"]="rx-usecs"
35*fbb7a1f8SAntonio Cardace    ["rx-frames"]="rx-frames"
36*fbb7a1f8SAntonio Cardace    ["rx-usecs-irq"]="rx-usecs-irq"
37*fbb7a1f8SAntonio Cardace    ["rx-frames-irq"]="rx-frames-irq"
38*fbb7a1f8SAntonio Cardace    ["tx-usecs"]="tx-usecs"
39*fbb7a1f8SAntonio Cardace    ["tx-frames"]="tx-frames"
40*fbb7a1f8SAntonio Cardace    ["tx-usecs-irq"]="tx-usecs-irq"
41*fbb7a1f8SAntonio Cardace    ["tx-frames-irq"]="tx-frames-irq"
42*fbb7a1f8SAntonio Cardace    ["stats-block-usecs"]="stats-block-usecs"
43*fbb7a1f8SAntonio Cardace    ["pkt-rate-low"]="pkt-rate-low"
44*fbb7a1f8SAntonio Cardace    ["rx-usecs-low"]="rx-usecs-low"
45*fbb7a1f8SAntonio Cardace    ["tx-usecs-low"]="tx-usecs-low"
46*fbb7a1f8SAntonio Cardace    ["pkt-rate-high"]="pkt-rate-high"
47*fbb7a1f8SAntonio Cardace    ["rx-usecs-high"]="rx-usecs-high"
48*fbb7a1f8SAntonio Cardace    ["tx-usecs-high"]="tx-usecs-high"
49*fbb7a1f8SAntonio Cardace    ["sample-interval"]="sample-interval"
50*fbb7a1f8SAntonio Cardace)
51*fbb7a1f8SAntonio Cardace
52*fbb7a1f8SAntonio Cardacedeclare -A CURRENT_SETTINGS=(
53*fbb7a1f8SAntonio Cardace    ["rx-frames-low"]=""
54*fbb7a1f8SAntonio Cardace    ["tx-frames-low"]=""
55*fbb7a1f8SAntonio Cardace    ["rx-frames-high"]=""
56*fbb7a1f8SAntonio Cardace    ["tx-frames-high"]=""
57*fbb7a1f8SAntonio Cardace    ["rx-usecs"]=""
58*fbb7a1f8SAntonio Cardace    ["rx-frames"]=""
59*fbb7a1f8SAntonio Cardace    ["rx-usecs-irq"]=""
60*fbb7a1f8SAntonio Cardace    ["rx-frames-irq"]=""
61*fbb7a1f8SAntonio Cardace    ["tx-usecs"]=""
62*fbb7a1f8SAntonio Cardace    ["tx-frames"]=""
63*fbb7a1f8SAntonio Cardace    ["tx-usecs-irq"]=""
64*fbb7a1f8SAntonio Cardace    ["tx-frames-irq"]=""
65*fbb7a1f8SAntonio Cardace    ["stats-block-usecs"]=""
66*fbb7a1f8SAntonio Cardace    ["pkt-rate-low"]=""
67*fbb7a1f8SAntonio Cardace    ["rx-usecs-low"]=""
68*fbb7a1f8SAntonio Cardace    ["tx-usecs-low"]=""
69*fbb7a1f8SAntonio Cardace    ["pkt-rate-high"]=""
70*fbb7a1f8SAntonio Cardace    ["rx-usecs-high"]=""
71*fbb7a1f8SAntonio Cardace    ["tx-usecs-high"]=""
72*fbb7a1f8SAntonio Cardace    ["sample-interval"]=""
73*fbb7a1f8SAntonio Cardace)
74*fbb7a1f8SAntonio Cardace
75*fbb7a1f8SAntonio Cardacedeclare -A EXPECTED_SETTINGS=(
76*fbb7a1f8SAntonio Cardace    ["rx-frames-low"]=""
77*fbb7a1f8SAntonio Cardace    ["tx-frames-low"]=""
78*fbb7a1f8SAntonio Cardace    ["rx-frames-high"]=""
79*fbb7a1f8SAntonio Cardace    ["tx-frames-high"]=""
80*fbb7a1f8SAntonio Cardace    ["rx-usecs"]=""
81*fbb7a1f8SAntonio Cardace    ["rx-frames"]=""
82*fbb7a1f8SAntonio Cardace    ["rx-usecs-irq"]=""
83*fbb7a1f8SAntonio Cardace    ["rx-frames-irq"]=""
84*fbb7a1f8SAntonio Cardace    ["tx-usecs"]=""
85*fbb7a1f8SAntonio Cardace    ["tx-frames"]=""
86*fbb7a1f8SAntonio Cardace    ["tx-usecs-irq"]=""
87*fbb7a1f8SAntonio Cardace    ["tx-frames-irq"]=""
88*fbb7a1f8SAntonio Cardace    ["stats-block-usecs"]=""
89*fbb7a1f8SAntonio Cardace    ["pkt-rate-low"]=""
90*fbb7a1f8SAntonio Cardace    ["rx-usecs-low"]=""
91*fbb7a1f8SAntonio Cardace    ["tx-usecs-low"]=""
92*fbb7a1f8SAntonio Cardace    ["pkt-rate-high"]=""
93*fbb7a1f8SAntonio Cardace    ["rx-usecs-high"]=""
94*fbb7a1f8SAntonio Cardace    ["tx-usecs-high"]=""
95*fbb7a1f8SAntonio Cardace    ["sample-interval"]=""
96*fbb7a1f8SAntonio Cardace)
97*fbb7a1f8SAntonio Cardace
98*fbb7a1f8SAntonio Cardace# populate the expected settings map
99*fbb7a1f8SAntonio Cardacefor key in ${!SETTINGS_MAP[@]}; do
100*fbb7a1f8SAntonio Cardace    EXPECTED_SETTINGS[$key]=$(get_value $key)
101*fbb7a1f8SAntonio Cardacedone
102*fbb7a1f8SAntonio Cardace
103*fbb7a1f8SAntonio Cardace# test
104*fbb7a1f8SAntonio Cardacefor key in ${!SETTINGS_MAP[@]}; do
105*fbb7a1f8SAntonio Cardace    value=$((RANDOM % $((2**32-1))))
106*fbb7a1f8SAntonio Cardace
107*fbb7a1f8SAntonio Cardace    ethtool -C $NSIM_NETDEV "$key" "$value"
108*fbb7a1f8SAntonio Cardace
109*fbb7a1f8SAntonio Cardace    EXPECTED_SETTINGS[$key]="$value"
110*fbb7a1f8SAntonio Cardace    expected=${EXPECTED_SETTINGS[@]}
111*fbb7a1f8SAntonio Cardace    current=$(update_current_settings)
112*fbb7a1f8SAntonio Cardace
113*fbb7a1f8SAntonio Cardace    check $? "$current" "$expected"
114*fbb7a1f8SAntonio Cardace    set +x
115*fbb7a1f8SAntonio Cardacedone
116*fbb7a1f8SAntonio Cardace
117*fbb7a1f8SAntonio Cardace# bool settings which ethtool displays on the same line
118*fbb7a1f8SAntonio Cardaceethtool -C $NSIM_NETDEV adaptive-rx on
119*fbb7a1f8SAntonio Cardaces=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on  TX: off")
120*fbb7a1f8SAntonio Cardacecheck $? "$s" ""
121*fbb7a1f8SAntonio Cardace
122*fbb7a1f8SAntonio Cardaceethtool -C $NSIM_NETDEV adaptive-tx on
123*fbb7a1f8SAntonio Cardaces=$(ethtool -c $NSIM_NETDEV | grep -q "Adaptive RX: on  TX: on")
124*fbb7a1f8SAntonio Cardacecheck $? "$s" ""
125*fbb7a1f8SAntonio Cardace
126*fbb7a1f8SAntonio Cardaceif [ $num_errors -eq 0 ]; then
127*fbb7a1f8SAntonio Cardace    echo "PASSED all $((num_passes)) checks"
128*fbb7a1f8SAntonio Cardace    exit 0
129*fbb7a1f8SAntonio Cardaceelse
130*fbb7a1f8SAntonio Cardace    echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
131*fbb7a1f8SAntonio Cardace    exit 1
132*fbb7a1f8SAntonio Cardacefi
133