Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: forwarding: Add tests for ethtool extended state

Add tests to check ethtool report about extended state.
The tests configure several states and verify that the correct extended
state is reported by ethtool.

Check extended state with substate (Autoneg) and extended state without
substate (No cable).

Signed-off-by: Amit Cohen <amitc@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Amit Cohen and committed by
David S. Miller
7d10bcce 0433045c

+102
+102
tools/testing/selftests/net/forwarding/ethtool_extended_state.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + ALL_TESTS=" 5 + autoneg 6 + autoneg_force_mode 7 + no_cable 8 + " 9 + 10 + NUM_NETIFS=2 11 + source lib.sh 12 + source ethtool_lib.sh 13 + 14 + setup_prepare() 15 + { 16 + swp1=${NETIFS[p1]} 17 + swp2=${NETIFS[p2]} 18 + swp3=$NETIF_NO_CABLE 19 + } 20 + 21 + ethtool_extended_state_check() 22 + { 23 + local dev=$1; shift 24 + local expected_ext_state=$1; shift 25 + local expected_ext_substate=${1:-""}; shift 26 + 27 + local ext_state=$(ethtool $dev | grep "Link detected" \ 28 + | cut -d "(" -f2 | cut -d ")" -f1) 29 + local ext_substate=$(echo $ext_state | cut -sd "," -f2 \ 30 + | sed -e 's/^[[:space:]]*//') 31 + ext_state=$(echo $ext_state | cut -d "," -f1) 32 + 33 + [[ $ext_state == $expected_ext_state ]] 34 + check_err $? "Expected \"$expected_ext_state\", got \"$ext_state\"" 35 + 36 + [[ $ext_substate == $expected_ext_substate ]] 37 + check_err $? "Expected \"$expected_ext_substate\", got \"$ext_substate\"" 38 + } 39 + 40 + autoneg() 41 + { 42 + RET=0 43 + 44 + ip link set dev $swp1 up 45 + 46 + sleep 4 47 + ethtool_extended_state_check $swp1 "Autoneg" "No partner detected" 48 + 49 + log_test "Autoneg, No partner detected" 50 + 51 + ip link set dev $swp1 down 52 + } 53 + 54 + autoneg_force_mode() 55 + { 56 + RET=0 57 + 58 + ip link set dev $swp1 up 59 + ip link set dev $swp2 up 60 + 61 + local -a speeds_arr=($(different_speeds_get $swp1 $swp2 0 0)) 62 + local speed1=${speeds_arr[0]} 63 + local speed2=${speeds_arr[1]} 64 + 65 + ethtool_set $swp1 speed $speed1 autoneg off 66 + ethtool_set $swp2 speed $speed2 autoneg off 67 + 68 + sleep 4 69 + ethtool_extended_state_check $swp1 "Autoneg" \ 70 + "No partner detected during force mode" 71 + 72 + ethtool_extended_state_check $swp2 "Autoneg" \ 73 + "No partner detected during force mode" 74 + 75 + log_test "Autoneg, No partner detected during force mode" 76 + 77 + ethtool -s $swp2 autoneg on 78 + ethtool -s $swp1 autoneg on 79 + 80 + ip link set dev $swp2 down 81 + ip link set dev $swp1 down 82 + } 83 + 84 + no_cable() 85 + { 86 + RET=0 87 + 88 + ip link set dev $swp3 up 89 + 90 + sleep 1 91 + ethtool_extended_state_check $swp3 "No cable" 92 + 93 + log_test "No cable" 94 + 95 + ip link set dev $swp3 down 96 + } 97 + 98 + setup_prepare 99 + 100 + tests_run 101 + 102 + exit $EXIT_STATUS