1b3cb7df9SIdo Schimmel#!/bin/bash 2b3cb7df9SIdo Schimmel# SPDX-License-Identifier: GPL-2.0 3b3cb7df9SIdo Schimmel# 4b3cb7df9SIdo Schimmel# This test is for checking devlink-trap functionality. It makes use of 5b3cb7df9SIdo Schimmel# netdevsim which implements the required callbacks. 6b3cb7df9SIdo Schimmel 7b3cb7df9SIdo Schimmellib_dir=$(dirname $0)/../../../net/forwarding 8b3cb7df9SIdo Schimmel 9b3cb7df9SIdo SchimmelALL_TESTS=" 10b3cb7df9SIdo Schimmel init_test 11b3cb7df9SIdo Schimmel trap_action_test 12b3cb7df9SIdo Schimmel trap_metadata_test 13b3cb7df9SIdo Schimmel bad_trap_test 14b3cb7df9SIdo Schimmel bad_trap_action_test 15b3cb7df9SIdo Schimmel trap_stats_test 16b3cb7df9SIdo Schimmel trap_group_action_test 17b3cb7df9SIdo Schimmel bad_trap_group_test 18b3cb7df9SIdo Schimmel trap_group_stats_test 195fbff58eSIdo Schimmel trap_policer_test 205fbff58eSIdo Schimmel trap_policer_bind_test 21b3cb7df9SIdo Schimmel port_del_test 22b3cb7df9SIdo Schimmel dev_del_test 23b3cb7df9SIdo Schimmel" 24b3cb7df9SIdo SchimmelNETDEVSIM_PATH=/sys/bus/netdevsim/ 25b3cb7df9SIdo SchimmelDEV_ADDR=1337 26b3cb7df9SIdo SchimmelDEV=netdevsim${DEV_ADDR} 275fbff58eSIdo SchimmelDEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV/ 28b3cb7df9SIdo SchimmelSLEEP_TIME=1 29b3cb7df9SIdo SchimmelNETDEV="" 30b3cb7df9SIdo SchimmelNUM_NETIFS=0 31b3cb7df9SIdo Schimmelsource $lib_dir/lib.sh 320521a262SPetr Machata 330521a262SPetr MachataDEVLINK_DEV= 34b3cb7df9SIdo Schimmelsource $lib_dir/devlink_lib.sh 350521a262SPetr MachataDEVLINK_DEV=netdevsim/${DEV} 36b3cb7df9SIdo Schimmel 37b3cb7df9SIdo Schimmelrequire_command udevadm 38b3cb7df9SIdo Schimmel 39b3cb7df9SIdo Schimmelmodprobe netdevsim &> /dev/null 40b3cb7df9SIdo Schimmelif [ ! -d "$NETDEVSIM_PATH" ]; then 41b3cb7df9SIdo Schimmel echo "SKIP: No netdevsim support" 42b3cb7df9SIdo Schimmel exit 1 43b3cb7df9SIdo Schimmelfi 44b3cb7df9SIdo Schimmel 45b3cb7df9SIdo Schimmelif [ -d "${NETDEVSIM_PATH}/devices/netdevsim${DEV_ADDR}" ]; then 46b3cb7df9SIdo Schimmel echo "SKIP: Device netdevsim${DEV_ADDR} already exists" 47b3cb7df9SIdo Schimmel exit 1 48b3cb7df9SIdo Schimmelfi 49b3cb7df9SIdo Schimmel 50*d1c4a346SJakub Kicinskicheck_netdev_down() 51*d1c4a346SJakub Kicinski{ 52*d1c4a346SJakub Kicinski state=$(cat /sys/class/net/${NETDEV}/flags) 53*d1c4a346SJakub Kicinski 54*d1c4a346SJakub Kicinski if [ $((state & 1)) -ne 0 ]; then 55*d1c4a346SJakub Kicinski echo "WARNING: unexpected interface UP, disable NetworkManager?" 56*d1c4a346SJakub Kicinski 57*d1c4a346SJakub Kicinski ip link set dev $NETDEV down 58*d1c4a346SJakub Kicinski fi 59*d1c4a346SJakub Kicinski} 60*d1c4a346SJakub Kicinski 61b3cb7df9SIdo Schimmelinit_test() 62b3cb7df9SIdo Schimmel{ 63b3cb7df9SIdo Schimmel RET=0 64b3cb7df9SIdo Schimmel 65b3cb7df9SIdo Schimmel test $(devlink_traps_num_get) -ne 0 66b3cb7df9SIdo Schimmel check_err $? "No traps were registered" 67b3cb7df9SIdo Schimmel 68b3cb7df9SIdo Schimmel log_test "Initialization" 69b3cb7df9SIdo Schimmel} 70b3cb7df9SIdo Schimmel 71b3cb7df9SIdo Schimmeltrap_action_test() 72b3cb7df9SIdo Schimmel{ 73b3cb7df9SIdo Schimmel local orig_action 74b3cb7df9SIdo Schimmel local trap_name 75b3cb7df9SIdo Schimmel local action 76b3cb7df9SIdo Schimmel 77b3cb7df9SIdo Schimmel RET=0 78b3cb7df9SIdo Schimmel 79b3cb7df9SIdo Schimmel for trap_name in $(devlink_traps_get); do 80b3cb7df9SIdo Schimmel # The action of non-drop traps cannot be changed. 81b3cb7df9SIdo Schimmel if [ $(devlink_trap_type_get $trap_name) = "drop" ]; then 82b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "trap" 83b3cb7df9SIdo Schimmel action=$(devlink_trap_action_get $trap_name) 84b3cb7df9SIdo Schimmel if [ $action != "trap" ]; then 85b3cb7df9SIdo Schimmel check_err 1 "Trap $trap_name did not change action to trap" 86b3cb7df9SIdo Schimmel fi 87b3cb7df9SIdo Schimmel 88b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "drop" 89b3cb7df9SIdo Schimmel action=$(devlink_trap_action_get $trap_name) 90b3cb7df9SIdo Schimmel if [ $action != "drop" ]; then 91b3cb7df9SIdo Schimmel check_err 1 "Trap $trap_name did not change action to drop" 92b3cb7df9SIdo Schimmel fi 93b3cb7df9SIdo Schimmel else 94b3cb7df9SIdo Schimmel orig_action=$(devlink_trap_action_get $trap_name) 95b3cb7df9SIdo Schimmel 96b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "trap" 97b3cb7df9SIdo Schimmel action=$(devlink_trap_action_get $trap_name) 98b3cb7df9SIdo Schimmel if [ $action != $orig_action ]; then 99b3cb7df9SIdo Schimmel check_err 1 "Trap $trap_name changed action when should not" 100b3cb7df9SIdo Schimmel fi 101b3cb7df9SIdo Schimmel 102b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "drop" 103b3cb7df9SIdo Schimmel action=$(devlink_trap_action_get $trap_name) 104b3cb7df9SIdo Schimmel if [ $action != $orig_action ]; then 105b3cb7df9SIdo Schimmel check_err 1 "Trap $trap_name changed action when should not" 106b3cb7df9SIdo Schimmel fi 107b3cb7df9SIdo Schimmel fi 108b3cb7df9SIdo Schimmel done 109b3cb7df9SIdo Schimmel 110b3cb7df9SIdo Schimmel log_test "Trap action" 111b3cb7df9SIdo Schimmel} 112b3cb7df9SIdo Schimmel 113b3cb7df9SIdo Schimmeltrap_metadata_test() 114b3cb7df9SIdo Schimmel{ 115b3cb7df9SIdo Schimmel local trap_name 116b3cb7df9SIdo Schimmel 117b3cb7df9SIdo Schimmel RET=0 118b3cb7df9SIdo Schimmel 119b3cb7df9SIdo Schimmel for trap_name in $(devlink_traps_get); do 120b3cb7df9SIdo Schimmel devlink_trap_metadata_test $trap_name "input_port" 121b3cb7df9SIdo Schimmel check_err $? "Input port not reported as metadata of trap $trap_name" 1227a3c3f44SJiri Pirko if [ $trap_name == "ingress_flow_action_drop" ] || 1237a3c3f44SJiri Pirko [ $trap_name == "egress_flow_action_drop" ]; then 1247a3c3f44SJiri Pirko devlink_trap_metadata_test $trap_name "flow_action_cookie" 1257a3c3f44SJiri Pirko check_err $? "Flow action cookie not reported as metadata of trap $trap_name" 1267a3c3f44SJiri Pirko fi 127b3cb7df9SIdo Schimmel done 128b3cb7df9SIdo Schimmel 129b3cb7df9SIdo Schimmel log_test "Trap metadata" 130b3cb7df9SIdo Schimmel} 131b3cb7df9SIdo Schimmel 132b3cb7df9SIdo Schimmelbad_trap_test() 133b3cb7df9SIdo Schimmel{ 134b3cb7df9SIdo Schimmel RET=0 135b3cb7df9SIdo Schimmel 136b3cb7df9SIdo Schimmel devlink_trap_action_set "made_up_trap" "drop" 137b3cb7df9SIdo Schimmel check_fail $? "Did not get an error for non-existing trap" 138b3cb7df9SIdo Schimmel 139b3cb7df9SIdo Schimmel log_test "Non-existing trap" 140b3cb7df9SIdo Schimmel} 141b3cb7df9SIdo Schimmel 142b3cb7df9SIdo Schimmelbad_trap_action_test() 143b3cb7df9SIdo Schimmel{ 144b3cb7df9SIdo Schimmel local traps_arr 145b3cb7df9SIdo Schimmel local trap_name 146b3cb7df9SIdo Schimmel 147b3cb7df9SIdo Schimmel RET=0 148b3cb7df9SIdo Schimmel 149b3cb7df9SIdo Schimmel # Pick first trap. 150b3cb7df9SIdo Schimmel traps_arr=($(devlink_traps_get)) 151b3cb7df9SIdo Schimmel trap_name=${traps_arr[0]} 152b3cb7df9SIdo Schimmel 153b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "made_up_action" 154b3cb7df9SIdo Schimmel check_fail $? "Did not get an error for non-existing trap action" 155b3cb7df9SIdo Schimmel 156b3cb7df9SIdo Schimmel log_test "Non-existing trap action" 157b3cb7df9SIdo Schimmel} 158b3cb7df9SIdo Schimmel 159b3cb7df9SIdo Schimmeltrap_stats_test() 160b3cb7df9SIdo Schimmel{ 161b3cb7df9SIdo Schimmel local trap_name 162b3cb7df9SIdo Schimmel 163b3cb7df9SIdo Schimmel RET=0 164b3cb7df9SIdo Schimmel 165*d1c4a346SJakub Kicinski check_netdev_down 166b3cb7df9SIdo Schimmel for trap_name in $(devlink_traps_get); do 167b3cb7df9SIdo Schimmel devlink_trap_stats_idle_test $trap_name 168b3cb7df9SIdo Schimmel check_err $? "Stats of trap $trap_name not idle when netdev down" 169b3cb7df9SIdo Schimmel 170b3cb7df9SIdo Schimmel ip link set dev $NETDEV up 171b3cb7df9SIdo Schimmel 172b3cb7df9SIdo Schimmel if [ $(devlink_trap_type_get $trap_name) = "drop" ]; then 173b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "trap" 174b3cb7df9SIdo Schimmel devlink_trap_stats_idle_test $trap_name 175b3cb7df9SIdo Schimmel check_fail $? "Stats of trap $trap_name idle when action is trap" 176b3cb7df9SIdo Schimmel 177b3cb7df9SIdo Schimmel devlink_trap_action_set $trap_name "drop" 178b3cb7df9SIdo Schimmel devlink_trap_stats_idle_test $trap_name 179b3cb7df9SIdo Schimmel check_err $? "Stats of trap $trap_name not idle when action is drop" 1807a4f5479SOleksandr Mazur 1817a4f5479SOleksandr Mazur echo "y"> $DEBUGFS_DIR/fail_trap_drop_counter_get 1827a4f5479SOleksandr Mazur devlink -s trap show $DEVLINK_DEV trap $trap_name &> /dev/null 1837a4f5479SOleksandr Mazur check_fail $? "Managed to read trap (hard dropped) statistics when should not" 1847a4f5479SOleksandr Mazur echo "n"> $DEBUGFS_DIR/fail_trap_drop_counter_get 1857a4f5479SOleksandr Mazur devlink -s trap show $DEVLINK_DEV trap $trap_name &> /dev/null 1867a4f5479SOleksandr Mazur check_err $? "Did not manage to read trap (hard dropped) statistics when should" 1877a4f5479SOleksandr Mazur 1887a4f5479SOleksandr Mazur devlink_trap_drop_stats_idle_test $trap_name 1897a4f5479SOleksandr Mazur check_fail $? "Drop stats of trap $trap_name idle when should not" 190b3cb7df9SIdo Schimmel else 191b3cb7df9SIdo Schimmel devlink_trap_stats_idle_test $trap_name 192b3cb7df9SIdo Schimmel check_fail $? "Stats of non-drop trap $trap_name idle when should not" 193b3cb7df9SIdo Schimmel fi 194b3cb7df9SIdo Schimmel 195b3cb7df9SIdo Schimmel ip link set dev $NETDEV down 196b3cb7df9SIdo Schimmel done 197b3cb7df9SIdo Schimmel 198b3cb7df9SIdo Schimmel log_test "Trap statistics" 199b3cb7df9SIdo Schimmel} 200b3cb7df9SIdo Schimmel 201b3cb7df9SIdo Schimmeltrap_group_action_test() 202b3cb7df9SIdo Schimmel{ 203b3cb7df9SIdo Schimmel local curr_group group_name 204b3cb7df9SIdo Schimmel local trap_name 205b3cb7df9SIdo Schimmel local trap_type 206b3cb7df9SIdo Schimmel local action 207b3cb7df9SIdo Schimmel 208b3cb7df9SIdo Schimmel RET=0 209b3cb7df9SIdo Schimmel 210b3cb7df9SIdo Schimmel for group_name in $(devlink_trap_groups_get); do 211b3cb7df9SIdo Schimmel devlink_trap_group_action_set $group_name "trap" 212b3cb7df9SIdo Schimmel 213b3cb7df9SIdo Schimmel for trap_name in $(devlink_traps_get); do 214b3cb7df9SIdo Schimmel curr_group=$(devlink_trap_group_get $trap_name) 215b3cb7df9SIdo Schimmel if [ $curr_group != $group_name ]; then 216b3cb7df9SIdo Schimmel continue 217b3cb7df9SIdo Schimmel fi 218b3cb7df9SIdo Schimmel 219b3cb7df9SIdo Schimmel trap_type=$(devlink_trap_type_get $trap_name) 220b3cb7df9SIdo Schimmel if [ $trap_type != "drop" ]; then 221b3cb7df9SIdo Schimmel continue 222b3cb7df9SIdo Schimmel fi 223b3cb7df9SIdo Schimmel 224b3cb7df9SIdo Schimmel action=$(devlink_trap_action_get $trap_name) 225b3cb7df9SIdo Schimmel if [ $action != "trap" ]; then 226b3cb7df9SIdo Schimmel check_err 1 "Trap $trap_name did not change action to trap" 227b3cb7df9SIdo Schimmel fi 228b3cb7df9SIdo Schimmel done 229b3cb7df9SIdo Schimmel 230b3cb7df9SIdo Schimmel devlink_trap_group_action_set $group_name "drop" 231b3cb7df9SIdo Schimmel 232b3cb7df9SIdo Schimmel for trap_name in $(devlink_traps_get); do 233b3cb7df9SIdo Schimmel curr_group=$(devlink_trap_group_get $trap_name) 234b3cb7df9SIdo Schimmel if [ $curr_group != $group_name ]; then 235b3cb7df9SIdo Schimmel continue 236b3cb7df9SIdo Schimmel fi 237b3cb7df9SIdo Schimmel 238b3cb7df9SIdo Schimmel trap_type=$(devlink_trap_type_get $trap_name) 239b3cb7df9SIdo Schimmel if [ $trap_type != "drop" ]; then 240b3cb7df9SIdo Schimmel continue 241b3cb7df9SIdo Schimmel fi 242b3cb7df9SIdo Schimmel 243b3cb7df9SIdo Schimmel action=$(devlink_trap_action_get $trap_name) 244b3cb7df9SIdo Schimmel if [ $action != "drop" ]; then 245b3cb7df9SIdo Schimmel check_err 1 "Trap $trap_name did not change action to drop" 246b3cb7df9SIdo Schimmel fi 247b3cb7df9SIdo Schimmel done 248b3cb7df9SIdo Schimmel done 249b3cb7df9SIdo Schimmel 250b3cb7df9SIdo Schimmel log_test "Trap group action" 251b3cb7df9SIdo Schimmel} 252b3cb7df9SIdo Schimmel 253b3cb7df9SIdo Schimmelbad_trap_group_test() 254b3cb7df9SIdo Schimmel{ 255b3cb7df9SIdo Schimmel RET=0 256b3cb7df9SIdo Schimmel 257b3cb7df9SIdo Schimmel devlink_trap_group_action_set "made_up_trap_group" "drop" 258b3cb7df9SIdo Schimmel check_fail $? "Did not get an error for non-existing trap group" 259b3cb7df9SIdo Schimmel 260b3cb7df9SIdo Schimmel log_test "Non-existing trap group" 261b3cb7df9SIdo Schimmel} 262b3cb7df9SIdo Schimmel 263b3cb7df9SIdo Schimmeltrap_group_stats_test() 264b3cb7df9SIdo Schimmel{ 265b3cb7df9SIdo Schimmel local group_name 266b3cb7df9SIdo Schimmel 267b3cb7df9SIdo Schimmel RET=0 268b3cb7df9SIdo Schimmel 269*d1c4a346SJakub Kicinski check_netdev_down 270b3cb7df9SIdo Schimmel for group_name in $(devlink_trap_groups_get); do 271b3cb7df9SIdo Schimmel devlink_trap_group_stats_idle_test $group_name 272b3cb7df9SIdo Schimmel check_err $? "Stats of trap group $group_name not idle when netdev down" 273b3cb7df9SIdo Schimmel 274b3cb7df9SIdo Schimmel ip link set dev $NETDEV up 275b3cb7df9SIdo Schimmel 276b3cb7df9SIdo Schimmel devlink_trap_group_action_set $group_name "trap" 277b3cb7df9SIdo Schimmel devlink_trap_group_stats_idle_test $group_name 278b3cb7df9SIdo Schimmel check_fail $? "Stats of trap group $group_name idle when action is trap" 279b3cb7df9SIdo Schimmel 280b3cb7df9SIdo Schimmel devlink_trap_group_action_set $group_name "drop" 281b3cb7df9SIdo Schimmel ip link set dev $NETDEV down 282b3cb7df9SIdo Schimmel done 283b3cb7df9SIdo Schimmel 284b3cb7df9SIdo Schimmel log_test "Trap group statistics" 285b3cb7df9SIdo Schimmel} 286b3cb7df9SIdo Schimmel 2875fbff58eSIdo Schimmeltrap_policer_test() 2885fbff58eSIdo Schimmel{ 2895fbff58eSIdo Schimmel local packets_t0 2905fbff58eSIdo Schimmel local packets_t1 2915fbff58eSIdo Schimmel 2924d59e59cSIdo Schimmel RET=0 2934d59e59cSIdo Schimmel 2945fbff58eSIdo Schimmel if [ $(devlink_trap_policers_num_get) -eq 0 ]; then 2955fbff58eSIdo Schimmel check_err 1 "Failed to dump policers" 2965fbff58eSIdo Schimmel fi 2975fbff58eSIdo Schimmel 2985fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1337 &> /dev/null 2995fbff58eSIdo Schimmel check_fail $? "Did not get an error for setting a non-existing policer" 3005fbff58eSIdo Schimmel devlink trap policer show $DEVLINK_DEV policer 1337 &> /dev/null 3015fbff58eSIdo Schimmel check_fail $? "Did not get an error for getting a non-existing policer" 3025fbff58eSIdo Schimmel 3035fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1 rate 2000 burst 16 3045fbff58eSIdo Schimmel check_err $? "Failed to set valid parameters for a valid policer" 3055fbff58eSIdo Schimmel if [ $(devlink_trap_policer_rate_get 1) -ne 2000 ]; then 3065fbff58eSIdo Schimmel check_err 1 "Policer rate was not changed" 3075fbff58eSIdo Schimmel fi 3085fbff58eSIdo Schimmel if [ $(devlink_trap_policer_burst_get 1) -ne 16 ]; then 3095fbff58eSIdo Schimmel check_err 1 "Policer burst size was not changed" 3105fbff58eSIdo Schimmel fi 3115fbff58eSIdo Schimmel 3125fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1 rate 0 &> /dev/null 3135fbff58eSIdo Schimmel check_fail $? "Policer rate was changed to rate lower than limit" 3145fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1 rate 9000 &> /dev/null 3155fbff58eSIdo Schimmel check_fail $? "Policer rate was changed to rate higher than limit" 3165fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1 burst 2 &> /dev/null 3175fbff58eSIdo Schimmel check_fail $? "Policer burst size was changed to burst size lower than limit" 3185fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1 rate 65537 &> /dev/null 3195fbff58eSIdo Schimmel check_fail $? "Policer burst size was changed to burst size higher than limit" 3205fbff58eSIdo Schimmel echo "y" > $DEBUGFS_DIR/fail_trap_policer_set 3215fbff58eSIdo Schimmel devlink trap policer set $DEVLINK_DEV policer 1 rate 3000 &> /dev/null 3225fbff58eSIdo Schimmel check_fail $? "Managed to set policer rate when should not" 3235fbff58eSIdo Schimmel echo "n" > $DEBUGFS_DIR/fail_trap_policer_set 3245fbff58eSIdo Schimmel if [ $(devlink_trap_policer_rate_get 1) -ne 2000 ]; then 3255fbff58eSIdo Schimmel check_err 1 "Policer rate was changed to an invalid value" 3265fbff58eSIdo Schimmel fi 3275fbff58eSIdo Schimmel if [ $(devlink_trap_policer_burst_get 1) -ne 16 ]; then 3285fbff58eSIdo Schimmel check_err 1 "Policer burst size was changed to an invalid value" 3295fbff58eSIdo Schimmel fi 3305fbff58eSIdo Schimmel 3315fbff58eSIdo Schimmel packets_t0=$(devlink_trap_policer_rx_dropped_get 1) 3325fbff58eSIdo Schimmel sleep .5 3335fbff58eSIdo Schimmel packets_t1=$(devlink_trap_policer_rx_dropped_get 1) 3345fbff58eSIdo Schimmel if [ ! $packets_t1 -gt $packets_t0 ]; then 3355fbff58eSIdo Schimmel check_err 1 "Policer drop counter was not incremented" 3365fbff58eSIdo Schimmel fi 3375fbff58eSIdo Schimmel 3385fbff58eSIdo Schimmel echo "y"> $DEBUGFS_DIR/fail_trap_policer_counter_get 3395fbff58eSIdo Schimmel devlink -s trap policer show $DEVLINK_DEV policer 1 &> /dev/null 3405fbff58eSIdo Schimmel check_fail $? "Managed to read policer drop counter when should not" 3415fbff58eSIdo Schimmel echo "n"> $DEBUGFS_DIR/fail_trap_policer_counter_get 3425fbff58eSIdo Schimmel devlink -s trap policer show $DEVLINK_DEV policer 1 &> /dev/null 3435fbff58eSIdo Schimmel check_err $? "Did not manage to read policer drop counter when should" 3445fbff58eSIdo Schimmel 3455fbff58eSIdo Schimmel log_test "Trap policer" 3465fbff58eSIdo Schimmel} 3475fbff58eSIdo Schimmel 3485fbff58eSIdo Schimmeltrap_group_check_policer() 3495fbff58eSIdo Schimmel{ 3505fbff58eSIdo Schimmel local group_name=$1; shift 3515fbff58eSIdo Schimmel 3525fbff58eSIdo Schimmel devlink -j -p trap group show $DEVLINK_DEV group $group_name \ 3535fbff58eSIdo Schimmel | jq -e '.[][][]["policer"]' &> /dev/null 3545fbff58eSIdo Schimmel} 3555fbff58eSIdo Schimmel 3565fbff58eSIdo Schimmeltrap_policer_bind_test() 3575fbff58eSIdo Schimmel{ 3584d59e59cSIdo Schimmel RET=0 3594d59e59cSIdo Schimmel 3605fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 1 3615fbff58eSIdo Schimmel check_err $? "Failed to bind a valid policer" 3625fbff58eSIdo Schimmel if [ $(devlink_trap_group_policer_get "l2_drops") -ne 1 ]; then 3635fbff58eSIdo Schimmel check_err 1 "Bound policer was not changed" 3645fbff58eSIdo Schimmel fi 3655fbff58eSIdo Schimmel 3665fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 1337 \ 3675fbff58eSIdo Schimmel &> /dev/null 3685fbff58eSIdo Schimmel check_fail $? "Did not get an error for binding a non-existing policer" 3695fbff58eSIdo Schimmel if [ $(devlink_trap_group_policer_get "l2_drops") -ne 1 ]; then 3705fbff58eSIdo Schimmel check_err 1 "Bound policer was changed when should not" 3715fbff58eSIdo Schimmel fi 3725fbff58eSIdo Schimmel 3735fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 0 3745fbff58eSIdo Schimmel check_err $? "Failed to unbind a policer when using ID 0" 3755fbff58eSIdo Schimmel trap_group_check_policer "l2_drops" 3765fbff58eSIdo Schimmel check_fail $? "Trap group has a policer after unbinding with ID 0" 3775fbff58eSIdo Schimmel 3785fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 1 3795fbff58eSIdo Schimmel check_err $? "Failed to bind a valid policer" 3805fbff58eSIdo Schimmel 3815fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops nopolicer 3825fbff58eSIdo Schimmel check_err $? "Failed to unbind a policer when using 'nopolicer' keyword" 3835fbff58eSIdo Schimmel trap_group_check_policer "l2_drops" 3845fbff58eSIdo Schimmel check_fail $? "Trap group has a policer after unbinding with 'nopolicer' keyword" 3855fbff58eSIdo Schimmel 3865fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 1 3875fbff58eSIdo Schimmel check_err $? "Failed to bind a valid policer" 3885fbff58eSIdo Schimmel 3895fbff58eSIdo Schimmel echo "y"> $DEBUGFS_DIR/fail_trap_group_set 3905fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 2 \ 3915fbff58eSIdo Schimmel &> /dev/null 3925fbff58eSIdo Schimmel check_fail $? "Managed to bind a policer when should not" 3935fbff58eSIdo Schimmel echo "n"> $DEBUGFS_DIR/fail_trap_group_set 3945fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops policer 2 3955fbff58eSIdo Schimmel check_err $? "Did not manage to bind a policer when should" 3965fbff58eSIdo Schimmel 3975fbff58eSIdo Schimmel devlink trap group set $DEVLINK_DEV group l2_drops action drop \ 3985fbff58eSIdo Schimmel policer 1337 &> /dev/null 3995fbff58eSIdo Schimmel check_fail $? "Did not get an error for partially modified trap group" 4005fbff58eSIdo Schimmel 4015fbff58eSIdo Schimmel log_test "Trap policer binding" 4025fbff58eSIdo Schimmel} 4035fbff58eSIdo Schimmel 404b3cb7df9SIdo Schimmelport_del_test() 405b3cb7df9SIdo Schimmel{ 406b3cb7df9SIdo Schimmel local group_name 407b3cb7df9SIdo Schimmel local i 408b3cb7df9SIdo Schimmel 409b3cb7df9SIdo Schimmel # The test never fails. It is meant to exercise different code paths 410b3cb7df9SIdo Schimmel # and make sure we properly dismantle a port while packets are 411b3cb7df9SIdo Schimmel # in-flight. 412b3cb7df9SIdo Schimmel RET=0 413b3cb7df9SIdo Schimmel 414b3cb7df9SIdo Schimmel devlink_traps_enable_all 415b3cb7df9SIdo Schimmel 416b3cb7df9SIdo Schimmel for i in $(seq 1 10); do 417b3cb7df9SIdo Schimmel ip link set dev $NETDEV up 418b3cb7df9SIdo Schimmel 419b3cb7df9SIdo Schimmel sleep $SLEEP_TIME 420b3cb7df9SIdo Schimmel 421b3cb7df9SIdo Schimmel netdevsim_port_destroy 422b3cb7df9SIdo Schimmel netdevsim_port_create 423b3cb7df9SIdo Schimmel udevadm settle 424b3cb7df9SIdo Schimmel done 425b3cb7df9SIdo Schimmel 426b3cb7df9SIdo Schimmel devlink_traps_disable_all 427b3cb7df9SIdo Schimmel 428b3cb7df9SIdo Schimmel log_test "Port delete" 429b3cb7df9SIdo Schimmel} 430b3cb7df9SIdo Schimmel 431b3cb7df9SIdo Schimmeldev_del_test() 432b3cb7df9SIdo Schimmel{ 433b3cb7df9SIdo Schimmel local group_name 434b3cb7df9SIdo Schimmel local i 435b3cb7df9SIdo Schimmel 436b3cb7df9SIdo Schimmel # The test never fails. It is meant to exercise different code paths 437b3cb7df9SIdo Schimmel # and make sure we properly unregister traps while packets are 438b3cb7df9SIdo Schimmel # in-flight. 439b3cb7df9SIdo Schimmel RET=0 440b3cb7df9SIdo Schimmel 441b3cb7df9SIdo Schimmel devlink_traps_enable_all 442b3cb7df9SIdo Schimmel 443b3cb7df9SIdo Schimmel for i in $(seq 1 10); do 444b3cb7df9SIdo Schimmel ip link set dev $NETDEV up 445b3cb7df9SIdo Schimmel 446b3cb7df9SIdo Schimmel sleep $SLEEP_TIME 447b3cb7df9SIdo Schimmel 448b3cb7df9SIdo Schimmel cleanup 449b3cb7df9SIdo Schimmel setup_prepare 450b3cb7df9SIdo Schimmel done 451b3cb7df9SIdo Schimmel 452b3cb7df9SIdo Schimmel devlink_traps_disable_all 453b3cb7df9SIdo Schimmel 454b3cb7df9SIdo Schimmel log_test "Device delete" 455b3cb7df9SIdo Schimmel} 456b3cb7df9SIdo Schimmel 457b3cb7df9SIdo Schimmelnetdevsim_dev_create() 458b3cb7df9SIdo Schimmel{ 459b3cb7df9SIdo Schimmel echo "$DEV_ADDR 0" > ${NETDEVSIM_PATH}/new_device 460b3cb7df9SIdo Schimmel} 461b3cb7df9SIdo Schimmel 462b3cb7df9SIdo Schimmelnetdevsim_dev_destroy() 463b3cb7df9SIdo Schimmel{ 464b3cb7df9SIdo Schimmel echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device 465b3cb7df9SIdo Schimmel} 466b3cb7df9SIdo Schimmel 467b3cb7df9SIdo Schimmelnetdevsim_port_create() 468b3cb7df9SIdo Schimmel{ 469b3cb7df9SIdo Schimmel echo 1 > ${NETDEVSIM_PATH}/devices/${DEV}/new_port 470b3cb7df9SIdo Schimmel} 471b3cb7df9SIdo Schimmel 472b3cb7df9SIdo Schimmelnetdevsim_port_destroy() 473b3cb7df9SIdo Schimmel{ 474b3cb7df9SIdo Schimmel echo 1 > ${NETDEVSIM_PATH}/devices/${DEV}/del_port 475b3cb7df9SIdo Schimmel} 476b3cb7df9SIdo Schimmel 477b3cb7df9SIdo Schimmelsetup_prepare() 478b3cb7df9SIdo Schimmel{ 479b3cb7df9SIdo Schimmel local netdev 480b3cb7df9SIdo Schimmel 481b3cb7df9SIdo Schimmel netdevsim_dev_create 482b3cb7df9SIdo Schimmel 483b3cb7df9SIdo Schimmel if [ ! -d "${NETDEVSIM_PATH}/devices/${DEV}" ]; then 484b3cb7df9SIdo Schimmel echo "Failed to create netdevsim device" 485b3cb7df9SIdo Schimmel exit 1 486b3cb7df9SIdo Schimmel fi 487b3cb7df9SIdo Schimmel 488b3cb7df9SIdo Schimmel netdevsim_port_create 489b3cb7df9SIdo Schimmel 490b3cb7df9SIdo Schimmel if [ ! -d "${NETDEVSIM_PATH}/devices/${DEV}/net/" ]; then 491b3cb7df9SIdo Schimmel echo "Failed to create netdevsim port" 492b3cb7df9SIdo Schimmel exit 1 493b3cb7df9SIdo Schimmel fi 494b3cb7df9SIdo Schimmel 495b3cb7df9SIdo Schimmel # Wait for udev to rename newly created netdev. 496b3cb7df9SIdo Schimmel udevadm settle 497b3cb7df9SIdo Schimmel 498b3cb7df9SIdo Schimmel NETDEV=$(ls ${NETDEVSIM_PATH}/devices/${DEV}/net/) 499b3cb7df9SIdo Schimmel} 500b3cb7df9SIdo Schimmel 501b3cb7df9SIdo Schimmelcleanup() 502b3cb7df9SIdo Schimmel{ 503b3cb7df9SIdo Schimmel pre_cleanup 504b3cb7df9SIdo Schimmel netdevsim_port_destroy 505b3cb7df9SIdo Schimmel netdevsim_dev_destroy 506b3cb7df9SIdo Schimmel} 507b3cb7df9SIdo Schimmel 508b3cb7df9SIdo Schimmeltrap cleanup EXIT 509b3cb7df9SIdo Schimmel 510b3cb7df9SIdo Schimmelsetup_prepare 511b3cb7df9SIdo Schimmel 512b3cb7df9SIdo Schimmeltests_run 513b3cb7df9SIdo Schimmel 514b3cb7df9SIdo Schimmelexit $EXIT_STATUS 515