selftests: forwarding: add ability to assemble NETIFS array by driver name
authorJiri Pirko <jiri@nvidia.com>
Wed, 24 Apr 2024 10:40:46 +0000 (12:40 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Fri, 26 Apr 2024 11:26:53 +0000 (13:26 +0200)
Allow driver tests to work without specifying the netdevice names.
Introduce a possibility to search for available netdevices according to
set driver name. Allow test to specify the name by setting
NETIF_FIND_DRIVER variable.

Note that user overrides this either by passing netdevice names on the
command line or by declaring NETIFS array in custom forwarding.config
configuration file.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Petr Machata <petrm@nvidia.com>
Reviewed-by: Benjamin Poirier <bpoirier@nvidia.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
tools/testing/selftests/net/forwarding/lib.sh

index 7913c6ee418d5eb17bf43fdf58a924329f2f8067..9d6802c6c02348a6c302a04158f122a7b92423e4 100644 (file)
@@ -84,6 +84,43 @@ declare -A NETIFS=(
 # e.g. a low-power board.
 : "${KSFT_MACHINE_SLOW:=no}"
 
+##############################################################################
+# Find netifs by test-specified driver name
+
+driver_name_get()
+{
+       local dev=$1; shift
+       local driver_path="/sys/class/net/$dev/device/driver"
+
+       if [[ -L $driver_path ]]; then
+               basename `realpath $driver_path`
+       fi
+}
+
+netif_find_driver()
+{
+       local ifnames=`ip -j link show | jq -r ".[].ifname"`
+       local count=0
+
+       for ifname in $ifnames
+       do
+               local driver_name=`driver_name_get $ifname`
+               if [[ ! -z $driver_name && $driver_name == $NETIF_FIND_DRIVER ]]; then
+                       count=$((count + 1))
+                       NETIFS[p$count]="$ifname"
+               fi
+       done
+}
+
+# Whether to find netdevice according to the driver speficied by the importer
+: "${NETIF_FIND_DRIVER:=}"
+
+if [[ $NETIF_FIND_DRIVER ]]; then
+       unset NETIFS
+       declare -A NETIFS
+       netif_find_driver
+fi
+
 net_forwarding_dir=$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")
 
 if [[ -f $net_forwarding_dir/forwarding.config ]]; then