File Index
Files and directories
Sign in
FILE

tc_flower_cfm.sh

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/net/forwarding/tc_flower_cfm.sh BASH
  1#!/bin/bash
  2# SPDX-License-Identifier: GPL-2.0
  3
  4ALL_TESTS="match_cfm_opcode match_cfm_level match_cfm_level_and_opcode"
  5NUM_NETIFS=2
  6source tc_common.sh
  7source lib.sh
  8
  9h1_create()
 10{
 11	simple_if_init $h1
 12}
 13
 14h1_destroy()
 15{
 16	simple_if_fini $h1
 17}
 18
 19h2_create()
 20{
 21	simple_if_init $h2
 22	tc qdisc add dev $h2 clsact
 23}
 24
 25h2_destroy()
 26{
 27	tc qdisc del dev $h2 clsact
 28	simple_if_fini $h2
 29}
 30
 31u8_to_hex()
 32{
 33	local u8=$1; shift
 34
 35	printf "%02x" $u8
 36}
 37
 38generate_cfm_hdr()
 39{
 40	local mdl=$1; shift
 41	local op=$1; shift
 42	local flags=$1; shift
 43	local tlv_offset=$1; shift
 44
 45	local cfm_hdr=$(:
 46	               )"$(u8_to_hex $((mdl << 5))):"$( 	: MD level and Version
 47	               )"$(u8_to_hex $op):"$(			: OpCode
 48	               )"$(u8_to_hex $flags):"$(		: Flags
 49	               )"$(u8_to_hex $tlv_offset)"$(		: TLV offset
 50	               )
 51
 52	echo $cfm_hdr
 53}
 54
 55match_cfm_opcode()
 56{
 57	local ethtype="89 02"; readonly ethtype
 58	RET=0
 59
 60	tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
 61	   flower cfm op 47 action drop
 62	tc filter add dev $h2 ingress protocol cfm pref 1 handle 102 \
 63	   flower cfm op 43 action drop
 64
 65	pkt="$ethtype $(generate_cfm_hdr 7 47 0 32)"
 66	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
 67	pkt="$ethtype $(generate_cfm_hdr 6 5 0 4)"
 68	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
 69
 70	tc_check_packets "dev $h2 ingress" 101 1
 71	check_err $? "Did not match on correct opcode"
 72
 73	tc_check_packets "dev $h2 ingress" 102 0
 74	check_err $? "Matched on the wrong opcode"
 75
 76	pkt="$ethtype $(generate_cfm_hdr 0 43 0 12)"
 77	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
 78
 79	tc_check_packets "dev $h2 ingress" 101 1
 80	check_err $? "Matched on the wrong opcode"
 81
 82	tc_check_packets "dev $h2 ingress" 102 1
 83	check_err $? "Did not match on correct opcode"
 84
 85	tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
 86	tc filter del dev $h2 ingress protocol cfm pref 1 handle 102 flower
 87
 88	log_test "CFM opcode match test"
 89}
 90
 91match_cfm_level()
 92{
 93	local ethtype="89 02"; readonly ethtype
 94	RET=0
 95
 96	tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
 97	   flower cfm mdl 5 action drop
 98	tc filter add dev $h2 ingress protocol cfm pref 1 handle 102 \
 99	   flower cfm mdl 3 action drop
100	tc filter add dev $h2 ingress protocol cfm pref 1 handle 103 \
101	   flower cfm mdl 0 action drop
102
103	pkt="$ethtype $(generate_cfm_hdr 5 42 0 12)"
104	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
105	pkt="$ethtype $(generate_cfm_hdr 6 1 0 70)"
106	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
107	pkt="$ethtype $(generate_cfm_hdr 0 1 0 70)"
108	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
109
110	tc_check_packets "dev $h2 ingress" 101 1
111	check_err $? "Did not match on correct level"
112
113	tc_check_packets "dev $h2 ingress" 102 0
114	check_err $? "Matched on the wrong level"
115
116	tc_check_packets "dev $h2 ingress" 103 1
117	check_err $? "Did not match on correct level"
118
119	pkt="$ethtype $(generate_cfm_hdr 3 0 0 4)"
120	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
121
122	tc_check_packets "dev $h2 ingress" 101 1
123	check_err $? "Matched on the wrong level"
124
125	tc_check_packets "dev $h2 ingress" 102 1
126	check_err $? "Did not match on correct level"
127
128	tc_check_packets "dev $h2 ingress" 103 1
129	check_err $? "Matched on the wrong level"
130
131	tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
132	tc filter del dev $h2 ingress protocol cfm pref 1 handle 102 flower
133	tc filter del dev $h2 ingress protocol cfm pref 1 handle 103 flower
134
135	log_test "CFM level match test"
136}
137
138match_cfm_level_and_opcode()
139{
140	local ethtype="89 02"; readonly ethtype
141	RET=0
142
143	tc filter add dev $h2 ingress protocol cfm pref 1 handle 101 \
144	   flower cfm mdl 5 op 41 action drop
145	tc filter add dev $h2 ingress protocol cfm pref 1 handle 102 \
146	   flower cfm mdl 7 op 42 action drop
147
148	pkt="$ethtype $(generate_cfm_hdr 5 41 0 4)"
149	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
150	pkt="$ethtype $(generate_cfm_hdr 7 3 0 4)"
151	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
152	pkt="$ethtype $(generate_cfm_hdr 3 42 0 12)"
153	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
154
155	tc_check_packets "dev $h2 ingress" 101 1
156	check_err $? "Did not match on correct level and opcode"
157
158	tc_check_packets "dev $h2 ingress" 102 0
159	check_err $? "Matched on the wrong level and opcode"
160
161	pkt="$ethtype $(generate_cfm_hdr 7 42 0 12)"
162	$MZ $h1 -c 1 -p 64 -a $h1mac -b $h2mac "$pkt" -q
163
164	tc_check_packets "dev $h2 ingress" 101 1
165	check_err $? "Matched on the wrong level and opcode"
166
167	tc_check_packets "dev $h2 ingress" 102 1
168	check_err $? "Did not match on correct level and opcode"
169
170	tc filter del dev $h2 ingress protocol cfm pref 1 handle 101 flower
171	tc filter del dev $h2 ingress protocol cfm pref 1 handle 102 flower
172
173	log_test "CFM opcode and level match test"
174}
175
176setup_prepare()
177{
178	h1=${NETIFS[p1]}
179	h2=${NETIFS[p2]}
180	h1mac=$(mac_get $h1)
181	h2mac=$(mac_get $h2)
182
183	vrf_prepare
184
185	h1_create
186	h2_create
187}
188
189cleanup()
190{
191	pre_cleanup
192
193	h2_destroy
194	h1_destroy
195
196	vrf_cleanup
197}
198
199trap cleanup EXIT
200
201setup_prepare
202setup_wait
203
204tests_run
205
206exit $EXIT_STATUS
~/ Read-only file preview.