#!/bin/bash # SPDX-License-Identifier: GPL-2.0 ALL_TESTS=" autoneg autoneg_force_mode no_cable " NUM_NETIFS=2 lib_dir=$(dirname "$0") source "$lib_dir"/../../../net/forwarding/lib.sh source ethtool_lib.sh TIMEOUT=$((WAIT_TIMEOUT * 1000)) # ms setup_prepare() { swp1=${NETIFS[p1]} swp2=${NETIFS[p2]} swp3=$NETIF_NO_CABLE } ethtool_ext_state() { 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) if [[ $ext_state != $expected_ext_state ]]; then echo "Expected \"$expected_ext_state\", got \"$ext_state\"" return 1 fi if [[ $ext_substate != $expected_ext_substate ]]; then echo "Expected \"$expected_ext_substate\", got \"$ext_substate\"" return 1 fi } autoneg() { local msg RET=0 ip link set dev $swp1 up msg=$(busywait $TIMEOUT ethtool_ext_state $swp1 \ "Autoneg" "No partner detected") check_err $? "$msg" log_test "Autoneg, No partner detected" ip link set dev $swp1 down } autoneg_force_mode() { local msg 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 msg=$(busywait $TIMEOUT ethtool_ext_state $swp1 \ "Autoneg" "No partner detected during force mode") check_err $? "$msg" msg=$(busywait $TIMEOUT ethtool_ext_state $swp2 \ "Autoneg" "No partner detected during force mode") check_err $? "$msg" 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() { local msg RET=0 ip link set dev $swp3 up msg=$(busywait $TIMEOUT ethtool_ext_state $swp3 "No cable") check_err $? "$msg" log_test "No cable" ip link set dev $swp3 down } setup_prepare tests_run exit $EXIT_STATUS