| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0-only | |
| source ethtool-common.sh | |
| NSIM_NETDEV=$(make_netdev) | |
| [ a$ETHTOOL == a ] && ETHTOOL=ethtool | |
| set -o pipefail | |
| # Since commit 2b3ddcb35357 ("ethtool: fec: Change the prompt ...") | |
| # in ethtool CLI the Configured lines start with Supported/Configured. | |
| configured=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2 | head -1 | cut -d' ' -f1) | |
| # netdevsim starts out with None/None | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: None | |
| Active FEC encoding: None" | |
| # Test Auto | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding auto | |
| check $? | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: Auto | |
| Active FEC encoding: Off" | |
| # Test case in-sensitivity | |
| for o in off Off OFF; do | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding $o | |
| check $? | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: Off | |
| Active FEC encoding: Off" | |
| done | |
| for o in BaseR baser BAser; do | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding $o | |
| check $? | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: BaseR | |
| Active FEC encoding: BaseR" | |
| done | |
| for o in llrs rs; do | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding $o | |
| check $? | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: ${o^^} | |
| Active FEC encoding: ${o^^}" | |
| done | |
| # Test multiple bits | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding rs llrs | |
| check $? | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: RS LLRS | |
| Active FEC encoding: LLRS" | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding rs off auto | |
| check $? | |
| s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) | |
| check $? "$s" "$configured FEC encodings: Auto Off RS | |
| Active FEC encoding: RS" | |
| # Make sure other link modes are rejected | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding FIBRE 2>/dev/null | |
| check $? '' '' 1 | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding bla-bla-bla 2>/dev/null | |
| check $? '' '' 1 | |
| # Try JSON | |
| $ETHTOOL --json --show-fec $NSIM_NETDEV | jq empty >>/dev/null 2>&1 | |
| if [ $? -eq 0 ]; then | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding auto | |
| check $? | |
| s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]') | |
| check $? "$s" '"Auto"' | |
| s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]') | |
| check $? "$s" '"Off"' | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding auto RS | |
| check $? | |
| s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]') | |
| check $? "$s" '"Auto" | |
| "RS"' | |
| s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]') | |
| check $? "$s" '"RS"' | |
| fi | |
| # Test error injection | |
| echo 11 > $NSIM_DEV_DFS/ethtool/get_err | |
| $ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1 | |
| check $? '' '' 1 | |
| echo 0 > $NSIM_DEV_DFS/ethtool/get_err | |
| echo 11 > $NSIM_DEV_DFS/ethtool/set_err | |
| $ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1 | |
| check $? | |
| $ETHTOOL --set-fec $NSIM_NETDEV encoding RS 2>/dev/null | |
| check $? '' '' 1 | |
| if [ $num_errors -eq 0 ]; then | |
| echo "PASSED all $((num_passes)) checks" | |
| exit 0 | |
| else | |
| echo "FAILED $num_errors/$((num_errors+num_passes)) checks" | |
| exit 1 | |
| fi |