xref: /linux/tools/testing/selftests/drivers/net/netdevsim/ethtool-fec.sh (revision a23e1966932464e1c5226cb9ac4ce1d5fc10ba22)
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