11da07e5dSJakub Kicinski#!/bin/bash 21da07e5dSJakub Kicinski# SPDX-License-Identifier: GPL-2.0-only 31da07e5dSJakub Kicinski 41da07e5dSJakub Kicinskisource ethtool-common.sh 51da07e5dSJakub Kicinski 61da07e5dSJakub KicinskiNSIM_NETDEV=$(make_netdev) 71da07e5dSJakub Kicinski[ a$ETHTOOL == a ] && ETHTOOL=ethtool 81da07e5dSJakub Kicinski 91da07e5dSJakub Kicinskiset -o pipefail 101da07e5dSJakub Kicinski 114697381bSJakub Kicinski# Since commit 2b3ddcb35357 ("ethtool: fec: Change the prompt ...") 124697381bSJakub Kicinski# in ethtool CLI the Configured lines start with Supported/Configured. 134697381bSJakub Kicinskiconfigured=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2 | head -1 | cut -d' ' -f1) 144697381bSJakub Kicinski 151da07e5dSJakub Kicinski# netdevsim starts out with None/None 161da07e5dSJakub Kicinskis=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 174697381bSJakub Kicinskicheck $? "$s" "$configured FEC encodings: None 181da07e5dSJakub KicinskiActive FEC encoding: None" 191da07e5dSJakub Kicinski 201da07e5dSJakub Kicinski# Test Auto 211da07e5dSJakub Kicinski$ETHTOOL --set-fec $NSIM_NETDEV encoding auto 221da07e5dSJakub Kicinskicheck $? 231da07e5dSJakub Kicinskis=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 244697381bSJakub Kicinskicheck $? "$s" "$configured FEC encodings: Auto 251da07e5dSJakub KicinskiActive FEC encoding: Off" 261da07e5dSJakub Kicinski 271da07e5dSJakub Kicinski# Test case in-sensitivity 281da07e5dSJakub Kicinskifor o in off Off OFF; do 291da07e5dSJakub Kicinski $ETHTOOL --set-fec $NSIM_NETDEV encoding $o 301da07e5dSJakub Kicinski check $? 311da07e5dSJakub Kicinski s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 324697381bSJakub Kicinski check $? "$s" "$configured FEC encodings: Off 331da07e5dSJakub KicinskiActive FEC encoding: Off" 341da07e5dSJakub Kicinskidone 351da07e5dSJakub Kicinski 361da07e5dSJakub Kicinskifor o in BaseR baser BAser; do 371da07e5dSJakub Kicinski $ETHTOOL --set-fec $NSIM_NETDEV encoding $o 381da07e5dSJakub Kicinski check $? 391da07e5dSJakub Kicinski s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 404697381bSJakub Kicinski check $? "$s" "$configured FEC encodings: BaseR 411da07e5dSJakub KicinskiActive FEC encoding: BaseR" 421da07e5dSJakub Kicinskidone 431da07e5dSJakub Kicinski 441da07e5dSJakub Kicinskifor o in llrs rs; do 451da07e5dSJakub Kicinski $ETHTOOL --set-fec $NSIM_NETDEV encoding $o 461da07e5dSJakub Kicinski check $? 471da07e5dSJakub Kicinski s=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 484697381bSJakub Kicinski check $? "$s" "$configured FEC encodings: ${o^^} 491da07e5dSJakub KicinskiActive FEC encoding: ${o^^}" 501da07e5dSJakub Kicinskidone 511da07e5dSJakub Kicinski 52fb0f0230SPrabhav Kumar Vaish# Test multiple bits 531da07e5dSJakub Kicinski$ETHTOOL --set-fec $NSIM_NETDEV encoding rs llrs 541da07e5dSJakub Kicinskicheck $? 551da07e5dSJakub Kicinskis=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 564697381bSJakub Kicinskicheck $? "$s" "$configured FEC encodings: RS LLRS 571da07e5dSJakub KicinskiActive FEC encoding: LLRS" 581da07e5dSJakub Kicinski 591da07e5dSJakub Kicinski$ETHTOOL --set-fec $NSIM_NETDEV encoding rs off auto 601da07e5dSJakub Kicinskicheck $? 611da07e5dSJakub Kicinskis=$($ETHTOOL --show-fec $NSIM_NETDEV | tail -2) 624697381bSJakub Kicinskicheck $? "$s" "$configured FEC encodings: Auto Off RS 631da07e5dSJakub KicinskiActive FEC encoding: RS" 641da07e5dSJakub Kicinski 651da07e5dSJakub Kicinski# Make sure other link modes are rejected 661da07e5dSJakub Kicinski$ETHTOOL --set-fec $NSIM_NETDEV encoding FIBRE 2>/dev/null 671da07e5dSJakub Kicinskicheck $? '' '' 1 681da07e5dSJakub Kicinski 691da07e5dSJakub Kicinski$ETHTOOL --set-fec $NSIM_NETDEV encoding bla-bla-bla 2>/dev/null 701da07e5dSJakub Kicinskicheck $? '' '' 1 711da07e5dSJakub Kicinski 721da07e5dSJakub Kicinski# Try JSON 731da07e5dSJakub Kicinski$ETHTOOL --json --show-fec $NSIM_NETDEV | jq empty >>/dev/null 2>&1 741da07e5dSJakub Kicinskiif [ $? -eq 0 ]; then 751da07e5dSJakub Kicinski $ETHTOOL --set-fec $NSIM_NETDEV encoding auto 761da07e5dSJakub Kicinski check $? 771da07e5dSJakub Kicinski 781da07e5dSJakub Kicinski s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]') 791da07e5dSJakub Kicinski check $? "$s" '"Auto"' 801da07e5dSJakub Kicinski s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]') 811da07e5dSJakub Kicinski check $? "$s" '"Off"' 821da07e5dSJakub Kicinski 831da07e5dSJakub Kicinski $ETHTOOL --set-fec $NSIM_NETDEV encoding auto RS 841da07e5dSJakub Kicinski check $? 851da07e5dSJakub Kicinski 861da07e5dSJakub Kicinski s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].config[]') 871da07e5dSJakub Kicinski check $? "$s" '"Auto" 881da07e5dSJakub Kicinski"RS"' 891da07e5dSJakub Kicinski s=$($ETHTOOL --json --show-fec $NSIM_NETDEV | jq '.[].active[]') 901da07e5dSJakub Kicinski check $? "$s" '"RS"' 911da07e5dSJakub Kicinskifi 921da07e5dSJakub Kicinski 931da07e5dSJakub Kicinski# Test error injection 941da07e5dSJakub Kicinskiecho 11 > $NSIM_DEV_DFS/ethtool/get_err 951da07e5dSJakub Kicinski 961da07e5dSJakub Kicinski$ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1 971da07e5dSJakub Kicinskicheck $? '' '' 1 981da07e5dSJakub Kicinski 991da07e5dSJakub Kicinskiecho 0 > $NSIM_DEV_DFS/ethtool/get_err 1001da07e5dSJakub Kicinskiecho 11 > $NSIM_DEV_DFS/ethtool/set_err 1011da07e5dSJakub Kicinski 1021da07e5dSJakub Kicinski$ETHTOOL --show-fec $NSIM_NETDEV >>/dev/null 2>&1 1031da07e5dSJakub Kicinskicheck $? 1041da07e5dSJakub Kicinski 1051da07e5dSJakub Kicinski$ETHTOOL --set-fec $NSIM_NETDEV encoding RS 2>/dev/null 1061da07e5dSJakub Kicinskicheck $? '' '' 1 1071da07e5dSJakub Kicinski 1081da07e5dSJakub Kicinskiif [ $num_errors -eq 0 ]; then 1091da07e5dSJakub Kicinski echo "PASSED all $((num_passes)) checks" 1101da07e5dSJakub Kicinski exit 0 1111da07e5dSJakub Kicinskielse 1121da07e5dSJakub Kicinski echo "FAILED $num_errors/$((num_errors+num_passes)) checks" 1131da07e5dSJakub Kicinski exit 1 1141da07e5dSJakub Kicinskifi 115