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-only
3
4source ethtool-common.sh
5
6NSIM_NETDEV=$(make_netdev)
7[ a$ETHTOOL == a ] && ETHTOOL=ethtool
8
9set -o pipefail
10
11# netdevsim starts out with None/None
12s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
13check $? "$s" "Configured FEC encodings: None
14Active FEC encoding: None"
15
16# Test Auto
17$ETHTOOL --set-fec $NSIM_NETDEV encoding auto
18check $?
19s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
20check $? "$s" "Configured FEC encodings: Auto
21Active FEC encoding: Off"
22
23# Test case in-sensitivity
24for o in off Off OFF; do
25 $ETHTOOL --set-fec $NSIM_NETDEV encoding $o
26 check $?
27 s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
28 check $? "$s" "Configured FEC encodings: Off
29Active FEC encoding: Off"
30done
31
32for o in BaseR baser BAser; do
33 $ETHTOOL --set-fec $NSIM_NETDEV encoding $o
34 check $?
35 s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
36 check $? "$s" "Configured FEC encodings: BaseR
37Active FEC encoding: BaseR"
38done
39
40for o in llrs rs; do
41 $ETHTOOL --set-fec $NSIM_NETDEV encoding $o
42 check $?
43 s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
44 check $? "$s" "Configured FEC encodings: ${o^^}
45Active FEC encoding: ${o^^}"
46done
47
48# Test mutliple bits
49$ETHTOOL --set-fec $NSIM_NETDEV encoding rs llrs
50check $?
51s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
52check $? "$s" "Configured FEC encodings: RS LLRS
53Active FEC encoding: LLRS"
54
55$ETHTOOL --set-fec $NSIM_NETDEV encoding rs off auto
56check $?
57s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2)
58check $? "$s" "Configured FEC encodings: Auto Off RS
59Active FEC encoding: RS"
60
61# Make sure other link modes are rejected
62$ETHTOOL --set-fec $NSIM_NETDEV encoding FIBRE 2>/dev/null
63check $? '' '' 1
64
65$ETHTOOL --set-fec $NSIM_NETDEV encoding bla-bla-bla 2>/dev/null
66check $? '' '' 1
67
68# Try JSON
69$ETHTOOL --json --show-fec $NSIM_NETDEV | jq empty >>/dev/null 2>&1
70if [ $? -eq 0 ]; then
71 $ETHTOOL --set-fec $NSIM_NETDEV encoding auto
72 check $?
73
74 s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]')
75 check $? "$s" '"Auto"'
76 s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]')
77 check $? "$s" '"Off"'
78
79 $ETHTOOL --set-fec $NSIM_NETDEV encoding auto RS
80 check $?
81
82 s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]')
83 check $? "$s" '"Auto"
84"RS"'
85 s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]')
86 check $? "$s" '"RS"'
87fi
88
89# Test error injection
90echo 11 > $NSIM_DEV_DFS/ethtool/get_err
91
92$ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1
93check $? '' '' 1
94
95echo 0 > $NSIM_DEV_DFS/ethtool/get_err
96echo 11 > $NSIM_DEV_DFS/ethtool/set_err
97
98$ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1
99check $?
100
101$ETHTOOL --set-fec $NSIM_NETDEV encoding RS 2>/dev/null
102check $? '' '' 1
103
104if [ $num_errors -eq 0 ]; then
105 echo "PASSED all $((num_passes)) checks"
106 exit 0
107else
108 echo "FAILED $num_errors/$((num_errors+num_passes)) checks"
109 exit 1
110fi