| .. | .. |
|---|
| 2 | 2 | # SPDX-License-Identifier: GPL-2.0 |
|---|
| 3 | 3 | |
|---|
| 4 | 4 | ############################################################################## |
|---|
| 5 | | -# Source library |
|---|
| 6 | | - |
|---|
| 7 | | -relative_path="${BASH_SOURCE%/*}" |
|---|
| 8 | | -if [[ "$relative_path" == "${BASH_SOURCE}" ]]; then |
|---|
| 9 | | - relative_path="." |
|---|
| 10 | | -fi |
|---|
| 11 | | - |
|---|
| 12 | | -source "$relative_path/lib.sh" |
|---|
| 13 | | - |
|---|
| 14 | | -############################################################################## |
|---|
| 15 | 5 | # Defines |
|---|
| 16 | 6 | |
|---|
| 17 | | -DEVLINK_DEV=$(devlink port show | grep "${NETIFS[p1]}" | \ |
|---|
| 18 | | - grep -v "${NETIFS[p1]}[0-9]" | cut -d" " -f1 | \ |
|---|
| 19 | | - rev | cut -d"/" -f2- | rev) |
|---|
| 20 | | -if [ -z "$DEVLINK_DEV" ]; then |
|---|
| 21 | | - echo "SKIP: ${NETIFS[p1]} has no devlink device registered for it" |
|---|
| 22 | | - exit 1 |
|---|
| 23 | | -fi |
|---|
| 24 | | -if [[ "$(echo $DEVLINK_DEV | grep -c pci)" -eq 0 ]]; then |
|---|
| 25 | | - echo "SKIP: devlink device's bus is not PCI" |
|---|
| 26 | | - exit 1 |
|---|
| 27 | | -fi |
|---|
| 7 | +if [[ ! -v DEVLINK_DEV ]]; then |
|---|
| 8 | + DEVLINK_DEV=$(devlink port show "${NETIFS[p1]:-$NETIF_NO_CABLE}" -j \ |
|---|
| 9 | + | jq -r '.port | keys[]' | cut -d/ -f-2) |
|---|
| 10 | + if [ -z "$DEVLINK_DEV" ]; then |
|---|
| 11 | + echo "SKIP: ${NETIFS[p1]} has no devlink device registered for it" |
|---|
| 12 | + exit 1 |
|---|
| 13 | + fi |
|---|
| 14 | + if [[ "$(echo $DEVLINK_DEV | grep -c pci)" -eq 0 ]]; then |
|---|
| 15 | + echo "SKIP: devlink device's bus is not PCI" |
|---|
| 16 | + exit 1 |
|---|
| 17 | + fi |
|---|
| 28 | 18 | |
|---|
| 29 | | -DEVLINK_VIDDID=$(lspci -s $(echo $DEVLINK_DEV | cut -d"/" -f2) \ |
|---|
| 30 | | - -n | cut -d" " -f3) |
|---|
| 19 | + DEVLINK_VIDDID=$(lspci -s $(echo $DEVLINK_DEV | cut -d"/" -f2) \ |
|---|
| 20 | + -n | cut -d" " -f3) |
|---|
| 21 | +fi |
|---|
| 31 | 22 | |
|---|
| 32 | 23 | ############################################################################## |
|---|
| 33 | 24 | # Sanity checks |
|---|
| 34 | 25 | |
|---|
| 35 | | -devlink -j resource show "$DEVLINK_DEV" &> /dev/null |
|---|
| 26 | +devlink help 2>&1 | grep resource &> /dev/null |
|---|
| 36 | 27 | if [ $? -ne 0 ]; then |
|---|
| 37 | 28 | echo "SKIP: iproute2 too old, missing devlink resource support" |
|---|
| 29 | + exit 1 |
|---|
| 30 | +fi |
|---|
| 31 | + |
|---|
| 32 | +devlink help 2>&1 | grep trap &> /dev/null |
|---|
| 33 | +if [ $? -ne 0 ]; then |
|---|
| 34 | + echo "SKIP: iproute2 too old, missing devlink trap support" |
|---|
| 35 | + exit 1 |
|---|
| 36 | +fi |
|---|
| 37 | + |
|---|
| 38 | +devlink dev help 2>&1 | grep info &> /dev/null |
|---|
| 39 | +if [ $? -ne 0 ]; then |
|---|
| 40 | + echo "SKIP: iproute2 too old, missing devlink dev info support" |
|---|
| 38 | 41 | exit 1 |
|---|
| 39 | 42 | fi |
|---|
| 40 | 43 | |
|---|
| .. | .. |
|---|
| 95 | 98 | check_err $? "Failed setting path $path to size $size" |
|---|
| 96 | 99 | } |
|---|
| 97 | 100 | |
|---|
| 101 | +devlink_resource_occ_get() |
|---|
| 102 | +{ |
|---|
| 103 | + devlink_resource_get "$@" | jq '.["occ"]' |
|---|
| 104 | +} |
|---|
| 105 | + |
|---|
| 98 | 106 | devlink_reload() |
|---|
| 99 | 107 | { |
|---|
| 100 | 108 | local still_pending |
|---|
| .. | .. |
|---|
| 106 | 114 | grep -c "size_new") |
|---|
| 107 | 115 | check_err $still_pending "Failed reload - There are still unset sizes" |
|---|
| 108 | 116 | } |
|---|
| 117 | + |
|---|
| 118 | +declare -A DEVLINK_ORIG |
|---|
| 119 | + |
|---|
| 120 | +# Changing pool type from static to dynamic causes reinterpretation of threshold |
|---|
| 121 | +# values. They therefore need to be saved before pool type is changed, then the |
|---|
| 122 | +# pool type can be changed, and then the new values need to be set up. Therefore |
|---|
| 123 | +# instead of saving the current state implicitly in the _set call, provide |
|---|
| 124 | +# functions for all three primitives: save, set, and restore. |
|---|
| 125 | + |
|---|
| 126 | +devlink_port_pool_threshold() |
|---|
| 127 | +{ |
|---|
| 128 | + local port=$1; shift |
|---|
| 129 | + local pool=$1; shift |
|---|
| 130 | + |
|---|
| 131 | + devlink sb port pool show $port pool $pool -j \ |
|---|
| 132 | + | jq '.port_pool."'"$port"'"[].threshold' |
|---|
| 133 | +} |
|---|
| 134 | + |
|---|
| 135 | +devlink_port_pool_th_save() |
|---|
| 136 | +{ |
|---|
| 137 | + local port=$1; shift |
|---|
| 138 | + local pool=$1; shift |
|---|
| 139 | + local key="port_pool($port,$pool).threshold" |
|---|
| 140 | + |
|---|
| 141 | + DEVLINK_ORIG[$key]=$(devlink_port_pool_threshold $port $pool) |
|---|
| 142 | +} |
|---|
| 143 | + |
|---|
| 144 | +devlink_port_pool_th_set() |
|---|
| 145 | +{ |
|---|
| 146 | + local port=$1; shift |
|---|
| 147 | + local pool=$1; shift |
|---|
| 148 | + local th=$1; shift |
|---|
| 149 | + |
|---|
| 150 | + devlink sb port pool set $port pool $pool th $th |
|---|
| 151 | +} |
|---|
| 152 | + |
|---|
| 153 | +devlink_port_pool_th_restore() |
|---|
| 154 | +{ |
|---|
| 155 | + local port=$1; shift |
|---|
| 156 | + local pool=$1; shift |
|---|
| 157 | + local key="port_pool($port,$pool).threshold" |
|---|
| 158 | + local -a orig=(${DEVLINK_ORIG[$key]}) |
|---|
| 159 | + |
|---|
| 160 | + if [[ -z $orig ]]; then |
|---|
| 161 | + echo "WARNING: Mismatched devlink_port_pool_th_restore" |
|---|
| 162 | + else |
|---|
| 163 | + devlink sb port pool set $port pool $pool th $orig |
|---|
| 164 | + fi |
|---|
| 165 | +} |
|---|
| 166 | + |
|---|
| 167 | +devlink_pool_size_thtype() |
|---|
| 168 | +{ |
|---|
| 169 | + local pool=$1; shift |
|---|
| 170 | + |
|---|
| 171 | + devlink sb pool show "$DEVLINK_DEV" pool $pool -j \ |
|---|
| 172 | + | jq -r '.pool[][] | (.size, .thtype)' |
|---|
| 173 | +} |
|---|
| 174 | + |
|---|
| 175 | +devlink_pool_size_thtype_save() |
|---|
| 176 | +{ |
|---|
| 177 | + local pool=$1; shift |
|---|
| 178 | + local key="pool($pool).size_thtype" |
|---|
| 179 | + |
|---|
| 180 | + DEVLINK_ORIG[$key]=$(devlink_pool_size_thtype $pool) |
|---|
| 181 | +} |
|---|
| 182 | + |
|---|
| 183 | +devlink_pool_size_thtype_set() |
|---|
| 184 | +{ |
|---|
| 185 | + local pool=$1; shift |
|---|
| 186 | + local thtype=$1; shift |
|---|
| 187 | + local size=$1; shift |
|---|
| 188 | + |
|---|
| 189 | + devlink sb pool set "$DEVLINK_DEV" pool $pool size $size thtype $thtype |
|---|
| 190 | +} |
|---|
| 191 | + |
|---|
| 192 | +devlink_pool_size_thtype_restore() |
|---|
| 193 | +{ |
|---|
| 194 | + local pool=$1; shift |
|---|
| 195 | + local key="pool($pool).size_thtype" |
|---|
| 196 | + local -a orig=(${DEVLINK_ORIG[$key]}) |
|---|
| 197 | + |
|---|
| 198 | + if [[ -z ${orig[0]} ]]; then |
|---|
| 199 | + echo "WARNING: Mismatched devlink_pool_size_thtype_restore" |
|---|
| 200 | + else |
|---|
| 201 | + devlink sb pool set "$DEVLINK_DEV" pool $pool \ |
|---|
| 202 | + size ${orig[0]} thtype ${orig[1]} |
|---|
| 203 | + fi |
|---|
| 204 | +} |
|---|
| 205 | + |
|---|
| 206 | +devlink_tc_bind_pool_th() |
|---|
| 207 | +{ |
|---|
| 208 | + local port=$1; shift |
|---|
| 209 | + local tc=$1; shift |
|---|
| 210 | + local dir=$1; shift |
|---|
| 211 | + |
|---|
| 212 | + devlink sb tc bind show $port tc $tc type $dir -j \ |
|---|
| 213 | + | jq -r '.tc_bind[][] | (.pool, .threshold)' |
|---|
| 214 | +} |
|---|
| 215 | + |
|---|
| 216 | +devlink_tc_bind_pool_th_save() |
|---|
| 217 | +{ |
|---|
| 218 | + local port=$1; shift |
|---|
| 219 | + local tc=$1; shift |
|---|
| 220 | + local dir=$1; shift |
|---|
| 221 | + local key="tc_bind($port,$dir,$tc).pool_th" |
|---|
| 222 | + |
|---|
| 223 | + DEVLINK_ORIG[$key]=$(devlink_tc_bind_pool_th $port $tc $dir) |
|---|
| 224 | +} |
|---|
| 225 | + |
|---|
| 226 | +devlink_tc_bind_pool_th_set() |
|---|
| 227 | +{ |
|---|
| 228 | + local port=$1; shift |
|---|
| 229 | + local tc=$1; shift |
|---|
| 230 | + local dir=$1; shift |
|---|
| 231 | + local pool=$1; shift |
|---|
| 232 | + local th=$1; shift |
|---|
| 233 | + |
|---|
| 234 | + devlink sb tc bind set $port tc $tc type $dir pool $pool th $th |
|---|
| 235 | +} |
|---|
| 236 | + |
|---|
| 237 | +devlink_tc_bind_pool_th_restore() |
|---|
| 238 | +{ |
|---|
| 239 | + local port=$1; shift |
|---|
| 240 | + local tc=$1; shift |
|---|
| 241 | + local dir=$1; shift |
|---|
| 242 | + local key="tc_bind($port,$dir,$tc).pool_th" |
|---|
| 243 | + local -a orig=(${DEVLINK_ORIG[$key]}) |
|---|
| 244 | + |
|---|
| 245 | + if [[ -z ${orig[0]} ]]; then |
|---|
| 246 | + echo "WARNING: Mismatched devlink_tc_bind_pool_th_restore" |
|---|
| 247 | + else |
|---|
| 248 | + devlink sb tc bind set $port tc $tc type $dir \ |
|---|
| 249 | + pool ${orig[0]} th ${orig[1]} |
|---|
| 250 | + fi |
|---|
| 251 | +} |
|---|
| 252 | + |
|---|
| 253 | +devlink_traps_num_get() |
|---|
| 254 | +{ |
|---|
| 255 | + devlink -j trap | jq '.[]["'$DEVLINK_DEV'"] | length' |
|---|
| 256 | +} |
|---|
| 257 | + |
|---|
| 258 | +devlink_traps_get() |
|---|
| 259 | +{ |
|---|
| 260 | + devlink -j trap | jq -r '.[]["'$DEVLINK_DEV'"][].name' |
|---|
| 261 | +} |
|---|
| 262 | + |
|---|
| 263 | +devlink_trap_type_get() |
|---|
| 264 | +{ |
|---|
| 265 | + local trap_name=$1; shift |
|---|
| 266 | + |
|---|
| 267 | + devlink -j trap show $DEVLINK_DEV trap $trap_name \ |
|---|
| 268 | + | jq -r '.[][][].type' |
|---|
| 269 | +} |
|---|
| 270 | + |
|---|
| 271 | +devlink_trap_action_set() |
|---|
| 272 | +{ |
|---|
| 273 | + local trap_name=$1; shift |
|---|
| 274 | + local action=$1; shift |
|---|
| 275 | + |
|---|
| 276 | + # Pipe output to /dev/null to avoid expected warnings. |
|---|
| 277 | + devlink trap set $DEVLINK_DEV trap $trap_name \ |
|---|
| 278 | + action $action &> /dev/null |
|---|
| 279 | +} |
|---|
| 280 | + |
|---|
| 281 | +devlink_trap_action_get() |
|---|
| 282 | +{ |
|---|
| 283 | + local trap_name=$1; shift |
|---|
| 284 | + |
|---|
| 285 | + devlink -j trap show $DEVLINK_DEV trap $trap_name \ |
|---|
| 286 | + | jq -r '.[][][].action' |
|---|
| 287 | +} |
|---|
| 288 | + |
|---|
| 289 | +devlink_trap_group_get() |
|---|
| 290 | +{ |
|---|
| 291 | + devlink -j trap show $DEVLINK_DEV trap $trap_name \ |
|---|
| 292 | + | jq -r '.[][][].group' |
|---|
| 293 | +} |
|---|
| 294 | + |
|---|
| 295 | +devlink_trap_metadata_test() |
|---|
| 296 | +{ |
|---|
| 297 | + local trap_name=$1; shift |
|---|
| 298 | + local metadata=$1; shift |
|---|
| 299 | + |
|---|
| 300 | + devlink -jv trap show $DEVLINK_DEV trap $trap_name \ |
|---|
| 301 | + | jq -e '.[][][].metadata | contains(["'$metadata'"])' \ |
|---|
| 302 | + &> /dev/null |
|---|
| 303 | +} |
|---|
| 304 | + |
|---|
| 305 | +devlink_trap_rx_packets_get() |
|---|
| 306 | +{ |
|---|
| 307 | + local trap_name=$1; shift |
|---|
| 308 | + |
|---|
| 309 | + devlink -js trap show $DEVLINK_DEV trap $trap_name \ |
|---|
| 310 | + | jq '.[][][]["stats"]["rx"]["packets"]' |
|---|
| 311 | +} |
|---|
| 312 | + |
|---|
| 313 | +devlink_trap_rx_bytes_get() |
|---|
| 314 | +{ |
|---|
| 315 | + local trap_name=$1; shift |
|---|
| 316 | + |
|---|
| 317 | + devlink -js trap show $DEVLINK_DEV trap $trap_name \ |
|---|
| 318 | + | jq '.[][][]["stats"]["rx"]["bytes"]' |
|---|
| 319 | +} |
|---|
| 320 | + |
|---|
| 321 | +devlink_trap_stats_idle_test() |
|---|
| 322 | +{ |
|---|
| 323 | + local trap_name=$1; shift |
|---|
| 324 | + local t0_packets t0_bytes |
|---|
| 325 | + local t1_packets t1_bytes |
|---|
| 326 | + |
|---|
| 327 | + t0_packets=$(devlink_trap_rx_packets_get $trap_name) |
|---|
| 328 | + t0_bytes=$(devlink_trap_rx_bytes_get $trap_name) |
|---|
| 329 | + |
|---|
| 330 | + sleep 1 |
|---|
| 331 | + |
|---|
| 332 | + t1_packets=$(devlink_trap_rx_packets_get $trap_name) |
|---|
| 333 | + t1_bytes=$(devlink_trap_rx_bytes_get $trap_name) |
|---|
| 334 | + |
|---|
| 335 | + if [[ $t0_packets -eq $t1_packets && $t0_bytes -eq $t1_bytes ]]; then |
|---|
| 336 | + return 0 |
|---|
| 337 | + else |
|---|
| 338 | + return 1 |
|---|
| 339 | + fi |
|---|
| 340 | +} |
|---|
| 341 | + |
|---|
| 342 | +devlink_traps_enable_all() |
|---|
| 343 | +{ |
|---|
| 344 | + local trap_name |
|---|
| 345 | + |
|---|
| 346 | + for trap_name in $(devlink_traps_get); do |
|---|
| 347 | + devlink_trap_action_set $trap_name "trap" |
|---|
| 348 | + done |
|---|
| 349 | +} |
|---|
| 350 | + |
|---|
| 351 | +devlink_traps_disable_all() |
|---|
| 352 | +{ |
|---|
| 353 | + for trap_name in $(devlink_traps_get); do |
|---|
| 354 | + devlink_trap_action_set $trap_name "drop" |
|---|
| 355 | + done |
|---|
| 356 | +} |
|---|
| 357 | + |
|---|
| 358 | +devlink_trap_groups_get() |
|---|
| 359 | +{ |
|---|
| 360 | + devlink -j trap group | jq -r '.[]["'$DEVLINK_DEV'"][].name' |
|---|
| 361 | +} |
|---|
| 362 | + |
|---|
| 363 | +devlink_trap_group_action_set() |
|---|
| 364 | +{ |
|---|
| 365 | + local group_name=$1; shift |
|---|
| 366 | + local action=$1; shift |
|---|
| 367 | + |
|---|
| 368 | + # Pipe output to /dev/null to avoid expected warnings. |
|---|
| 369 | + devlink trap group set $DEVLINK_DEV group $group_name action $action \ |
|---|
| 370 | + &> /dev/null |
|---|
| 371 | +} |
|---|
| 372 | + |
|---|
| 373 | +devlink_trap_group_rx_packets_get() |
|---|
| 374 | +{ |
|---|
| 375 | + local group_name=$1; shift |
|---|
| 376 | + |
|---|
| 377 | + devlink -js trap group show $DEVLINK_DEV group $group_name \ |
|---|
| 378 | + | jq '.[][][]["stats"]["rx"]["packets"]' |
|---|
| 379 | +} |
|---|
| 380 | + |
|---|
| 381 | +devlink_trap_group_rx_bytes_get() |
|---|
| 382 | +{ |
|---|
| 383 | + local group_name=$1; shift |
|---|
| 384 | + |
|---|
| 385 | + devlink -js trap group show $DEVLINK_DEV group $group_name \ |
|---|
| 386 | + | jq '.[][][]["stats"]["rx"]["bytes"]' |
|---|
| 387 | +} |
|---|
| 388 | + |
|---|
| 389 | +devlink_trap_group_stats_idle_test() |
|---|
| 390 | +{ |
|---|
| 391 | + local group_name=$1; shift |
|---|
| 392 | + local t0_packets t0_bytes |
|---|
| 393 | + local t1_packets t1_bytes |
|---|
| 394 | + |
|---|
| 395 | + t0_packets=$(devlink_trap_group_rx_packets_get $group_name) |
|---|
| 396 | + t0_bytes=$(devlink_trap_group_rx_bytes_get $group_name) |
|---|
| 397 | + |
|---|
| 398 | + sleep 1 |
|---|
| 399 | + |
|---|
| 400 | + t1_packets=$(devlink_trap_group_rx_packets_get $group_name) |
|---|
| 401 | + t1_bytes=$(devlink_trap_group_rx_bytes_get $group_name) |
|---|
| 402 | + |
|---|
| 403 | + if [[ $t0_packets -eq $t1_packets && $t0_bytes -eq $t1_bytes ]]; then |
|---|
| 404 | + return 0 |
|---|
| 405 | + else |
|---|
| 406 | + return 1 |
|---|
| 407 | + fi |
|---|
| 408 | +} |
|---|
| 409 | + |
|---|
| 410 | +devlink_trap_exception_test() |
|---|
| 411 | +{ |
|---|
| 412 | + local trap_name=$1; shift |
|---|
| 413 | + local group_name |
|---|
| 414 | + |
|---|
| 415 | + group_name=$(devlink_trap_group_get $trap_name) |
|---|
| 416 | + |
|---|
| 417 | + devlink_trap_stats_idle_test $trap_name |
|---|
| 418 | + check_fail $? "Trap stats idle when packets should have been trapped" |
|---|
| 419 | + |
|---|
| 420 | + devlink_trap_group_stats_idle_test $group_name |
|---|
| 421 | + check_fail $? "Trap group idle when packets should have been trapped" |
|---|
| 422 | +} |
|---|
| 423 | + |
|---|
| 424 | +devlink_trap_drop_test() |
|---|
| 425 | +{ |
|---|
| 426 | + local trap_name=$1; shift |
|---|
| 427 | + local dev=$1; shift |
|---|
| 428 | + local handle=$1; shift |
|---|
| 429 | + local group_name |
|---|
| 430 | + |
|---|
| 431 | + group_name=$(devlink_trap_group_get $trap_name) |
|---|
| 432 | + |
|---|
| 433 | + # This is the common part of all the tests. It checks that stats are |
|---|
| 434 | + # initially idle, then non-idle after changing the trap action and |
|---|
| 435 | + # finally idle again. It also makes sure the packets are dropped and |
|---|
| 436 | + # never forwarded. |
|---|
| 437 | + devlink_trap_stats_idle_test $trap_name |
|---|
| 438 | + check_err $? "Trap stats not idle with initial drop action" |
|---|
| 439 | + devlink_trap_group_stats_idle_test $group_name |
|---|
| 440 | + check_err $? "Trap group stats not idle with initial drop action" |
|---|
| 441 | + |
|---|
| 442 | + devlink_trap_action_set $trap_name "trap" |
|---|
| 443 | + devlink_trap_stats_idle_test $trap_name |
|---|
| 444 | + check_fail $? "Trap stats idle after setting action to trap" |
|---|
| 445 | + devlink_trap_group_stats_idle_test $group_name |
|---|
| 446 | + check_fail $? "Trap group stats idle after setting action to trap" |
|---|
| 447 | + |
|---|
| 448 | + devlink_trap_action_set $trap_name "drop" |
|---|
| 449 | + |
|---|
| 450 | + devlink_trap_stats_idle_test $trap_name |
|---|
| 451 | + check_err $? "Trap stats not idle after setting action to drop" |
|---|
| 452 | + devlink_trap_group_stats_idle_test $group_name |
|---|
| 453 | + check_err $? "Trap group stats not idle after setting action to drop" |
|---|
| 454 | + |
|---|
| 455 | + tc_check_packets "dev $dev egress" $handle 0 |
|---|
| 456 | + check_err $? "Packets were not dropped" |
|---|
| 457 | +} |
|---|
| 458 | + |
|---|
| 459 | +devlink_trap_drop_cleanup() |
|---|
| 460 | +{ |
|---|
| 461 | + local mz_pid=$1; shift |
|---|
| 462 | + local dev=$1; shift |
|---|
| 463 | + local proto=$1; shift |
|---|
| 464 | + local pref=$1; shift |
|---|
| 465 | + local handle=$1; shift |
|---|
| 466 | + |
|---|
| 467 | + kill $mz_pid && wait $mz_pid &> /dev/null |
|---|
| 468 | + tc filter del dev $dev egress protocol $proto pref $pref handle $handle flower |
|---|
| 469 | +} |
|---|
| 470 | + |
|---|
| 471 | +devlink_trap_stats_test() |
|---|
| 472 | +{ |
|---|
| 473 | + local test_name=$1; shift |
|---|
| 474 | + local trap_name=$1; shift |
|---|
| 475 | + local send_one="$@" |
|---|
| 476 | + local t0_packets |
|---|
| 477 | + local t1_packets |
|---|
| 478 | + |
|---|
| 479 | + RET=0 |
|---|
| 480 | + |
|---|
| 481 | + t0_packets=$(devlink_trap_rx_packets_get $trap_name) |
|---|
| 482 | + |
|---|
| 483 | + $send_one && sleep 1 |
|---|
| 484 | + |
|---|
| 485 | + t1_packets=$(devlink_trap_rx_packets_get $trap_name) |
|---|
| 486 | + |
|---|
| 487 | + if [[ $t1_packets -eq $t0_packets ]]; then |
|---|
| 488 | + check_err 1 "Trap stats did not increase" |
|---|
| 489 | + fi |
|---|
| 490 | + |
|---|
| 491 | + log_test "$test_name" |
|---|
| 492 | +} |
|---|
| 493 | + |
|---|
| 494 | +devlink_trap_policers_num_get() |
|---|
| 495 | +{ |
|---|
| 496 | + devlink -j -p trap policer show | jq '.[]["'$DEVLINK_DEV'"] | length' |
|---|
| 497 | +} |
|---|
| 498 | + |
|---|
| 499 | +devlink_trap_policer_rate_get() |
|---|
| 500 | +{ |
|---|
| 501 | + local policer_id=$1; shift |
|---|
| 502 | + |
|---|
| 503 | + devlink -j -p trap policer show $DEVLINK_DEV policer $policer_id \ |
|---|
| 504 | + | jq '.[][][]["rate"]' |
|---|
| 505 | +} |
|---|
| 506 | + |
|---|
| 507 | +devlink_trap_policer_burst_get() |
|---|
| 508 | +{ |
|---|
| 509 | + local policer_id=$1; shift |
|---|
| 510 | + |
|---|
| 511 | + devlink -j -p trap policer show $DEVLINK_DEV policer $policer_id \ |
|---|
| 512 | + | jq '.[][][]["burst"]' |
|---|
| 513 | +} |
|---|
| 514 | + |
|---|
| 515 | +devlink_trap_policer_rx_dropped_get() |
|---|
| 516 | +{ |
|---|
| 517 | + local policer_id=$1; shift |
|---|
| 518 | + |
|---|
| 519 | + devlink -j -p -s trap policer show $DEVLINK_DEV policer $policer_id \ |
|---|
| 520 | + | jq '.[][][]["stats"]["rx"]["dropped"]' |
|---|
| 521 | +} |
|---|
| 522 | + |
|---|
| 523 | +devlink_trap_group_policer_get() |
|---|
| 524 | +{ |
|---|
| 525 | + local group_name=$1; shift |
|---|
| 526 | + |
|---|
| 527 | + devlink -j -p trap group show $DEVLINK_DEV group $group_name \ |
|---|
| 528 | + | jq '.[][][]["policer"]' |
|---|
| 529 | +} |
|---|
| 530 | + |
|---|
| 531 | +devlink_trap_policer_ids_get() |
|---|
| 532 | +{ |
|---|
| 533 | + devlink -j -p trap policer show \ |
|---|
| 534 | + | jq '.[]["'$DEVLINK_DEV'"][]["policer"]' |
|---|
| 535 | +} |
|---|
| 536 | + |
|---|
| 537 | +devlink_port_by_netdev() |
|---|
| 538 | +{ |
|---|
| 539 | + local if_name=$1 |
|---|
| 540 | + |
|---|
| 541 | + devlink -j port show $if_name | jq -e '.[] | keys' | jq -r '.[]' |
|---|
| 542 | +} |
|---|
| 543 | + |
|---|
| 544 | +devlink_cpu_port_get() |
|---|
| 545 | +{ |
|---|
| 546 | + local cpu_dl_port_num=$(devlink port list | grep "$DEVLINK_DEV" | |
|---|
| 547 | + grep cpu | cut -d/ -f3 | cut -d: -f1 | |
|---|
| 548 | + sed -n '1p') |
|---|
| 549 | + |
|---|
| 550 | + echo "$DEVLINK_DEV/$cpu_dl_port_num" |
|---|
| 551 | +} |
|---|
| 552 | + |
|---|
| 553 | +devlink_cell_size_get() |
|---|
| 554 | +{ |
|---|
| 555 | + devlink sb pool show "$DEVLINK_DEV" pool 0 -j \ |
|---|
| 556 | + | jq '.pool[][].cell_size' |
|---|
| 557 | +} |
|---|