xref: /openbmc/linux/tools/testing/selftests/drivers/net/mlxsw/devlink_trap.sh (revision 976e3645923bdd2fe7893aae33fd7a21098bfb28)
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