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