2 # SPDX-License-Identifier: GPL-2.0
4 lib_dir=$(dirname $0)/../../../net/forwarding
6 ALL_TESTS="fw_flash_test params_test regions_test reload_test \
7 netns_reload_test resource_test"
13 DEV_NAME=netdevsim$BUS_ADDR
14 SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV_NAME/net/
15 DEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV_NAME/
16 DL_HANDLE=netdevsim/$DEV_NAME
22 devlink dev flash $DL_HANDLE file dummy
23 check_err $? "Failed to flash with status updates on"
25 echo "n"> $DEBUGFS_DIR/fw_update_status
26 check_err $? "Failed to disable status updates"
28 devlink dev flash $DL_HANDLE file dummy
29 check_err $? "Failed to flash with status updates off"
31 log_test "fw flash test"
38 cmd_jq "devlink dev param show $DL_HANDLE name $name -j" \
39 '.[][][].values[] | select(.cmode == "driverinit").value'
47 devlink dev param set $DL_HANDLE name $name cmode driverinit value $value
54 local expected_param_value=$3
55 local expected_debugfs_value=$4
58 value=$(param_get $name)
59 check_err $? "Failed to get $name param value"
60 [ "$value" == "$expected_param_value" ]
61 check_err $? "Unexpected $phase_name $name param value"
62 value=$(<$DEBUGFS_DIR/$name)
63 check_err $? "Failed to get $name debugfs value"
64 [ "$value" == "$expected_debugfs_value" ]
65 check_err $? "Unexpected $phase_name $name debugfs value"
75 check_value max_macs initial 32 32
76 check_value test1 initial true Y
79 check_err $? "Failed to set max_macs param value"
81 check_err $? "Failed to set test1 param value"
83 check_value max_macs post-set 16 32
84 check_value test1 post-set false Y
86 devlink dev reload $DL_HANDLE
88 check_value max_macs post-reload 16 16
89 check_value test1 post-reload false N
91 log_test "params test"
99 size=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].size')
100 check_err $? "Failed to get $name region size"
102 check_err $? "Invalid $name region size"
105 check_region_snapshot_count()
109 local expected_count=$3
112 count=$(devlink region show $DL_HANDLE/$name -j | jq -e -r '.[][].snapshot | length')
113 [ $count -eq $expected_count ]
114 check_err $? "Unexpected $phase_name snapshot count"
123 check_region_size dummy
124 check_region_snapshot_count dummy initial 0
126 echo ""> $DEBUGFS_DIR/take_snapshot
127 check_err $? "Failed to take first dummy region snapshot"
128 check_region_snapshot_count dummy post-first-snapshot 1
130 echo ""> $DEBUGFS_DIR/take_snapshot
131 check_err $? "Failed to take second dummy region snapshot"
132 check_region_snapshot_count dummy post-second-snapshot 2
134 echo ""> $DEBUGFS_DIR/take_snapshot
135 check_err $? "Failed to take third dummy region snapshot"
136 check_region_snapshot_count dummy post-third-snapshot 3
138 devlink region del $DL_HANDLE/dummy snapshot 1
139 check_err $? "Failed to delete first dummy region snapshot"
141 check_region_snapshot_count dummy post-first-delete 2
143 log_test "regions test"
150 devlink dev reload $DL_HANDLE
151 check_err $? "Failed to reload"
153 echo "y"> $DEBUGFS_DIR/fail_reload
154 check_err $? "Failed to setup devlink reload to fail"
156 devlink dev reload $DL_HANDLE
157 check_fail $? "Unexpected success of devlink reload"
159 echo "n"> $DEBUGFS_DIR/fail_reload
160 check_err $? "Failed to setup devlink reload not to fail"
162 devlink dev reload $DL_HANDLE
163 check_err $? "Failed to reload after set not to fail"
165 echo "y"> $DEBUGFS_DIR/dont_allow_reload
166 check_err $? "Failed to forbid devlink reload"
168 devlink dev reload $DL_HANDLE
169 check_fail $? "Unexpected success of devlink reload"
171 echo "n"> $DEBUGFS_DIR/dont_allow_reload
172 check_err $? "Failed to re-enable devlink reload"
174 devlink dev reload $DL_HANDLE
175 check_err $? "Failed to reload after re-enable"
177 log_test "reload test"
185 check_err $? "Failed add netns \"testns1\""
187 check_err $? "Failed add netns \"testns2\""
189 devlink dev reload $DL_HANDLE netns testns1
190 check_err $? "Failed to reload into netns \"testns1\""
192 devlink -N testns1 dev reload $DL_HANDLE netns testns2
193 check_err $? "Failed to reload from netns \"testns1\" into netns \"testns2\""
198 log_test "netns reload test"
210 cmd_jq "devlink -N $netns resource show $DL_HANDLE -j" \
211 ".[][][] | select(.name == \"$parentname\").resources[] \
212 | select(.name == \"$name\").$type"
220 check_err $? "Failed add netns \"testns1\""
222 check_err $? "Failed add netns \"testns2\""
224 devlink dev reload $DL_HANDLE netns testns1
225 check_err $? "Failed to reload into netns \"testns1\""
227 # Create dummy dev to add the address and routes on.
229 ip -n testns1 link add name $DUMMYDEV type dummy
230 check_err $? "Failed create dummy device"
231 ip -n testns1 link set $DUMMYDEV up
232 check_err $? "Failed bring up dummy device"
233 ip -n testns1 a a 192.0.1.1/24 dev $DUMMYDEV
234 check_err $? "Failed add an IP address to dummy device"
236 local occ=$(res_val_get testns1 IPv4 fib occ)
237 local limit=$((occ+1))
239 # Set fib size limit to handle one another route only.
241 devlink -N testns1 resource set $DL_HANDLE path IPv4/fib size $limit
242 check_err $? "Failed to set IPv4/fib resource size"
243 local size_new=$(res_val_get testns1 IPv4 fib size_new)
244 [ "$size_new" -eq "$limit" ]
245 check_err $? "Unexpected \"size_new\" value (got $size_new, expected $limit)"
247 devlink -N testns1 dev reload $DL_HANDLE
248 check_err $? "Failed to reload"
249 local size=$(res_val_get testns1 IPv4 fib size)
250 [ "$size" -eq "$limit" ]
251 check_err $? "Unexpected \"size\" value (got $size, expected $limit)"
253 # Insert 2 routes, the first is going to be inserted,
254 # the second is expected to fail to be inserted.
256 ip -n testns1 r a 192.0.2.0/24 via 192.0.1.2
257 check_err $? "Failed to add route"
259 ip -n testns1 r a 192.0.3.0/24 via 192.0.1.2
260 check_fail $? "Unexpected successful route add over limit"
262 # Now create another dummy in second network namespace and
263 # insert two routes. That is over the limit of the netdevsim
264 # instance in the first namespace. Move the netdevsim instance
265 # into the second namespace and expect it to fail.
267 ip -n testns2 link add name $DUMMYDEV type dummy
268 check_err $? "Failed create dummy device"
269 ip -n testns2 link set $DUMMYDEV up
270 check_err $? "Failed bring up dummy device"
271 ip -n testns2 a a 192.0.1.1/24 dev $DUMMYDEV
272 check_err $? "Failed add an IP address to dummy device"
273 ip -n testns2 r a 192.0.2.0/24 via 192.0.1.2
274 check_err $? "Failed to add route"
275 ip -n testns2 r a 192.0.3.0/24 via 192.0.1.2
276 check_err $? "Failed to add route"
278 devlink -N testns1 dev reload $DL_HANDLE netns testns2
279 check_fail $? "Unexpected successful reload from netns \"testns1\" into netns \"testns2\""
284 log_test "resource test"
290 echo "$BUS_ADDR $PORT_COUNT" > /sys/bus/netdevsim/new_device
291 while [ ! -d $SYSFS_NET_DIR ] ; do :; done
297 echo "$BUS_ADDR" > /sys/bus/netdevsim/del_device
298 modprobe -r netdevsim