Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4lib_dir=$(dirname $0)/../../../net/forwarding
5
6ALL_TESTS="fw_flash_test params_test regions_test"
7NUM_NETIFS=0
8source $lib_dir/lib.sh
9
10BUS_ADDR=10
11PORT_COUNT=4
12DEV_NAME=netdevsim$BUS_ADDR
13SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/
14DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/
15DL_HANDLE=netdevsim/$DEV_NAME
16
17fw_flash_test()
18{
19 RET=0
20
21 devlink dev flash $DL_HANDLE file dummy
22 check_err $? "Failed to flash with status updates on"
23
24 echo "n"> $DEBUGFS_DIR/fw_update_status
25 check_err $? "Failed to disable status updates"
26
27 devlink dev flash $DL_HANDLE file dummy
28 check_err $? "Failed to flash with status updates off"
29
30 log_test "fw flash test"
31}
32
33param_get()
34{
35 local name=$1
36
37 cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \
38 '.[][][].values[] | select(.cmode == "driverinit").value'
39}
40
41param_set()
42{
43 local name=$1
44 local value=$2
45
46 devlink dev param set $DL_HANDLE name $name cmode driverinit value $value
47}
48
49check_value()
50{
51 local name=$1
52 local phase_name=$2
53 local expected_param_value=$3
54 local expected_debugfs_value=$4
55 local value
56
57 value=$(param_get $name)
58 check_err $? "Failed to get $name param value"
59 [ "$value" == "$expected_param_value" ]
60 check_err $? "Unexpected $phase_name $name param value"
61 value=$(<$DEBUGFS_DIR/$name)
62 check_err $? "Failed to get $name debugfs value"
63 [ "$value" == "$expected_debugfs_value" ]
64 check_err $? "Unexpected $phase_name $name debugfs value"
65}
66
67params_test()
68{
69 RET=0
70
71 local max_macs
72 local test1
73
74 check_value max_macs initial 32 32
75 check_value test1 initial true Y
76
77 param_set max_macs 16
78 check_err $? "Failed to set max_macs param value"
79 param_set test1 false
80 check_err $? "Failed to set test1 param value"
81
82 check_value max_macs post-set 16 32
83 check_value test1 post-set false Y
84
85 devlink dev reload $DL_HANDLE
86
87 check_value max_macs post-reload 16 16
88 check_value test1 post-reload false N
89
90 log_test "params test"
91}
92
93check_region_size()
94{
95 local name=$1
96 local size
97
98 size=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].size')
99 check_err $? "Failed to get $name region size"
100 [ $size -eq 32768 ]
101 check_err $? "Invalid $name region size"
102}
103
104check_region_snapshot_count()
105{
106 local name=$1
107 local phase_name=$2
108 local expected_count=$3
109 local count
110
111 count=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].snapshot | length')
112 [ $count -eq $expected_count ]
113 check_err $? "Unexpected $phase_name snapshot count"
114}
115
116regions_test()
117{
118 RET=0
119
120 local count
121
122 check_region_size dummy
123 check_region_snapshot_count dummy initial 0
124
125 echo ""> $DEBUGFS_DIR/take_snapshot
126 check_err $? "Failed to take first dummy region snapshot"
127 check_region_snapshot_count dummy post-first-snapshot 1
128
129 echo ""> $DEBUGFS_DIR/take_snapshot
130 check_err $? "Failed to take second dummy region snapshot"
131 check_region_snapshot_count dummy post-second-snapshot 2
132
133 echo ""> $DEBUGFS_DIR/take_snapshot
134 check_err $? "Failed to take third dummy region snapshot"
135 check_region_snapshot_count dummy post-third-snapshot 3
136
137 devlink region del $DL_HANDLE/dummy snapshot 1
138 check_err $? "Failed to delete first dummy region snapshot"
139
140 check_region_snapshot_count dummy post-first-delete 2
141
142 log_test "regions test"
143}
144
145setup_prepare()
146{
147 modprobe netdevsim
148 echo "$BUS_ADDR $PORT_COUNT" > /sys/bus/netdevsim/new_device
149 while [ ! -d $SYSFS_NET_DIR ] ; do :; done
150}
151
152cleanup()
153{
154 pre_cleanup
155 echo "$BUS_ADDR" > /sys/bus/netdevsim/del_device
156 modprobe -r netdevsim
157}
158
159trap cleanup EXIT
160
161setup_prepare
162
163tests_run
164
165exit $EXIT_STATUS