xref: /OK3568_Linux_fs/kernel/samples/bpf/test_lwt_bpf.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun# Uncomment to see generated bytecode
5*4882a593Smuzhiyun#VERBOSE=verbose
6*4882a593Smuzhiyun
7*4882a593SmuzhiyunNS1=lwt_ns1
8*4882a593SmuzhiyunNS2=lwt_ns2
9*4882a593SmuzhiyunVETH0=tst_lwt1a
10*4882a593SmuzhiyunVETH1=tst_lwt1b
11*4882a593SmuzhiyunVETH2=tst_lwt2a
12*4882a593SmuzhiyunVETH3=tst_lwt2b
13*4882a593SmuzhiyunIPVETH0="192.168.254.1"
14*4882a593SmuzhiyunIPVETH1="192.168.254.2"
15*4882a593SmuzhiyunIPVETH1b="192.168.254.3"
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunIPVETH2="192.168.111.1"
18*4882a593SmuzhiyunIPVETH3="192.168.111.2"
19*4882a593Smuzhiyun
20*4882a593SmuzhiyunIP_LOCAL="192.168.99.1"
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunTRACE_ROOT=/sys/kernel/debug/tracing
23*4882a593Smuzhiyun
24*4882a593Smuzhiyunfunction lookup_mac()
25*4882a593Smuzhiyun{
26*4882a593Smuzhiyun	set +x
27*4882a593Smuzhiyun	if [ ! -z "$2" ]; then
28*4882a593Smuzhiyun		MAC=$(ip netns exec $2 ip link show $1 | grep ether | awk '{print $2}')
29*4882a593Smuzhiyun	else
30*4882a593Smuzhiyun		MAC=$(ip link show $1 | grep ether | awk '{print $2}')
31*4882a593Smuzhiyun	fi
32*4882a593Smuzhiyun	MAC="${MAC//:/}"
33*4882a593Smuzhiyun	echo "0x${MAC:10:2}${MAC:8:2}${MAC:6:2}${MAC:4:2}${MAC:2:2}${MAC:0:2}"
34*4882a593Smuzhiyun	set -x
35*4882a593Smuzhiyun}
36*4882a593Smuzhiyun
37*4882a593Smuzhiyunfunction cleanup {
38*4882a593Smuzhiyun	set +ex
39*4882a593Smuzhiyun	rm test_lwt_bpf.o 2> /dev/null
40*4882a593Smuzhiyun	ip link del $VETH0 2> /dev/null
41*4882a593Smuzhiyun	ip link del $VETH1 2> /dev/null
42*4882a593Smuzhiyun	ip link del $VETH2 2> /dev/null
43*4882a593Smuzhiyun	ip link del $VETH3 2> /dev/null
44*4882a593Smuzhiyun	ip netns exec $NS1 killall netserver
45*4882a593Smuzhiyun	ip netns delete $NS1 2> /dev/null
46*4882a593Smuzhiyun	ip netns delete $NS2 2> /dev/null
47*4882a593Smuzhiyun	set -ex
48*4882a593Smuzhiyun}
49*4882a593Smuzhiyun
50*4882a593Smuzhiyunfunction setup_one_veth {
51*4882a593Smuzhiyun	ip netns add $1
52*4882a593Smuzhiyun	ip link add $2 type veth peer name $3
53*4882a593Smuzhiyun	ip link set dev $2 up
54*4882a593Smuzhiyun	ip addr add $4/24 dev $2
55*4882a593Smuzhiyun	ip link set $3 netns $1
56*4882a593Smuzhiyun	ip netns exec $1 ip link set dev $3 up
57*4882a593Smuzhiyun	ip netns exec $1 ip addr add $5/24 dev $3
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun	if [ "$6" ]; then
60*4882a593Smuzhiyun		ip netns exec $1 ip addr add $6/32 dev $3
61*4882a593Smuzhiyun	fi
62*4882a593Smuzhiyun}
63*4882a593Smuzhiyun
64*4882a593Smuzhiyunfunction get_trace {
65*4882a593Smuzhiyun	set +x
66*4882a593Smuzhiyun	cat ${TRACE_ROOT}/trace | grep -v '^#'
67*4882a593Smuzhiyun	set -x
68*4882a593Smuzhiyun}
69*4882a593Smuzhiyun
70*4882a593Smuzhiyunfunction cleanup_routes {
71*4882a593Smuzhiyun	ip route del ${IPVETH1}/32 dev $VETH0 2> /dev/null || true
72*4882a593Smuzhiyun	ip route del table local local ${IP_LOCAL}/32 dev lo 2> /dev/null || true
73*4882a593Smuzhiyun}
74*4882a593Smuzhiyun
75*4882a593Smuzhiyunfunction install_test {
76*4882a593Smuzhiyun	cleanup_routes
77*4882a593Smuzhiyun	cp /dev/null ${TRACE_ROOT}/trace
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun	OPTS="encap bpf headroom 14 $1 obj test_lwt_bpf.o section $2 $VERBOSE"
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun	if [ "$1" == "in" ];  then
82*4882a593Smuzhiyun		ip route add table local local ${IP_LOCAL}/32 $OPTS dev lo
83*4882a593Smuzhiyun	else
84*4882a593Smuzhiyun		ip route add ${IPVETH1}/32 $OPTS dev $VETH0
85*4882a593Smuzhiyun	fi
86*4882a593Smuzhiyun}
87*4882a593Smuzhiyun
88*4882a593Smuzhiyunfunction remove_prog {
89*4882a593Smuzhiyun	if [ "$1" == "in" ];  then
90*4882a593Smuzhiyun		ip route del table local local ${IP_LOCAL}/32 dev lo
91*4882a593Smuzhiyun	else
92*4882a593Smuzhiyun		ip route del ${IPVETH1}/32 dev $VETH0
93*4882a593Smuzhiyun	fi
94*4882a593Smuzhiyun}
95*4882a593Smuzhiyun
96*4882a593Smuzhiyunfunction filter_trace {
97*4882a593Smuzhiyun	# Add newline to allow starting EXPECT= variables on newline
98*4882a593Smuzhiyun	NL=$'\n'
99*4882a593Smuzhiyun	echo "${NL}$*" | sed -e 's/^.*: : //g'
100*4882a593Smuzhiyun}
101*4882a593Smuzhiyun
102*4882a593Smuzhiyunfunction expect_fail {
103*4882a593Smuzhiyun	set +x
104*4882a593Smuzhiyun	echo "FAIL:"
105*4882a593Smuzhiyun	echo "Expected: $1"
106*4882a593Smuzhiyun	echo "Got: $2"
107*4882a593Smuzhiyun	set -x
108*4882a593Smuzhiyun	exit 1
109*4882a593Smuzhiyun}
110*4882a593Smuzhiyun
111*4882a593Smuzhiyunfunction match_trace {
112*4882a593Smuzhiyun	set +x
113*4882a593Smuzhiyun	RET=0
114*4882a593Smuzhiyun	TRACE=$1
115*4882a593Smuzhiyun	EXPECT=$2
116*4882a593Smuzhiyun	GOT="$(filter_trace "$TRACE")"
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun	[ "$GOT" != "$EXPECT" ] && {
119*4882a593Smuzhiyun		expect_fail "$EXPECT" "$GOT"
120*4882a593Smuzhiyun		RET=1
121*4882a593Smuzhiyun	}
122*4882a593Smuzhiyun	set -x
123*4882a593Smuzhiyun	return $RET
124*4882a593Smuzhiyun}
125*4882a593Smuzhiyun
126*4882a593Smuzhiyunfunction test_start {
127*4882a593Smuzhiyun	set +x
128*4882a593Smuzhiyun	echo "----------------------------------------------------------------"
129*4882a593Smuzhiyun	echo "Starting test: $*"
130*4882a593Smuzhiyun	echo "----------------------------------------------------------------"
131*4882a593Smuzhiyun	set -x
132*4882a593Smuzhiyun}
133*4882a593Smuzhiyun
134*4882a593Smuzhiyunfunction failure {
135*4882a593Smuzhiyun	get_trace
136*4882a593Smuzhiyun	echo "FAIL: $*"
137*4882a593Smuzhiyun	exit 1
138*4882a593Smuzhiyun}
139*4882a593Smuzhiyun
140*4882a593Smuzhiyunfunction test_ctx_xmit {
141*4882a593Smuzhiyun	test_start "test_ctx on lwt xmit"
142*4882a593Smuzhiyun	install_test xmit test_ctx
143*4882a593Smuzhiyun	ping -c 3 $IPVETH1 || {
144*4882a593Smuzhiyun		failure "test_ctx xmit: packets are dropped"
145*4882a593Smuzhiyun	}
146*4882a593Smuzhiyun	match_trace "$(get_trace)" "
147*4882a593Smuzhiyunlen 84 hash 0 protocol 8
148*4882a593Smuzhiyuncb 1234 ingress_ifindex 0 ifindex $DST_IFINDEX
149*4882a593Smuzhiyunlen 84 hash 0 protocol 8
150*4882a593Smuzhiyuncb 1234 ingress_ifindex 0 ifindex $DST_IFINDEX
151*4882a593Smuzhiyunlen 84 hash 0 protocol 8
152*4882a593Smuzhiyuncb 1234 ingress_ifindex 0 ifindex $DST_IFINDEX" || exit 1
153*4882a593Smuzhiyun	remove_prog xmit
154*4882a593Smuzhiyun}
155*4882a593Smuzhiyun
156*4882a593Smuzhiyunfunction test_ctx_out {
157*4882a593Smuzhiyun	test_start "test_ctx on lwt out"
158*4882a593Smuzhiyun	install_test out test_ctx
159*4882a593Smuzhiyun	ping -c 3 $IPVETH1 || {
160*4882a593Smuzhiyun		failure "test_ctx out: packets are dropped"
161*4882a593Smuzhiyun	}
162*4882a593Smuzhiyun	match_trace "$(get_trace)" "
163*4882a593Smuzhiyunlen 84 hash 0 protocol 0
164*4882a593Smuzhiyuncb 1234 ingress_ifindex 0 ifindex 0
165*4882a593Smuzhiyunlen 84 hash 0 protocol 0
166*4882a593Smuzhiyuncb 1234 ingress_ifindex 0 ifindex 0
167*4882a593Smuzhiyunlen 84 hash 0 protocol 0
168*4882a593Smuzhiyuncb 1234 ingress_ifindex 0 ifindex 0" || exit 1
169*4882a593Smuzhiyun	remove_prog out
170*4882a593Smuzhiyun}
171*4882a593Smuzhiyun
172*4882a593Smuzhiyunfunction test_ctx_in {
173*4882a593Smuzhiyun	test_start "test_ctx on lwt in"
174*4882a593Smuzhiyun	install_test in test_ctx
175*4882a593Smuzhiyun	ping -c 3 $IP_LOCAL || {
176*4882a593Smuzhiyun		failure "test_ctx out: packets are dropped"
177*4882a593Smuzhiyun	}
178*4882a593Smuzhiyun	# We will both request & reply packets as the packets will
179*4882a593Smuzhiyun	# be from $IP_LOCAL => $IP_LOCAL
180*4882a593Smuzhiyun	match_trace "$(get_trace)" "
181*4882a593Smuzhiyunlen 84 hash 0 protocol 8
182*4882a593Smuzhiyuncb 1234 ingress_ifindex 1 ifindex 1
183*4882a593Smuzhiyunlen 84 hash 0 protocol 8
184*4882a593Smuzhiyuncb 1234 ingress_ifindex 1 ifindex 1
185*4882a593Smuzhiyunlen 84 hash 0 protocol 8
186*4882a593Smuzhiyuncb 1234 ingress_ifindex 1 ifindex 1
187*4882a593Smuzhiyunlen 84 hash 0 protocol 8
188*4882a593Smuzhiyuncb 1234 ingress_ifindex 1 ifindex 1
189*4882a593Smuzhiyunlen 84 hash 0 protocol 8
190*4882a593Smuzhiyuncb 1234 ingress_ifindex 1 ifindex 1
191*4882a593Smuzhiyunlen 84 hash 0 protocol 8
192*4882a593Smuzhiyuncb 1234 ingress_ifindex 1 ifindex 1" || exit 1
193*4882a593Smuzhiyun	remove_prog in
194*4882a593Smuzhiyun}
195*4882a593Smuzhiyun
196*4882a593Smuzhiyunfunction test_data {
197*4882a593Smuzhiyun	test_start "test_data on lwt $1"
198*4882a593Smuzhiyun	install_test $1 test_data
199*4882a593Smuzhiyun	ping -c 3 $IPVETH1 || {
200*4882a593Smuzhiyun		failure "test_data ${1}: packets are dropped"
201*4882a593Smuzhiyun	}
202*4882a593Smuzhiyun	match_trace "$(get_trace)" "
203*4882a593Smuzhiyunsrc: 1fea8c0 dst: 2fea8c0
204*4882a593Smuzhiyunsrc: 1fea8c0 dst: 2fea8c0
205*4882a593Smuzhiyunsrc: 1fea8c0 dst: 2fea8c0" || exit 1
206*4882a593Smuzhiyun	remove_prog $1
207*4882a593Smuzhiyun}
208*4882a593Smuzhiyun
209*4882a593Smuzhiyunfunction test_data_in {
210*4882a593Smuzhiyun	test_start "test_data on lwt in"
211*4882a593Smuzhiyun	install_test in test_data
212*4882a593Smuzhiyun	ping -c 3 $IP_LOCAL || {
213*4882a593Smuzhiyun		failure "test_data in: packets are dropped"
214*4882a593Smuzhiyun	}
215*4882a593Smuzhiyun	# We will both request & reply packets as the packets will
216*4882a593Smuzhiyun	# be from $IP_LOCAL => $IP_LOCAL
217*4882a593Smuzhiyun	match_trace "$(get_trace)" "
218*4882a593Smuzhiyunsrc: 163a8c0 dst: 163a8c0
219*4882a593Smuzhiyunsrc: 163a8c0 dst: 163a8c0
220*4882a593Smuzhiyunsrc: 163a8c0 dst: 163a8c0
221*4882a593Smuzhiyunsrc: 163a8c0 dst: 163a8c0
222*4882a593Smuzhiyunsrc: 163a8c0 dst: 163a8c0
223*4882a593Smuzhiyunsrc: 163a8c0 dst: 163a8c0" || exit 1
224*4882a593Smuzhiyun	remove_prog in
225*4882a593Smuzhiyun}
226*4882a593Smuzhiyun
227*4882a593Smuzhiyunfunction test_cb {
228*4882a593Smuzhiyun	test_start "test_cb on lwt $1"
229*4882a593Smuzhiyun	install_test $1 test_cb
230*4882a593Smuzhiyun	ping -c 3 $IPVETH1 || {
231*4882a593Smuzhiyun		failure "test_cb ${1}: packets are dropped"
232*4882a593Smuzhiyun	}
233*4882a593Smuzhiyun	match_trace "$(get_trace)" "
234*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
235*4882a593Smuzhiyuncb3: 0 cb4: 0
236*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
237*4882a593Smuzhiyuncb3: 0 cb4: 0
238*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
239*4882a593Smuzhiyuncb3: 0 cb4: 0" || exit 1
240*4882a593Smuzhiyun	remove_prog $1
241*4882a593Smuzhiyun}
242*4882a593Smuzhiyun
243*4882a593Smuzhiyunfunction test_cb_in {
244*4882a593Smuzhiyun	test_start "test_cb on lwt in"
245*4882a593Smuzhiyun	install_test in test_cb
246*4882a593Smuzhiyun	ping -c 3 $IP_LOCAL || {
247*4882a593Smuzhiyun		failure "test_cb in: packets are dropped"
248*4882a593Smuzhiyun	}
249*4882a593Smuzhiyun	# We will both request & reply packets as the packets will
250*4882a593Smuzhiyun	# be from $IP_LOCAL => $IP_LOCAL
251*4882a593Smuzhiyun	match_trace "$(get_trace)" "
252*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
253*4882a593Smuzhiyuncb3: 0 cb4: 0
254*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
255*4882a593Smuzhiyuncb3: 0 cb4: 0
256*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
257*4882a593Smuzhiyuncb3: 0 cb4: 0
258*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
259*4882a593Smuzhiyuncb3: 0 cb4: 0
260*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
261*4882a593Smuzhiyuncb3: 0 cb4: 0
262*4882a593Smuzhiyuncb0: 0 cb1: 0 cb2: 0
263*4882a593Smuzhiyuncb3: 0 cb4: 0" || exit 1
264*4882a593Smuzhiyun	remove_prog in
265*4882a593Smuzhiyun}
266*4882a593Smuzhiyun
267*4882a593Smuzhiyunfunction test_drop_all {
268*4882a593Smuzhiyun	test_start "test_drop_all on lwt $1"
269*4882a593Smuzhiyun	install_test $1 drop_all
270*4882a593Smuzhiyun	ping -c 3 $IPVETH1 && {
271*4882a593Smuzhiyun		failure "test_drop_all ${1}: Unexpected success of ping"
272*4882a593Smuzhiyun	}
273*4882a593Smuzhiyun	match_trace "$(get_trace)" "
274*4882a593Smuzhiyundropping with: 2
275*4882a593Smuzhiyundropping with: 2
276*4882a593Smuzhiyundropping with: 2" || exit 1
277*4882a593Smuzhiyun	remove_prog $1
278*4882a593Smuzhiyun}
279*4882a593Smuzhiyun
280*4882a593Smuzhiyunfunction test_drop_all_in {
281*4882a593Smuzhiyun	test_start "test_drop_all on lwt in"
282*4882a593Smuzhiyun	install_test in drop_all
283*4882a593Smuzhiyun	ping -c 3 $IP_LOCAL && {
284*4882a593Smuzhiyun		failure "test_drop_all in: Unexpected success of ping"
285*4882a593Smuzhiyun	}
286*4882a593Smuzhiyun	match_trace "$(get_trace)" "
287*4882a593Smuzhiyundropping with: 2
288*4882a593Smuzhiyundropping with: 2
289*4882a593Smuzhiyundropping with: 2" || exit 1
290*4882a593Smuzhiyun	remove_prog in
291*4882a593Smuzhiyun}
292*4882a593Smuzhiyun
293*4882a593Smuzhiyunfunction test_push_ll_and_redirect {
294*4882a593Smuzhiyun	test_start "test_push_ll_and_redirect on lwt xmit"
295*4882a593Smuzhiyun	install_test xmit push_ll_and_redirect
296*4882a593Smuzhiyun	ping -c 3 $IPVETH1 || {
297*4882a593Smuzhiyun		failure "Redirected packets appear to be dropped"
298*4882a593Smuzhiyun	}
299*4882a593Smuzhiyun	match_trace "$(get_trace)" "
300*4882a593Smuzhiyunredirected to $DST_IFINDEX
301*4882a593Smuzhiyunredirected to $DST_IFINDEX
302*4882a593Smuzhiyunredirected to $DST_IFINDEX" || exit 1
303*4882a593Smuzhiyun	remove_prog xmit
304*4882a593Smuzhiyun}
305*4882a593Smuzhiyun
306*4882a593Smuzhiyunfunction test_no_l2_and_redirect {
307*4882a593Smuzhiyun	test_start "test_no_l2_and_redirect on lwt xmit"
308*4882a593Smuzhiyun	install_test xmit fill_garbage_and_redirect
309*4882a593Smuzhiyun	ping -c 3 $IPVETH1 && {
310*4882a593Smuzhiyun		failure "Unexpected success despite lack of L2 header"
311*4882a593Smuzhiyun	}
312*4882a593Smuzhiyun	match_trace "$(get_trace)" "
313*4882a593Smuzhiyunredirected to $DST_IFINDEX
314*4882a593Smuzhiyunredirected to $DST_IFINDEX
315*4882a593Smuzhiyunredirected to $DST_IFINDEX" || exit 1
316*4882a593Smuzhiyun	remove_prog xmit
317*4882a593Smuzhiyun}
318*4882a593Smuzhiyun
319*4882a593Smuzhiyunfunction test_rewrite {
320*4882a593Smuzhiyun	test_start "test_rewrite on lwt xmit"
321*4882a593Smuzhiyun	install_test xmit test_rewrite
322*4882a593Smuzhiyun	ping -c 3 $IPVETH1 || {
323*4882a593Smuzhiyun		failure "Rewritten packets appear to be dropped"
324*4882a593Smuzhiyun	}
325*4882a593Smuzhiyun	match_trace "$(get_trace)" "
326*4882a593Smuzhiyunout: rewriting from 2fea8c0 to 3fea8c0
327*4882a593Smuzhiyunout: rewriting from 2fea8c0 to 3fea8c0
328*4882a593Smuzhiyunout: rewriting from 2fea8c0 to 3fea8c0" || exit 1
329*4882a593Smuzhiyun	remove_prog out
330*4882a593Smuzhiyun}
331*4882a593Smuzhiyun
332*4882a593Smuzhiyunfunction test_fill_garbage {
333*4882a593Smuzhiyun	test_start "test_fill_garbage on lwt xmit"
334*4882a593Smuzhiyun	install_test xmit fill_garbage
335*4882a593Smuzhiyun	ping -c 3 $IPVETH1 && {
336*4882a593Smuzhiyun		failure "test_drop_all ${1}: Unexpected success of ping"
337*4882a593Smuzhiyun	}
338*4882a593Smuzhiyun	match_trace "$(get_trace)" "
339*4882a593SmuzhiyunSet initial 96 bytes of header to FF
340*4882a593SmuzhiyunSet initial 96 bytes of header to FF
341*4882a593SmuzhiyunSet initial 96 bytes of header to FF" || exit 1
342*4882a593Smuzhiyun	remove_prog xmit
343*4882a593Smuzhiyun}
344*4882a593Smuzhiyun
345*4882a593Smuzhiyunfunction test_netperf_nop {
346*4882a593Smuzhiyun	test_start "test_netperf_nop on lwt xmit"
347*4882a593Smuzhiyun	install_test xmit nop
348*4882a593Smuzhiyun	netperf -H $IPVETH1 -t TCP_STREAM || {
349*4882a593Smuzhiyun		failure "packets appear to be dropped"
350*4882a593Smuzhiyun	}
351*4882a593Smuzhiyun	match_trace "$(get_trace)" ""|| exit 1
352*4882a593Smuzhiyun	remove_prog xmit
353*4882a593Smuzhiyun}
354*4882a593Smuzhiyun
355*4882a593Smuzhiyunfunction test_netperf_redirect {
356*4882a593Smuzhiyun	test_start "test_netperf_redirect on lwt xmit"
357*4882a593Smuzhiyun	install_test xmit push_ll_and_redirect_silent
358*4882a593Smuzhiyun	netperf -H $IPVETH1 -t TCP_STREAM || {
359*4882a593Smuzhiyun		failure "Rewritten packets appear to be dropped"
360*4882a593Smuzhiyun	}
361*4882a593Smuzhiyun	match_trace "$(get_trace)" ""|| exit 1
362*4882a593Smuzhiyun	remove_prog xmit
363*4882a593Smuzhiyun}
364*4882a593Smuzhiyun
365*4882a593Smuzhiyuncleanup
366*4882a593Smuzhiyunsetup_one_veth $NS1 $VETH0 $VETH1 $IPVETH0 $IPVETH1 $IPVETH1b
367*4882a593Smuzhiyunsetup_one_veth $NS2 $VETH2 $VETH3 $IPVETH2 $IPVETH3
368*4882a593Smuzhiyunip netns exec $NS1 netserver
369*4882a593Smuzhiyunecho 1 > ${TRACE_ROOT}/tracing_on
370*4882a593Smuzhiyun
371*4882a593SmuzhiyunDST_MAC=$(lookup_mac $VETH1 $NS1)
372*4882a593SmuzhiyunSRC_MAC=$(lookup_mac $VETH0)
373*4882a593SmuzhiyunDST_IFINDEX=$(cat /sys/class/net/$VETH0/ifindex)
374*4882a593Smuzhiyun
375*4882a593SmuzhiyunCLANG_OPTS="-O2 -target bpf -I ../include/"
376*4882a593SmuzhiyunCLANG_OPTS+=" -DSRC_MAC=$SRC_MAC -DDST_MAC=$DST_MAC -DDST_IFINDEX=$DST_IFINDEX"
377*4882a593Smuzhiyunclang $CLANG_OPTS -c test_lwt_bpf.c -o test_lwt_bpf.o
378*4882a593Smuzhiyun
379*4882a593Smuzhiyuntest_ctx_xmit
380*4882a593Smuzhiyuntest_ctx_out
381*4882a593Smuzhiyuntest_ctx_in
382*4882a593Smuzhiyuntest_data "xmit"
383*4882a593Smuzhiyuntest_data "out"
384*4882a593Smuzhiyuntest_data_in
385*4882a593Smuzhiyuntest_cb "xmit"
386*4882a593Smuzhiyuntest_cb "out"
387*4882a593Smuzhiyuntest_cb_in
388*4882a593Smuzhiyuntest_drop_all "xmit"
389*4882a593Smuzhiyuntest_drop_all "out"
390*4882a593Smuzhiyuntest_drop_all_in
391*4882a593Smuzhiyuntest_rewrite
392*4882a593Smuzhiyuntest_push_ll_and_redirect
393*4882a593Smuzhiyuntest_no_l2_and_redirect
394*4882a593Smuzhiyuntest_fill_garbage
395*4882a593Smuzhiyuntest_netperf_nop
396*4882a593Smuzhiyuntest_netperf_redirect
397*4882a593Smuzhiyun
398*4882a593Smuzhiyuncleanup
399*4882a593Smuzhiyunecho 0 > ${TRACE_ROOT}/tracing_on
400*4882a593Smuzhiyunexit 0
401