xref: /linux/tools/testing/selftests/drivers/net/mlxsw/devlink_trap_l2_drops.sh (revision 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18)
117027032SIdo Schimmel#!/bin/bash
217027032SIdo Schimmel# SPDX-License-Identifier: GPL-2.0
317027032SIdo Schimmel#
417027032SIdo Schimmel# Test devlink-trap L2 drops functionality over mlxsw. Each registered L2 drop
517027032SIdo Schimmel# packet trap is tested to make sure it is triggered under the right
617027032SIdo Schimmel# conditions.
717027032SIdo Schimmel
817027032SIdo Schimmellib_dir=$(dirname $0)/../../../net/forwarding
917027032SIdo Schimmel
1017027032SIdo SchimmelALL_TESTS="
1117027032SIdo Schimmel	source_mac_is_multicast_test
1217027032SIdo Schimmel	vlan_tag_mismatch_test
1317027032SIdo Schimmel	ingress_vlan_filter_test
1417027032SIdo Schimmel	ingress_stp_filter_test
1517027032SIdo Schimmel	port_list_is_empty_test
1617027032SIdo Schimmel	port_loopback_filter_test
17*fb398432SIdo Schimmel	locked_port_test
1817027032SIdo Schimmel"
1917027032SIdo SchimmelNUM_NETIFS=4
2017027032SIdo Schimmelsource $lib_dir/tc_common.sh
2117027032SIdo Schimmelsource $lib_dir/lib.sh
2217027032SIdo Schimmelsource $lib_dir/devlink_lib.sh
2317027032SIdo Schimmel
2417027032SIdo Schimmelh1_create()
2517027032SIdo Schimmel{
2617027032SIdo Schimmel	simple_if_init $h1
2717027032SIdo Schimmel}
2817027032SIdo Schimmel
2917027032SIdo Schimmelh1_destroy()
3017027032SIdo Schimmel{
3117027032SIdo Schimmel	simple_if_fini $h1
3217027032SIdo Schimmel}
3317027032SIdo Schimmel
3417027032SIdo Schimmelh2_create()
3517027032SIdo Schimmel{
3617027032SIdo Schimmel	simple_if_init $h2
3717027032SIdo Schimmel}
3817027032SIdo Schimmel
3917027032SIdo Schimmelh2_destroy()
4017027032SIdo Schimmel{
4117027032SIdo Schimmel	simple_if_fini $h2
4217027032SIdo Schimmel}
4317027032SIdo Schimmel
4417027032SIdo Schimmelswitch_create()
4517027032SIdo Schimmel{
4617027032SIdo Schimmel	ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0
4717027032SIdo Schimmel
4817027032SIdo Schimmel	ip link set dev $swp1 master br0
4917027032SIdo Schimmel	ip link set dev $swp2 master br0
5017027032SIdo Schimmel
5117027032SIdo Schimmel	ip link set dev br0 up
5217027032SIdo Schimmel	ip link set dev $swp1 up
5317027032SIdo Schimmel	ip link set dev $swp2 up
5417027032SIdo Schimmel
5517027032SIdo Schimmel	tc qdisc add dev $swp2 clsact
5617027032SIdo Schimmel}
5717027032SIdo Schimmel
5817027032SIdo Schimmelswitch_destroy()
5917027032SIdo Schimmel{
6017027032SIdo Schimmel	tc qdisc del dev $swp2 clsact
6117027032SIdo Schimmel
6217027032SIdo Schimmel	ip link set dev $swp2 down
6317027032SIdo Schimmel	ip link set dev $swp1 down
6417027032SIdo Schimmel
6517027032SIdo Schimmel	ip link del dev br0
6617027032SIdo Schimmel}
6717027032SIdo Schimmel
6817027032SIdo Schimmelsetup_prepare()
6917027032SIdo Schimmel{
7017027032SIdo Schimmel	h1=${NETIFS[p1]}
7117027032SIdo Schimmel	swp1=${NETIFS[p2]}
7217027032SIdo Schimmel
7317027032SIdo Schimmel	swp2=${NETIFS[p3]}
7417027032SIdo Schimmel	h2=${NETIFS[p4]}
7517027032SIdo Schimmel
7617027032SIdo Schimmel	vrf_prepare
7717027032SIdo Schimmel
7817027032SIdo Schimmel	h1_create
7917027032SIdo Schimmel	h2_create
8017027032SIdo Schimmel
8117027032SIdo Schimmel	switch_create
8217027032SIdo Schimmel}
8317027032SIdo Schimmel
8417027032SIdo Schimmelcleanup()
8517027032SIdo Schimmel{
8617027032SIdo Schimmel	pre_cleanup
8717027032SIdo Schimmel
8817027032SIdo Schimmel	switch_destroy
8917027032SIdo Schimmel
9017027032SIdo Schimmel	h2_destroy
9117027032SIdo Schimmel	h1_destroy
9217027032SIdo Schimmel
9317027032SIdo Schimmel	vrf_cleanup
9417027032SIdo Schimmel}
9517027032SIdo Schimmel
9617027032SIdo Schimmelsource_mac_is_multicast_test()
9717027032SIdo Schimmel{
9817027032SIdo Schimmel	local trap_name="source_mac_is_multicast"
9917027032SIdo Schimmel	local smac=01:02:03:04:05:06
10017027032SIdo Schimmel	local mz_pid
10117027032SIdo Schimmel
10217027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
10317027032SIdo Schimmel		flower src_mac $smac action drop
10417027032SIdo Schimmel
10517027032SIdo Schimmel	$MZ $h1 -c 0 -p 100 -a $smac -b bcast -t ip -d 1msec -q &
10617027032SIdo Schimmel	mz_pid=$!
10717027032SIdo Schimmel
10817027032SIdo Schimmel	RET=0
10917027032SIdo Schimmel
11004cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
11117027032SIdo Schimmel
11217027032SIdo Schimmel	log_test "Source MAC is multicast"
11317027032SIdo Schimmel
114c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
11517027032SIdo Schimmel}
11617027032SIdo Schimmel
11717027032SIdo Schimmel__vlan_tag_mismatch_test()
11817027032SIdo Schimmel{
11917027032SIdo Schimmel	local trap_name="vlan_tag_mismatch"
12017027032SIdo Schimmel	local dmac=de:ad:be:ef:13:37
12117027032SIdo Schimmel	local opt=$1; shift
12217027032SIdo Schimmel	local mz_pid
12317027032SIdo Schimmel
12417027032SIdo Schimmel	# Remove PVID flag. This should prevent untagged and prio-tagged
12517027032SIdo Schimmel	# packets from entering the bridge.
12617027032SIdo Schimmel	bridge vlan add vid 1 dev $swp1 untagged master
12717027032SIdo Schimmel
12817027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
12917027032SIdo Schimmel		flower dst_mac $dmac action drop
13017027032SIdo Schimmel
13117027032SIdo Schimmel	$MZ $h1 "$opt" -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
13217027032SIdo Schimmel	mz_pid=$!
13317027032SIdo Schimmel
13404cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
13517027032SIdo Schimmel
13617027032SIdo Schimmel	# Add PVID and make sure packets are no longer dropped.
13717027032SIdo Schimmel	bridge vlan add vid 1 dev $swp1 pvid untagged master
13817027032SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
13917027032SIdo Schimmel
14017027032SIdo Schimmel	devlink_trap_stats_idle_test $trap_name
14117027032SIdo Schimmel	check_err $? "Trap stats not idle when packets should not be dropped"
14204cc99d9SIdo Schimmel	devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
14317027032SIdo Schimmel	check_err $? "Trap group stats not idle with when packets should not be dropped"
14417027032SIdo Schimmel
14517027032SIdo Schimmel	tc_check_packets "dev $swp2 egress" 101 0
14617027032SIdo Schimmel	check_fail $? "Packets not forwarded when should"
14717027032SIdo Schimmel
14817027032SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
14917027032SIdo Schimmel
150c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
15117027032SIdo Schimmel}
15217027032SIdo Schimmel
15317027032SIdo Schimmelvlan_tag_mismatch_untagged_test()
15417027032SIdo Schimmel{
15517027032SIdo Schimmel	RET=0
15617027032SIdo Schimmel
15717027032SIdo Schimmel	__vlan_tag_mismatch_test
15817027032SIdo Schimmel
15917027032SIdo Schimmel	log_test "VLAN tag mismatch - untagged packets"
16017027032SIdo Schimmel}
16117027032SIdo Schimmel
16217027032SIdo Schimmelvlan_tag_mismatch_vid_0_test()
16317027032SIdo Schimmel{
16417027032SIdo Schimmel	RET=0
16517027032SIdo Schimmel
16617027032SIdo Schimmel	__vlan_tag_mismatch_test "-Q 0"
16717027032SIdo Schimmel
16817027032SIdo Schimmel	log_test "VLAN tag mismatch - prio-tagged packets"
16917027032SIdo Schimmel}
17017027032SIdo Schimmel
17117027032SIdo Schimmelvlan_tag_mismatch_test()
17217027032SIdo Schimmel{
17317027032SIdo Schimmel	vlan_tag_mismatch_untagged_test
17417027032SIdo Schimmel	vlan_tag_mismatch_vid_0_test
17517027032SIdo Schimmel}
17617027032SIdo Schimmel
17717027032SIdo Schimmelingress_vlan_filter_test()
17817027032SIdo Schimmel{
17917027032SIdo Schimmel	local trap_name="ingress_vlan_filter"
18017027032SIdo Schimmel	local dmac=de:ad:be:ef:13:37
18117027032SIdo Schimmel	local mz_pid
18217027032SIdo Schimmel	local vid=10
18317027032SIdo Schimmel
18417027032SIdo Schimmel	bridge vlan add vid $vid dev $swp2 master
18517027032SIdo Schimmel
18617027032SIdo Schimmel	RET=0
18717027032SIdo Schimmel
18817027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
18917027032SIdo Schimmel		flower dst_mac $dmac action drop
19017027032SIdo Schimmel
19117027032SIdo Schimmel	$MZ $h1 -Q $vid -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
19217027032SIdo Schimmel	mz_pid=$!
19317027032SIdo Schimmel
19404cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
19517027032SIdo Schimmel
19617027032SIdo Schimmel	# Add the VLAN on the bridge port and make sure packets are no longer
19717027032SIdo Schimmel	# dropped.
19817027032SIdo Schimmel	bridge vlan add vid $vid dev $swp1 master
19917027032SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
20017027032SIdo Schimmel
20117027032SIdo Schimmel	devlink_trap_stats_idle_test $trap_name
20217027032SIdo Schimmel	check_err $? "Trap stats not idle when packets should not be dropped"
20304cc99d9SIdo Schimmel	devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
20417027032SIdo Schimmel	check_err $? "Trap group stats not idle with when packets should not be dropped"
20517027032SIdo Schimmel
20617027032SIdo Schimmel	tc_check_packets "dev $swp2 egress" 101 0
20717027032SIdo Schimmel	check_fail $? "Packets not forwarded when should"
20817027032SIdo Schimmel
20917027032SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
21017027032SIdo Schimmel
21117027032SIdo Schimmel	log_test "Ingress VLAN filter"
21217027032SIdo Schimmel
213c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
21417027032SIdo Schimmel
21517027032SIdo Schimmel	bridge vlan del vid $vid dev $swp1 master
21617027032SIdo Schimmel	bridge vlan del vid $vid dev $swp2 master
21717027032SIdo Schimmel}
21817027032SIdo Schimmel
21917027032SIdo Schimmel__ingress_stp_filter_test()
22017027032SIdo Schimmel{
22117027032SIdo Schimmel	local trap_name="ingress_spanning_tree_filter"
22217027032SIdo Schimmel	local dmac=de:ad:be:ef:13:37
22317027032SIdo Schimmel	local state=$1; shift
22417027032SIdo Schimmel	local mz_pid
22517027032SIdo Schimmel	local vid=20
22617027032SIdo Schimmel
22717027032SIdo Schimmel	bridge vlan add vid $vid dev $swp2 master
22817027032SIdo Schimmel	bridge vlan add vid $vid dev $swp1 master
22917027032SIdo Schimmel	ip link set dev $swp1 type bridge_slave state $state
23017027032SIdo Schimmel
23117027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
23217027032SIdo Schimmel		flower dst_mac $dmac action drop
23317027032SIdo Schimmel
23417027032SIdo Schimmel	$MZ $h1 -Q $vid -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
23517027032SIdo Schimmel	mz_pid=$!
23617027032SIdo Schimmel
23704cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
23817027032SIdo Schimmel
23917027032SIdo Schimmel	# Change STP state to forwarding and make sure packets are no longer
24017027032SIdo Schimmel	# dropped.
24117027032SIdo Schimmel	ip link set dev $swp1 type bridge_slave state 3
24217027032SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
24317027032SIdo Schimmel
24417027032SIdo Schimmel	devlink_trap_stats_idle_test $trap_name
24517027032SIdo Schimmel	check_err $? "Trap stats not idle when packets should not be dropped"
24604cc99d9SIdo Schimmel	devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
24717027032SIdo Schimmel	check_err $? "Trap group stats not idle with when packets should not be dropped"
24817027032SIdo Schimmel
24917027032SIdo Schimmel	tc_check_packets "dev $swp2 egress" 101 0
25017027032SIdo Schimmel	check_fail $? "Packets not forwarded when should"
25117027032SIdo Schimmel
25217027032SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
25317027032SIdo Schimmel
254c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
25517027032SIdo Schimmel
25617027032SIdo Schimmel	bridge vlan del vid $vid dev $swp1 master
25717027032SIdo Schimmel	bridge vlan del vid $vid dev $swp2 master
25817027032SIdo Schimmel}
25917027032SIdo Schimmel
26017027032SIdo Schimmelingress_stp_filter_listening_test()
26117027032SIdo Schimmel{
26217027032SIdo Schimmel	local state=$1; shift
26317027032SIdo Schimmel
26417027032SIdo Schimmel	RET=0
26517027032SIdo Schimmel
26617027032SIdo Schimmel	__ingress_stp_filter_test $state
26717027032SIdo Schimmel
26817027032SIdo Schimmel	log_test "Ingress STP filter - listening state"
26917027032SIdo Schimmel}
27017027032SIdo Schimmel
27117027032SIdo Schimmelingress_stp_filter_learning_test()
27217027032SIdo Schimmel{
27317027032SIdo Schimmel	local state=$1; shift
27417027032SIdo Schimmel
27517027032SIdo Schimmel	RET=0
27617027032SIdo Schimmel
27717027032SIdo Schimmel	__ingress_stp_filter_test $state
27817027032SIdo Schimmel
27917027032SIdo Schimmel	log_test "Ingress STP filter - learning state"
28017027032SIdo Schimmel}
28117027032SIdo Schimmel
28217027032SIdo Schimmelingress_stp_filter_test()
28317027032SIdo Schimmel{
28417027032SIdo Schimmel	ingress_stp_filter_listening_test 1
28517027032SIdo Schimmel	ingress_stp_filter_learning_test 2
28617027032SIdo Schimmel}
28717027032SIdo Schimmel
28817027032SIdo Schimmelport_list_is_empty_uc_test()
28917027032SIdo Schimmel{
29017027032SIdo Schimmel	local trap_name="port_list_is_empty"
29117027032SIdo Schimmel	local dmac=de:ad:be:ef:13:37
29217027032SIdo Schimmel	local mz_pid
29317027032SIdo Schimmel
29417027032SIdo Schimmel	# Disable unicast flooding on both ports, so that packets cannot egress
29517027032SIdo Schimmel	# any port.
29617027032SIdo Schimmel	ip link set dev $swp1 type bridge_slave flood off
29717027032SIdo Schimmel	ip link set dev $swp2 type bridge_slave flood off
29817027032SIdo Schimmel
29917027032SIdo Schimmel	RET=0
30017027032SIdo Schimmel
30117027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
30217027032SIdo Schimmel		flower dst_mac $dmac action drop
30317027032SIdo Schimmel
30417027032SIdo Schimmel	$MZ $h1 -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
30517027032SIdo Schimmel	mz_pid=$!
30617027032SIdo Schimmel
30704cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
30817027032SIdo Schimmel
30917027032SIdo Schimmel	# Allow packets to be flooded to one port.
31017027032SIdo Schimmel	ip link set dev $swp2 type bridge_slave flood on
31117027032SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
31217027032SIdo Schimmel
31317027032SIdo Schimmel	devlink_trap_stats_idle_test $trap_name
31417027032SIdo Schimmel	check_err $? "Trap stats not idle when packets should not be dropped"
31504cc99d9SIdo Schimmel	devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
31617027032SIdo Schimmel	check_err $? "Trap group stats not idle with when packets should not be dropped"
31717027032SIdo Schimmel
31817027032SIdo Schimmel	tc_check_packets "dev $swp2 egress" 101 0
31917027032SIdo Schimmel	check_fail $? "Packets not forwarded when should"
32017027032SIdo Schimmel
32117027032SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
32217027032SIdo Schimmel
32317027032SIdo Schimmel	log_test "Port list is empty - unicast"
32417027032SIdo Schimmel
325c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
32617027032SIdo Schimmel
32717027032SIdo Schimmel	ip link set dev $swp1 type bridge_slave flood on
32817027032SIdo Schimmel}
32917027032SIdo Schimmel
33017027032SIdo Schimmelport_list_is_empty_mc_test()
33117027032SIdo Schimmel{
33217027032SIdo Schimmel	local trap_name="port_list_is_empty"
33317027032SIdo Schimmel	local dmac=01:00:5e:00:00:01
33417027032SIdo Schimmel	local dip=239.0.0.1
33517027032SIdo Schimmel	local mz_pid
33617027032SIdo Schimmel
33717027032SIdo Schimmel	# Disable multicast flooding on both ports, so that packets cannot
33817027032SIdo Schimmel	# egress any port. We also need to flush IP addresses from the bridge
33917027032SIdo Schimmel	# in order to prevent packets from being flooded to the router port.
34017027032SIdo Schimmel	ip link set dev $swp1 type bridge_slave mcast_flood off
34117027032SIdo Schimmel	ip link set dev $swp2 type bridge_slave mcast_flood off
34217027032SIdo Schimmel	ip address flush dev br0
34317027032SIdo Schimmel
34417027032SIdo Schimmel	RET=0
34517027032SIdo Schimmel
34617027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
34717027032SIdo Schimmel		flower dst_mac $dmac action drop
34817027032SIdo Schimmel
34917027032SIdo Schimmel	$MZ $h1 -c 0 -p 100 -a own -b $dmac -t ip -B $dip -d 1msec -q &
35017027032SIdo Schimmel	mz_pid=$!
35117027032SIdo Schimmel
35204cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
35317027032SIdo Schimmel
35417027032SIdo Schimmel	# Allow packets to be flooded to one port.
35517027032SIdo Schimmel	ip link set dev $swp2 type bridge_slave mcast_flood on
35617027032SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
35717027032SIdo Schimmel
35817027032SIdo Schimmel	devlink_trap_stats_idle_test $trap_name
35917027032SIdo Schimmel	check_err $? "Trap stats not idle when packets should not be dropped"
36004cc99d9SIdo Schimmel	devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
36117027032SIdo Schimmel	check_err $? "Trap group stats not idle with when packets should not be dropped"
36217027032SIdo Schimmel
36317027032SIdo Schimmel	tc_check_packets "dev $swp2 egress" 101 0
36417027032SIdo Schimmel	check_fail $? "Packets not forwarded when should"
36517027032SIdo Schimmel
36617027032SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
36717027032SIdo Schimmel
36817027032SIdo Schimmel	log_test "Port list is empty - multicast"
36917027032SIdo Schimmel
370c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
37117027032SIdo Schimmel
37217027032SIdo Schimmel	ip link set dev $swp1 type bridge_slave mcast_flood on
37317027032SIdo Schimmel}
37417027032SIdo Schimmel
37517027032SIdo Schimmelport_list_is_empty_test()
37617027032SIdo Schimmel{
37717027032SIdo Schimmel	port_list_is_empty_uc_test
37817027032SIdo Schimmel	port_list_is_empty_mc_test
37917027032SIdo Schimmel}
38017027032SIdo Schimmel
38117027032SIdo Schimmelport_loopback_filter_uc_test()
38217027032SIdo Schimmel{
38317027032SIdo Schimmel	local trap_name="port_loopback_filter"
38417027032SIdo Schimmel	local dmac=de:ad:be:ef:13:37
38517027032SIdo Schimmel	local mz_pid
38617027032SIdo Schimmel
38717027032SIdo Schimmel	# Make sure packets can only egress the input port.
38817027032SIdo Schimmel	ip link set dev $swp2 type bridge_slave flood off
38917027032SIdo Schimmel
39017027032SIdo Schimmel	RET=0
39117027032SIdo Schimmel
39217027032SIdo Schimmel	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
39317027032SIdo Schimmel		flower dst_mac $dmac action drop
39417027032SIdo Schimmel
39517027032SIdo Schimmel	$MZ $h1 -c 0 -p 100 -a own -b $dmac -t ip -d 1msec -q &
39617027032SIdo Schimmel	mz_pid=$!
39717027032SIdo Schimmel
39804cc99d9SIdo Schimmel	devlink_trap_drop_test $trap_name $swp2 101
39917027032SIdo Schimmel
40017027032SIdo Schimmel	# Allow packets to be flooded.
40117027032SIdo Schimmel	ip link set dev $swp2 type bridge_slave flood on
40217027032SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
40317027032SIdo Schimmel
40417027032SIdo Schimmel	devlink_trap_stats_idle_test $trap_name
40517027032SIdo Schimmel	check_err $? "Trap stats not idle when packets should not be dropped"
40604cc99d9SIdo Schimmel	devlink_trap_group_stats_idle_test $(devlink_trap_group_get $trap_name)
40717027032SIdo Schimmel	check_err $? "Trap group stats not idle with when packets should not be dropped"
40817027032SIdo Schimmel
40917027032SIdo Schimmel	tc_check_packets "dev $swp2 egress" 101 0
41017027032SIdo Schimmel	check_fail $? "Packets not forwarded when should"
41117027032SIdo Schimmel
41217027032SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
41317027032SIdo Schimmel
41417027032SIdo Schimmel	log_test "Port loopback filter - unicast"
41517027032SIdo Schimmel
416c902a52cSJiri Pirko	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
41717027032SIdo Schimmel}
41817027032SIdo Schimmel
41917027032SIdo Schimmelport_loopback_filter_test()
42017027032SIdo Schimmel{
42117027032SIdo Schimmel	port_loopback_filter_uc_test
42217027032SIdo Schimmel}
42317027032SIdo Schimmel
424*fb398432SIdo Schimmellocked_port_miss_test()
425*fb398432SIdo Schimmel{
426*fb398432SIdo Schimmel	local trap_name="locked_port"
427*fb398432SIdo Schimmel	local smac=00:11:22:33:44:55
428*fb398432SIdo Schimmel
429*fb398432SIdo Schimmel	bridge link set dev $swp1 learning off
430*fb398432SIdo Schimmel	bridge link set dev $swp1 locked on
431*fb398432SIdo Schimmel
432*fb398432SIdo Schimmel	RET=0
433*fb398432SIdo Schimmel
434*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
435*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
436*fb398432SIdo Schimmel	check_fail $? "Trap stats increased before setting action to \"trap\""
437*fb398432SIdo Schimmel
438*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
439*fb398432SIdo Schimmel
440*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
441*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
442*fb398432SIdo Schimmel	check_err $? "Trap stats did not increase when should"
443*fb398432SIdo Schimmel
444*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
445*fb398432SIdo Schimmel
446*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
447*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
448*fb398432SIdo Schimmel	check_fail $? "Trap stats increased after setting action to \"drop\""
449*fb398432SIdo Schimmel
450*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
451*fb398432SIdo Schimmel
452*fb398432SIdo Schimmel	bridge fdb replace $smac dev $swp1 master static vlan 1
453*fb398432SIdo Schimmel
454*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
455*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
456*fb398432SIdo Schimmel	check_fail $? "Trap stats increased after adding an FDB entry"
457*fb398432SIdo Schimmel
458*fb398432SIdo Schimmel	bridge fdb del $smac dev $swp1 master static vlan 1
459*fb398432SIdo Schimmel	bridge link set dev $swp1 locked off
460*fb398432SIdo Schimmel
461*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
462*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
463*fb398432SIdo Schimmel	check_fail $? "Trap stats increased after unlocking port"
464*fb398432SIdo Schimmel
465*fb398432SIdo Schimmel	log_test "Locked port - FDB miss"
466*fb398432SIdo Schimmel
467*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
468*fb398432SIdo Schimmel	bridge link set dev $swp1 learning on
469*fb398432SIdo Schimmel}
470*fb398432SIdo Schimmel
471*fb398432SIdo Schimmellocked_port_mismatch_test()
472*fb398432SIdo Schimmel{
473*fb398432SIdo Schimmel	local trap_name="locked_port"
474*fb398432SIdo Schimmel	local smac=00:11:22:33:44:55
475*fb398432SIdo Schimmel
476*fb398432SIdo Schimmel	bridge link set dev $swp1 learning off
477*fb398432SIdo Schimmel	bridge link set dev $swp1 locked on
478*fb398432SIdo Schimmel
479*fb398432SIdo Schimmel	RET=0
480*fb398432SIdo Schimmel
481*fb398432SIdo Schimmel	bridge fdb replace $smac dev $swp2 master static vlan 1
482*fb398432SIdo Schimmel
483*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
484*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
485*fb398432SIdo Schimmel	check_fail $? "Trap stats increased before setting action to \"trap\""
486*fb398432SIdo Schimmel
487*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
488*fb398432SIdo Schimmel
489*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
490*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
491*fb398432SIdo Schimmel	check_err $? "Trap stats did not increase when should"
492*fb398432SIdo Schimmel
493*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
494*fb398432SIdo Schimmel
495*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
496*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
497*fb398432SIdo Schimmel	check_fail $? "Trap stats increased after setting action to \"drop\""
498*fb398432SIdo Schimmel
499*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "trap"
500*fb398432SIdo Schimmel	bridge link set dev $swp1 locked off
501*fb398432SIdo Schimmel
502*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
503*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
504*fb398432SIdo Schimmel	check_fail $? "Trap stats increased after unlocking port"
505*fb398432SIdo Schimmel
506*fb398432SIdo Schimmel	bridge link set dev $swp1 locked on
507*fb398432SIdo Schimmel	bridge fdb replace $smac dev $swp1 master static vlan 1
508*fb398432SIdo Schimmel
509*fb398432SIdo Schimmel	devlink_trap_stats_check $trap_name $MZ $h1 -c 1 \
510*fb398432SIdo Schimmel		-a $smac -b $(mac_get $h2) -A 192.0.2.1 -B 192.0.2.2 -p 100 -q
511*fb398432SIdo Schimmel	check_fail $? "Trap stats increased after replacing an FDB entry"
512*fb398432SIdo Schimmel
513*fb398432SIdo Schimmel	bridge fdb del $smac dev $swp1 master static vlan 1
514*fb398432SIdo Schimmel	devlink_trap_action_set $trap_name "drop"
515*fb398432SIdo Schimmel
516*fb398432SIdo Schimmel	log_test "Locked port - FDB mismatch"
517*fb398432SIdo Schimmel
518*fb398432SIdo Schimmel	bridge link set dev $swp1 locked off
519*fb398432SIdo Schimmel	bridge link set dev $swp1 learning on
520*fb398432SIdo Schimmel}
521*fb398432SIdo Schimmel
522*fb398432SIdo Schimmellocked_port_test()
523*fb398432SIdo Schimmel{
524*fb398432SIdo Schimmel	locked_port_miss_test
525*fb398432SIdo Schimmel	locked_port_mismatch_test
526*fb398432SIdo Schimmel}
527*fb398432SIdo Schimmel
52817027032SIdo Schimmeltrap cleanup EXIT
52917027032SIdo Schimmel
53017027032SIdo Schimmelsetup_prepare
53117027032SIdo Schimmelsetup_wait
53217027032SIdo Schimmel
53317027032SIdo Schimmeltests_run
53417027032SIdo Schimmel
53517027032SIdo Schimmelexit $EXIT_STATUS
536