1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3#
4# Test devlink-trap ACL drops functionality over mlxsw.
5
6lib_dir=$(dirname $0)/../../../net/forwarding
7
8ALL_TESTS="
9	ingress_flow_action_drop_test
10	egress_flow_action_drop_test
11"
12NUM_NETIFS=4
13source $lib_dir/tc_common.sh
14source $lib_dir/lib.sh
15source $lib_dir/devlink_lib.sh
16
17h1_create()
18{
19	simple_if_init $h1
20}
21
22h1_destroy()
23{
24	simple_if_fini $h1
25}
26
27h2_create()
28{
29	simple_if_init $h2
30}
31
32h2_destroy()
33{
34	simple_if_fini $h2
35}
36
37switch_create()
38{
39	ip link add dev br0 type bridge vlan_filtering 1 mcast_snooping 0
40
41	ip link set dev $swp1 master br0
42	ip link set dev $swp2 master br0
43
44	ip link set dev br0 up
45	ip link set dev $swp1 up
46	ip link set dev $swp2 up
47
48	tc qdisc add dev $swp1 clsact
49	tc qdisc add dev $swp2 clsact
50}
51
52switch_destroy()
53{
54	tc qdisc del dev $swp2 clsact
55	tc qdisc del dev $swp1 clsact
56
57	ip link set dev $swp2 down
58	ip link set dev $swp1 down
59
60	ip link del dev br0
61}
62
63setup_prepare()
64{
65	h1=${NETIFS[p1]}
66	swp1=${NETIFS[p2]}
67
68	swp2=${NETIFS[p3]}
69	h2=${NETIFS[p4]}
70
71	h1mac=$(mac_get $h1)
72	h2mac=$(mac_get $h2)
73
74	vrf_prepare
75
76	h1_create
77	h2_create
78
79	switch_create
80}
81
82cleanup()
83{
84	pre_cleanup
85
86	switch_destroy
87
88	h2_destroy
89	h1_destroy
90
91	vrf_cleanup
92}
93
94ingress_flow_action_drop_test()
95{
96	local mz_pid
97
98	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
99		flower src_mac $h1mac action pass
100
101	tc filter add dev $swp1 ingress protocol ip pref 1 handle 101 \
102		flower dst_ip 192.0.2.2 action drop
103
104	$MZ $h1 -c 0 -p 100 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
105		-t ip -d 1msec -q &
106	mz_pid=$!
107
108	RET=0
109
110	devlink_trap_drop_test ingress_flow_action_drop $swp2 101
111
112	log_test "ingress_flow_action_drop"
113
114	tc filter del dev $swp1 ingress protocol ip pref 1 handle 101 flower
115
116	devlink_trap_drop_cleanup $mz_pid $swp2 ip 1 101
117}
118
119egress_flow_action_drop_test()
120{
121	local mz_pid
122
123	tc filter add dev $swp2 egress protocol ip pref 2 handle 102 \
124		flower src_mac $h1mac action pass
125
126	tc filter add dev $swp2 egress protocol ip pref 1 handle 101 \
127		flower dst_ip 192.0.2.2 action drop
128
129	$MZ $h1 -c 0 -p 100 -a $h1mac -b $h2mac -A 192.0.2.1 -B 192.0.2.2 \
130		-t ip -d 1msec -q &
131	mz_pid=$!
132
133	RET=0
134
135	devlink_trap_drop_test egress_flow_action_drop $swp2 102
136
137	log_test "egress_flow_action_drop"
138
139	tc filter del dev $swp2 egress protocol ip pref 1 handle 101 flower
140
141	devlink_trap_drop_cleanup $mz_pid $swp2 ip 2 102
142}
143
144trap cleanup EXIT
145
146setup_prepare
147setup_wait
148
149tests_run
150
151exit $EXIT_STATUS
152