diff options
| -rw-r--r-- | tools/testing/selftests/net/forwarding/devlink_lib.sh | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/tools/testing/selftests/net/forwarding/devlink_lib.sh b/tools/testing/selftests/net/forwarding/devlink_lib.sh index 2b9296f6aa07..13d03a6d85ba 100644 --- a/tools/testing/selftests/net/forwarding/devlink_lib.sh +++ b/tools/testing/selftests/net/forwarding/devlink_lib.sh | |||
| @@ -29,6 +29,12 @@ if [ $? -ne 0 ]; then | |||
| 29 | exit 1 | 29 | exit 1 |
| 30 | fi | 30 | fi |
| 31 | 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 | |||
| 32 | ############################################################################## | 38 | ############################################################################## |
| 33 | # Devlink helpers | 39 | # Devlink helpers |
| 34 | 40 | ||
| @@ -192,3 +198,160 @@ devlink_tc_bind_pool_th_restore() | |||
| 192 | devlink sb tc bind set $port tc $tc type $dir \ | 198 | devlink sb tc bind set $port tc $tc type $dir \ |
| 193 | pool ${orig[0]} th ${orig[1]} | 199 | pool ${orig[0]} th ${orig[1]} |
| 194 | } | 200 | } |
| 201 | |||
| 202 | devlink_traps_num_get() | ||
| 203 | { | ||
| 204 | devlink -j trap | jq '.[]["'$DEVLINK_DEV'"] | length' | ||
| 205 | } | ||
| 206 | |||
| 207 | devlink_traps_get() | ||
| 208 | { | ||
| 209 | devlink -j trap | jq -r '.[]["'$DEVLINK_DEV'"][].name' | ||
| 210 | } | ||
| 211 | |||
| 212 | devlink_trap_type_get() | ||
| 213 | { | ||
| 214 | local trap_name=$1; shift | ||
| 215 | |||
| 216 | devlink -j trap show $DEVLINK_DEV trap $trap_name \ | ||
| 217 | | jq -r '.[][][].type' | ||
| 218 | } | ||
| 219 | |||
| 220 | devlink_trap_action_set() | ||
| 221 | { | ||
| 222 | local trap_name=$1; shift | ||
| 223 | local action=$1; shift | ||
| 224 | |||
| 225 | # Pipe output to /dev/null to avoid expected warnings. | ||
| 226 | devlink trap set $DEVLINK_DEV trap $trap_name \ | ||
| 227 | action $action &> /dev/null | ||
| 228 | } | ||
| 229 | |||
| 230 | devlink_trap_action_get() | ||
| 231 | { | ||
| 232 | local trap_name=$1; shift | ||
| 233 | |||
| 234 | devlink -j trap show $DEVLINK_DEV trap $trap_name \ | ||
| 235 | | jq -r '.[][][].action' | ||
| 236 | } | ||
| 237 | |||
| 238 | devlink_trap_group_get() | ||
| 239 | { | ||
| 240 | devlink -j trap show $DEVLINK_DEV trap $trap_name \ | ||
| 241 | | jq -r '.[][][].group' | ||
| 242 | } | ||
| 243 | |||
| 244 | devlink_trap_metadata_test() | ||
| 245 | { | ||
| 246 | local trap_name=$1; shift | ||
| 247 | local metadata=$1; shift | ||
| 248 | |||
| 249 | devlink -jv trap show $DEVLINK_DEV trap $trap_name \ | ||
| 250 | | jq -e '.[][][].metadata | contains(["'$metadata'"])' \ | ||
| 251 | &> /dev/null | ||
| 252 | } | ||
| 253 | |||
| 254 | devlink_trap_rx_packets_get() | ||
| 255 | { | ||
| 256 | local trap_name=$1; shift | ||
| 257 | |||
| 258 | devlink -js trap show $DEVLINK_DEV trap $trap_name \ | ||
| 259 | | jq '.[][][]["stats"]["rx"]["packets"]' | ||
| 260 | } | ||
| 261 | |||
| 262 | devlink_trap_rx_bytes_get() | ||
| 263 | { | ||
| 264 | local trap_name=$1; shift | ||
| 265 | |||
| 266 | devlink -js trap show $DEVLINK_DEV trap $trap_name \ | ||
| 267 | | jq '.[][][]["stats"]["rx"]["bytes"]' | ||
| 268 | } | ||
| 269 | |||
| 270 | devlink_trap_stats_idle_test() | ||
| 271 | { | ||
| 272 | local trap_name=$1; shift | ||
| 273 | local t0_packets t0_bytes | ||
| 274 | local t1_packets t1_bytes | ||
| 275 | |||
| 276 | t0_packets=$(devlink_trap_rx_packets_get $trap_name) | ||
| 277 | t0_bytes=$(devlink_trap_rx_bytes_get $trap_name) | ||
| 278 | |||
| 279 | sleep 1 | ||
| 280 | |||
| 281 | t1_packets=$(devlink_trap_rx_packets_get $trap_name) | ||
| 282 | t1_bytes=$(devlink_trap_rx_bytes_get $trap_name) | ||
| 283 | |||
| 284 | if [[ $t0_packets -eq $t1_packets && $t0_bytes -eq $t1_bytes ]]; then | ||
| 285 | return 0 | ||
| 286 | else | ||
| 287 | return 1 | ||
| 288 | fi | ||
| 289 | } | ||
| 290 | |||
| 291 | devlink_traps_enable_all() | ||
| 292 | { | ||
| 293 | local trap_name | ||
| 294 | |||
| 295 | for trap_name in $(devlink_traps_get); do | ||
| 296 | devlink_trap_action_set $trap_name "trap" | ||
| 297 | done | ||
| 298 | } | ||
| 299 | |||
| 300 | devlink_traps_disable_all() | ||
| 301 | { | ||
| 302 | for trap_name in $(devlink_traps_get); do | ||
| 303 | devlink_trap_action_set $trap_name "drop" | ||
| 304 | done | ||
| 305 | } | ||
| 306 | |||
| 307 | devlink_trap_groups_get() | ||
| 308 | { | ||
| 309 | devlink -j trap group | jq -r '.[]["'$DEVLINK_DEV'"][].name' | ||
| 310 | } | ||
| 311 | |||
| 312 | devlink_trap_group_action_set() | ||
| 313 | { | ||
| 314 | local group_name=$1; shift | ||
| 315 | local action=$1; shift | ||
| 316 | |||
| 317 | # Pipe output to /dev/null to avoid expected warnings. | ||
| 318 | devlink trap group set $DEVLINK_DEV group $group_name action $action \ | ||
| 319 | &> /dev/null | ||
| 320 | } | ||
| 321 | |||
| 322 | devlink_trap_group_rx_packets_get() | ||
| 323 | { | ||
| 324 | local group_name=$1; shift | ||
| 325 | |||
| 326 | devlink -js trap group show $DEVLINK_DEV group $group_name \ | ||
| 327 | | jq '.[][][]["stats"]["rx"]["packets"]' | ||
| 328 | } | ||
| 329 | |||
| 330 | devlink_trap_group_rx_bytes_get() | ||
| 331 | { | ||
| 332 | local group_name=$1; shift | ||
| 333 | |||
| 334 | devlink -js trap group show $DEVLINK_DEV group $group_name \ | ||
| 335 | | jq '.[][][]["stats"]["rx"]["bytes"]' | ||
| 336 | } | ||
| 337 | |||
| 338 | devlink_trap_group_stats_idle_test() | ||
| 339 | { | ||
| 340 | local group_name=$1; shift | ||
| 341 | local t0_packets t0_bytes | ||
| 342 | local t1_packets t1_bytes | ||
| 343 | |||
| 344 | t0_packets=$(devlink_trap_group_rx_packets_get $group_name) | ||
| 345 | t0_bytes=$(devlink_trap_group_rx_bytes_get $group_name) | ||
| 346 | |||
| 347 | sleep 1 | ||
| 348 | |||
| 349 | t1_packets=$(devlink_trap_group_rx_packets_get $group_name) | ||
| 350 | t1_bytes=$(devlink_trap_group_rx_bytes_get $group_name) | ||
| 351 | |||
| 352 | if [[ $t0_packets -eq $t1_packets && $t0_bytes -eq $t1_bytes ]]; then | ||
| 353 | return 0 | ||
| 354 | else | ||
| 355 | return 1 | ||
| 356 | fi | ||
| 357 | } | ||
