2 # SPDX-License-Identifier: GPL-2.0
4 # This test is for checking network interface
5 # For the moment it tests only ethernet interface (but wifi could be easily added)
7 # We assume that all network driver are loaded
8 # if not they probably have failed earlier in the boot process and their logged error will be catched by another test
11 # Kselftest framework requirement - SKIP code is 4.
14 # this function will try to up the interface
15 # if already up, nothing done
16 # arg1: network interface name
21 ip link show
"$netdev" |
grep -q UP
23 echo "SKIP: $netdev: interface already up"
27 ip link
set "$netdev" up
29 echo "FAIL: $netdev: Fail to up interface"
32 echo "PASS: $netdev: set interface up"
38 # this function will try to setup an IP and MAC address on a network interface
39 # Doing nothing if the interface was already up
40 # arg1: network interface name
45 # do nothing if the interface was already up
46 if [ $NETDEV_STARTED -eq 0 ];then
50 MACADDR
='02:03:04:05:06:07'
51 ip link
set dev
$netdev address
"$MACADDR"
53 echo "FAIL: $netdev: Cannot set MAC address"
55 ip link show
$netdev |
grep -q "$MACADDR"
57 echo "PASS: $netdev: set MAC address"
59 echo "FAIL: $netdev: Cannot set MAC address"
63 #check that the interface did not already have an IP
64 ip address show
"$netdev" |
grep '^[[:space:]]*inet'
66 echo "SKIP: $netdev: already have an IP"
70 if [ "$veth_created" ]; then
71 echo "XFAIL: $netdev: set IP address unsupported for veth*"
73 # TODO what ipaddr to set ? DHCP ?
74 echo "SKIP: $netdev: set IP address"
79 # test an ethtool command
80 # arg1: return code for not supported (see ethtool code source)
81 # arg2: summary of the command
82 # arg3: command to execute
83 kci_netdev_ethtool_test
()
86 echo "SKIP: $netdev: ethtool: invalid number of arguments"
91 if [ $ret -ne 0 ];then
92 if [ $ret -eq "$1" ];then
93 echo "XFAIL: $netdev: ethtool $2 not supported"
96 echo "FAIL: $netdev: ethtool $2"
100 echo "PASS: $netdev: ethtool $2"
105 # test ethtool commands
106 # arg1: network interface name
111 #check presence of ethtool
112 ethtool
--version 2>/dev
/null
>/dev
/null
114 echo "SKIP: ethtool not present"
118 TMP_ETHTOOL_FEATURES
="$(mktemp)"
119 if [ ! -e "$TMP_ETHTOOL_FEATURES" ];then
120 echo "SKIP: Cannot create a tmp file"
124 ethtool
-k "$netdev" > "$TMP_ETHTOOL_FEATURES"
126 echo "FAIL: $netdev: ethtool list features"
127 rm "$TMP_ETHTOOL_FEATURES"
130 echo "PASS: $netdev: ethtool list features"
132 while read -r FEATURE VALUE FIXED
; do
133 [ "$FEATURE" != "Features" ] ||
continue # Skip "Features"
134 [ "$FIXED" != "[fixed]" ] ||
continue # Skip fixed features
135 feature
="${FEATURE%:*}"
137 ethtool
--offload "$netdev" "$feature" off
138 if [ $?
-eq 0 ]; then
139 echo "PASS: $netdev: Turned off feature: $feature"
141 echo "FAIL: $netdev: Failed to turn off feature:" \
145 ethtool
--offload "$netdev" "$feature" on
146 if [ $?
-eq 0 ]; then
147 echo "PASS: $netdev: Turned on feature: $feature"
149 echo "FAIL: $netdev: Failed to turn on feature:" \
153 #restore the feature to its initial state
154 ethtool
--offload "$netdev" "$feature" "$VALUE"
155 if [ $?
-eq 0 ]; then
156 echo "PASS: $netdev: Restore feature $feature" \
157 "to initial state $VALUE"
159 echo "FAIL: $netdev: Failed to restore feature" \
160 "$feature to initial state $VALUE"
163 done < "$TMP_ETHTOOL_FEATURES"
165 rm "$TMP_ETHTOOL_FEATURES"
167 kci_netdev_ethtool_test
74 'dump' "ethtool -d $netdev"
168 kci_netdev_ethtool_test
94 'stats' "ethtool -S $netdev"
174 # arg1: network interface name
179 if [ $NETDEV_STARTED -eq 0 ];then
180 echo "SKIP: $netdev: interface kept up"
184 ip link
set "$netdev" down
186 echo "FAIL: $netdev: stop interface"
189 echo "PASS: $netdev: stop interface"
193 # run all test on a netdev
194 # arg1: network interface name
200 #check for VLAN interface
201 MASTER_IFACE
="$(echo $1 | cut -d@ -f2)"
202 if [ ! -z "$MASTER_IFACE" ];then
203 IFACE_TO_UPDOWN
="$MASTER_IFACE"
204 IFACE_TO_TEST
="$(echo $1 | cut -d@ -f1)"
208 kci_net_start
"$IFACE_TO_UPDOWN"
210 kci_net_setup
"$IFACE_TO_TEST"
212 kci_netdev_ethtool
"$IFACE_TO_TEST"
214 kci_netdev_stop
"$IFACE_TO_UPDOWN"
218 #check for needed privileges
219 if [ "$(id -u)" -ne 0 ];then
220 echo "SKIP: Need root privileges"
224 ip link show
2>/dev
/null
>/dev
/null
226 echo "SKIP: Could not run test without the ip tool"
230 TMP_LIST_NETDEV
="$(mktemp)"
231 if [ ! -e "$TMP_LIST_NETDEV" ];then
232 echo "FAIL: Cannot create a tmp file"
236 ip link show |
grep '^[0-9]' |
grep -oE '[[:space:]].*eth[0-9]*:|[[:space:]].*enp[0-9]s[0-9]:' | cut
-d\
-f2 | cut
-d: -f1> "$TMP_LIST_NETDEV"
238 if [ ! -s "$TMP_LIST_NETDEV" ]; then
239 echo "No valid network device found, creating veth pair"
240 ip link add veth0
type veth peer name veth1
241 echo "veth0" > "$TMP_LIST_NETDEV"
247 kci_test_netdev
"$netdev"
248 done < "$TMP_LIST_NETDEV"
250 #clean up veth interface pair if it was created
251 if [ "$veth_created" ]; then
253 echo "Removed veth pair"
256 rm "$TMP_LIST_NETDEV"