1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4# Test for physical ports resource. The test splits each splittable port
5# to its width and checks that eventually the number of physical ports equals
6# the maximum number of physical ports.
7
8PORT_NUM_NETIFS=0
9
10port_setup_prepare()
11{
12	:
13}
14
15port_cleanup()
16{
17	pre_cleanup
18
19	for port in "${unsplit[@]}"; do
20		devlink port unsplit $port
21		check_err $? "Did not unsplit $netdev"
22	done
23}
24
25split_all_ports()
26{
27	local should_fail=$1; shift
28	local -a unsplit
29
30	# Loop over the splittable netdevs and create tuples of netdev along
31	# with its width. For example:
32	# '$netdev1 $count1 $netdev2 $count2...', when:
33	# $netdev1-2 are splittable netdevs in the device, and
34	# $count1-2 are the netdevs width respectively.
35	while read netdev count <<<$(
36		devlink -j port show |
37		jq -r '.[][] | select(.splittable==true) | "\(.netdev) \(.lanes)"'
38		)
39		[[ ! -z $netdev ]]
40	do
41		devlink port split $netdev count $count
42		check_err $? "Did not split $netdev into $count"
43		unsplit+=( "${netdev}s0" )
44	done
45}
46
47port_test()
48{
49	local max_ports=$1; shift
50	local should_fail=$1; shift
51
52	split_all_ports $should_fail
53
54	occ=$(devlink -j resource show $DEVLINK_DEV \
55	      | jq '.[][][] | select(.name=="physical_ports") |.["occ"]')
56
57	[[ $occ -eq $max_ports ]]
58	if [[ $should_fail -eq 0 ]]; then
59		check_err $? "Mismatch ports number: Expected $max_ports, got $occ."
60	else
61		check_err_fail $should_fail $? "Reached more ports than expected"
62	fi
63
64}
65