| #!/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)" |
| |
| } |