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