#!/bin/bash # SPDX-License-Identifier: GPL-2.0 # Test for physical ports resource. The test splits each splittable port # to its width and checks that eventually the number of physical ports equals # the maximum number of physical ports. PORT_NUM_NETIFS=0 declare -a unsplit port_setup_prepare() { : } port_cleanup() { pre_cleanup for port in "${unsplit[@]}"; do devlink port unsplit $port check_err $? "Did not unsplit $netdev" done unsplit=() } split_all_ports() { local should_fail=$1; shift # Loop over the splittable netdevs and create tuples of netdev along # with its width. For example: # '$netdev1 $count1 $netdev2 $count2...', when: # $netdev1-2 are splittable netdevs in the device, and # $count1-2 are the netdevs width respectively. while read netdev count <<<$( devlink -j port show | jq -r '.[][] | select(.splittable==true) | "\(.netdev) \(.lanes)"' ) [[ ! -z $netdev ]] do devlink port split $netdev count $count check_err $? "Did not split $netdev into $count" unsplit+=( "${netdev}s0" ) done } port_test() { local max_ports=$1; shift local should_fail=$1; shift split_all_ports $should_fail occ=$(devlink -j resource show $DEVLINK_DEV \ | jq '.[][][] | select(.name=="physical_ports") |.["occ"]') [[ $occ -eq $max_ports ]] check_err_fail $should_fail $? "Attempt to create $max_ports ports (actual result $occ)" }