forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]> Reviewed-by: Petr Machata <[email protected]> Reviewed-by: Florian Fainelli <[email protected]> Signed-off-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
- Loading branch information
1 parent
0433045
commit 7d10bcc
Showing
1 changed file
with
102 additions
and
0 deletions.
There are no files selected for viewing
102 changes: 102 additions & 0 deletions
102
tools/testing/selftests/net/forwarding/ethtool_extended_state.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
#!/bin/bash | ||
# SPDX-License-Identifier: GPL-2.0 | ||
|
||
ALL_TESTS=" | ||
autoneg | ||
autoneg_force_mode | ||
no_cable | ||
" | ||
|
||
NUM_NETIFS=2 | ||
source lib.sh | ||
source ethtool_lib.sh | ||
|
||
setup_prepare() | ||
{ | ||
swp1=${NETIFS[p1]} | ||
swp2=${NETIFS[p2]} | ||
swp3=$NETIF_NO_CABLE | ||
} | ||
|
||
ethtool_extended_state_check() | ||
{ | ||
local dev=$1; shift | ||
local expected_ext_state=$1; shift | ||
local expected_ext_substate=${1:-""}; shift | ||
|
||
local ext_state=$(ethtool $dev | grep "Link detected" \ | ||
| cut -d "(" -f2 | cut -d ")" -f1) | ||
local ext_substate=$(echo $ext_state | cut -sd "," -f2 \ | ||
| sed -e 's/^[[:space:]]*//') | ||
ext_state=$(echo $ext_state | cut -d "," -f1) | ||
|
||
[[ $ext_state == $expected_ext_state ]] | ||
check_err $? "Expected \"$expected_ext_state\", got \"$ext_state\"" | ||
|
||
[[ $ext_substate == $expected_ext_substate ]] | ||
check_err $? "Expected \"$expected_ext_substate\", got \"$ext_substate\"" | ||
} | ||
|
||
autoneg() | ||
{ | ||
RET=0 | ||
|
||
ip link set dev $swp1 up | ||
|
||
sleep 4 | ||
ethtool_extended_state_check $swp1 "Autoneg" "No partner detected" | ||
|
||
log_test "Autoneg, No partner detected" | ||
|
||
ip link set dev $swp1 down | ||
} | ||
|
||
autoneg_force_mode() | ||
{ | ||
RET=0 | ||
|
||
ip link set dev $swp1 up | ||
ip link set dev $swp2 up | ||
|
||
local -a speeds_arr=($(different_speeds_get $swp1 $swp2 0 0)) | ||
local speed1=${speeds_arr[0]} | ||
local speed2=${speeds_arr[1]} | ||
|
||
ethtool_set $swp1 speed $speed1 autoneg off | ||
ethtool_set $swp2 speed $speed2 autoneg off | ||
|
||
sleep 4 | ||
ethtool_extended_state_check $swp1 "Autoneg" \ | ||
"No partner detected during force mode" | ||
|
||
ethtool_extended_state_check $swp2 "Autoneg" \ | ||
"No partner detected during force mode" | ||
|
||
log_test "Autoneg, No partner detected during force mode" | ||
|
||
ethtool -s $swp2 autoneg on | ||
ethtool -s $swp1 autoneg on | ||
|
||
ip link set dev $swp2 down | ||
ip link set dev $swp1 down | ||
} | ||
|
||
no_cable() | ||
{ | ||
RET=0 | ||
|
||
ip link set dev $swp3 up | ||
|
||
sleep 1 | ||
ethtool_extended_state_check $swp3 "No cable" | ||
|
||
log_test "No cable" | ||
|
||
ip link set dev $swp3 down | ||
} | ||
|
||
setup_prepare | ||
|
||
tests_run | ||
|
||
exit $EXIT_STATUS |