]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blob - tools/testing/selftests/net/forwarding/devlink_lib.sh
selftests: forwarding: devlink_lib: Simplify deduction of DEVLINK_DEV
[mirror_ubuntu-eoan-kernel.git] / tools / testing / selftests / net / forwarding / devlink_lib.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3
4 ##############################################################################
5 # Defines
6
7 DEVLINK_DEV=$(devlink port show "${NETIFS[p1]}" -j \
8 | jq -r '.port | keys[]' | cut -d/ -f-2)
9 if [ -z "$DEVLINK_DEV" ]; then
10 echo "SKIP: ${NETIFS[p1]} has no devlink device registered for it"
11 exit 1
12 fi
13 if [[ "$(echo $DEVLINK_DEV | grep -c pci)" -eq 0 ]]; then
14 echo "SKIP: devlink device's bus is not PCI"
15 exit 1
16 fi
17
18 DEVLINK_VIDDID=$(lspci -s $(echo $DEVLINK_DEV | cut -d"/" -f2) \
19 -n | cut -d" " -f3)
20
21 ##############################################################################
22 # Sanity checks
23
24 devlink help 2>&1 | grep resource &> /dev/null
25 if [ $? -ne 0 ]; then
26 echo "SKIP: iproute2 too old, missing devlink resource support"
27 exit 1
28 fi
29
30 ##############################################################################
31 # Devlink helpers
32
33 devlink_resource_names_to_path()
34 {
35 local resource
36 local path=""
37
38 for resource in "${@}"; do
39 if [ "$path" == "" ]; then
40 path="$resource"
41 else
42 path="${path}/$resource"
43 fi
44 done
45
46 echo "$path"
47 }
48
49 devlink_resource_get()
50 {
51 local name=$1
52 local resource_name=.[][\"$DEVLINK_DEV\"]
53
54 resource_name="$resource_name | .[] | select (.name == \"$name\")"
55
56 shift
57 for resource in "${@}"; do
58 resource_name="${resource_name} | .[\"resources\"][] | \
59 select (.name == \"$resource\")"
60 done
61
62 devlink -j resource show "$DEVLINK_DEV" | jq "$resource_name"
63 }
64
65 devlink_resource_size_get()
66 {
67 local size=$(devlink_resource_get "$@" | jq '.["size_new"]')
68
69 if [ "$size" == "null" ]; then
70 devlink_resource_get "$@" | jq '.["size"]'
71 else
72 echo "$size"
73 fi
74 }
75
76 devlink_resource_size_set()
77 {
78 local new_size=$1
79 local path
80
81 shift
82 path=$(devlink_resource_names_to_path "$@")
83 devlink resource set "$DEVLINK_DEV" path "$path" size "$new_size"
84 check_err $? "Failed setting path $path to size $size"
85 }
86
87 devlink_reload()
88 {
89 local still_pending
90
91 devlink dev reload "$DEVLINK_DEV" &> /dev/null
92 check_err $? "Failed reload"
93
94 still_pending=$(devlink resource show "$DEVLINK_DEV" | \
95 grep -c "size_new")
96 check_err $still_pending "Failed reload - There are still unset sizes"
97 }