1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# 4# Test generic devlink-trap functionality over mlxsw. These tests are not 5# specific to a single trap, but do not check the devlink-trap common 6# infrastructure either. 7 8lib_dir=$(dirname $0)/../../../net/forwarding 9 10ALL_TESTS=" 11 dev_del_test 12" 13NUM_NETIFS=4 14source $lib_dir/tc_common.sh 15source $lib_dir/lib.sh 16source $lib_dir/devlink_lib.sh 17 18h1_create() 19{ 20 simple_if_init $h1 21} 22 23h1_destroy() 24{ 25 simple_if_fini $h1 26} 27 28h2_create() 29{ 30 simple_if_init $h2 31} 32 33h2_destroy() 34{ 35 simple_if_fini $h2 36} 37 38switch_create() 39{ 40 ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0 41 42 ip link set dev $swp1 master br0 43 ip link set dev $swp2 master br0 44 45 ip link set dev br0 up 46 ip link set dev $swp1 up 47 ip link set dev $swp2 up 48} 49 50switch_destroy() 51{ 52 ip link set dev $swp2 down 53 ip link set dev $swp1 down 54 55 ip link del dev br0 56} 57 58setup_prepare() 59{ 60 h1=${NETIFS[p1]} 61 swp1=${NETIFS[p2]} 62 63 swp2=${NETIFS[p3]} 64 h2=${NETIFS[p4]} 65 66 vrf_prepare 67 68 h1_create 69 h2_create 70 71 switch_create 72} 73 74cleanup() 75{ 76 pre_cleanup 77 78 switch_destroy 79 80 h2_destroy 81 h1_destroy 82 83 vrf_cleanup 84} 85 86dev_del_test() 87{ 88 local trap_name="source_mac_is_multicast" 89 local smac=01:02:03:04:05:06 90 local num_iter=5 91 local mz_pid 92 local i 93 94 $MZ $h1 -c 0 -p 100 -a $smac -b bcast -t ip -q & 95 mz_pid=$! 96 97 # The purpose of this test is to make sure we correctly dismantle a 98 # port while packets are trapped from it. This is done by reloading the 99 # the driver while the 'ingress_smac_mc_drop' trap is triggered. 100 RET=0 101 102 for i in $(seq 1 $num_iter); do 103 log_info "Iteration $i / $num_iter" 104 105 devlink_trap_action_set $trap_name "trap" 106 sleep 1 107 108 devlink_reload 109 # Allow netdevices to be re-created following the reload 110 sleep 20 111 112 cleanup 113 setup_prepare 114 setup_wait 115 done 116 117 log_test "Device delete" 118 119 kill $mz_pid && wait $mz_pid &> /dev/null 120} 121 122trap cleanup EXIT 123 124setup_prepare 125setup_wait 126 127tests_run 128 129exit $EXIT_STATUS 130