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