1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Test generic devlink-trap functionality over mlxsw. These tests are not
# specific to a single trap, but do not check the devlink-trap common
# infrastructure either.

lib_dir=$(dirname $0)/../../../net/forwarding

ALL_TESTS="
	dev_del_test
"
NUM_NETIFS=4
source $lib_dir/tc_common.sh
source $lib_dir/lib.sh
source $lib_dir/devlink_lib.sh

h1_create()
{
	simple_if_init $h1
}

h1_destroy()
{
	simple_if_fini $h1
}

h2_create()
{
	simple_if_init $h2
}

h2_destroy()
{
	simple_if_fini $h2
}

switch_create()
{
	ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0

	ip link set dev $swp1 master br0
	ip link set dev $swp2 master br0

	ip link set dev br0 up
	ip link set dev $swp1 up
	ip link set dev $swp2 up
}

switch_destroy()
{
	ip link set dev $swp2 down
	ip link set dev $swp1 down

	ip link del dev br0
}

setup_prepare()
{
	h1=${NETIFS[p1]}
	swp1=${NETIFS[p2]}

	swp2=${NETIFS[p3]}
	h2=${NETIFS[p4]}

	vrf_prepare

	h1_create
	h2_create

	switch_create
}

cleanup()
{
	pre_cleanup

	switch_destroy

	h2_destroy
	h1_destroy

	vrf_cleanup
}

dev_del_test()
{
	local trap_name="source_mac_is_multicast"
	local smac=01:02:03:04:05:06
	local num_iter=5
	local mz_pid
	local i

	$MZ $h1 -c 0 -p 100 -a $smac -b bcast -t ip -q &
	mz_pid=$!

	# The purpose of this test is to make sure we correctly dismantle a
	# port while packets are trapped from it. This is done by reloading the
	# the driver while the 'ingress_smac_mc_drop' trap is triggered.
	RET=0

	for i in $(seq 1 $num_iter); do
		log_info "Iteration $i / $num_iter"

		devlink_trap_action_set $trap_name "trap"
		sleep 1

		devlink_reload
		# Allow netdevices to be re-created following the reload
		sleep 20

		cleanup
		setup_prepare
		setup_wait
	done

	log_test "Device delete"

	kill_process $mz_pid
}

trap cleanup EXIT

setup_prepare
setup_wait

tests_run

exit $EXIT_STATUS
那是我日夜思念 深深愛著的人啊