xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/net/rtnetlink.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard Worker#!/bin/bash
2*053f45beSAndroid Build Coastguard Worker#
3*053f45beSAndroid Build Coastguard Worker# This test is for checking rtnetlink callpaths, and get as much coverage as possible.
4*053f45beSAndroid Build Coastguard Worker#
5*053f45beSAndroid Build Coastguard Worker# set -e
6*053f45beSAndroid Build Coastguard Worker
7*053f45beSAndroid Build Coastguard Workerdevdummy="test-dummy0"
8*053f45beSAndroid Build Coastguard Worker
9*053f45beSAndroid Build Coastguard Worker# Kselftest framework requirement - SKIP code is 4.
10*053f45beSAndroid Build Coastguard Workerksft_skip=4
11*053f45beSAndroid Build Coastguard Worker
12*053f45beSAndroid Build Coastguard Worker# set global exit status, but never reset nonzero one.
13*053f45beSAndroid Build Coastguard Workercheck_err()
14*053f45beSAndroid Build Coastguard Worker{
15*053f45beSAndroid Build Coastguard Worker	if [ $ret -eq 0 ]; then
16*053f45beSAndroid Build Coastguard Worker		ret=$1
17*053f45beSAndroid Build Coastguard Worker	fi
18*053f45beSAndroid Build Coastguard Worker}
19*053f45beSAndroid Build Coastguard Worker
20*053f45beSAndroid Build Coastguard Worker# same but inverted -- used when command must fail for test to pass
21*053f45beSAndroid Build Coastguard Workercheck_fail()
22*053f45beSAndroid Build Coastguard Worker{
23*053f45beSAndroid Build Coastguard Worker	if [ $1 -eq 0 ]; then
24*053f45beSAndroid Build Coastguard Worker		ret=1
25*053f45beSAndroid Build Coastguard Worker	fi
26*053f45beSAndroid Build Coastguard Worker}
27*053f45beSAndroid Build Coastguard Worker
28*053f45beSAndroid Build Coastguard Workerkci_add_dummy()
29*053f45beSAndroid Build Coastguard Worker{
30*053f45beSAndroid Build Coastguard Worker	ip link add name "$devdummy" type dummy
31*053f45beSAndroid Build Coastguard Worker	check_err $?
32*053f45beSAndroid Build Coastguard Worker	ip link set "$devdummy" up
33*053f45beSAndroid Build Coastguard Worker	check_err $?
34*053f45beSAndroid Build Coastguard Worker}
35*053f45beSAndroid Build Coastguard Worker
36*053f45beSAndroid Build Coastguard Workerkci_del_dummy()
37*053f45beSAndroid Build Coastguard Worker{
38*053f45beSAndroid Build Coastguard Worker	ip link del dev "$devdummy"
39*053f45beSAndroid Build Coastguard Worker	check_err $?
40*053f45beSAndroid Build Coastguard Worker}
41*053f45beSAndroid Build Coastguard Worker
42*053f45beSAndroid Build Coastguard Workerkci_test_netconf()
43*053f45beSAndroid Build Coastguard Worker{
44*053f45beSAndroid Build Coastguard Worker	dev="$1"
45*053f45beSAndroid Build Coastguard Worker	r=$ret
46*053f45beSAndroid Build Coastguard Worker
47*053f45beSAndroid Build Coastguard Worker	ip netconf show dev "$dev" > /dev/null
48*053f45beSAndroid Build Coastguard Worker	check_err $?
49*053f45beSAndroid Build Coastguard Worker
50*053f45beSAndroid Build Coastguard Worker	for f in 4 6; do
51*053f45beSAndroid Build Coastguard Worker		ip -$f netconf show dev "$dev" > /dev/null
52*053f45beSAndroid Build Coastguard Worker		check_err $?
53*053f45beSAndroid Build Coastguard Worker	done
54*053f45beSAndroid Build Coastguard Worker
55*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ] ;then
56*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ip netconf show $dev"
57*053f45beSAndroid Build Coastguard Worker		test $r -eq 0 && ret=0
58*053f45beSAndroid Build Coastguard Worker		return 1
59*053f45beSAndroid Build Coastguard Worker	fi
60*053f45beSAndroid Build Coastguard Worker}
61*053f45beSAndroid Build Coastguard Worker
62*053f45beSAndroid Build Coastguard Worker# add a bridge with vlans on top
63*053f45beSAndroid Build Coastguard Workerkci_test_bridge()
64*053f45beSAndroid Build Coastguard Worker{
65*053f45beSAndroid Build Coastguard Worker	devbr="test-br0"
66*053f45beSAndroid Build Coastguard Worker	vlandev="testbr-vlan1"
67*053f45beSAndroid Build Coastguard Worker
68*053f45beSAndroid Build Coastguard Worker	local ret=0
69*053f45beSAndroid Build Coastguard Worker	ip link add name "$devbr" type bridge
70*053f45beSAndroid Build Coastguard Worker	check_err $?
71*053f45beSAndroid Build Coastguard Worker
72*053f45beSAndroid Build Coastguard Worker	ip link set dev "$devdummy" master "$devbr"
73*053f45beSAndroid Build Coastguard Worker	check_err $?
74*053f45beSAndroid Build Coastguard Worker
75*053f45beSAndroid Build Coastguard Worker	ip link set "$devbr" up
76*053f45beSAndroid Build Coastguard Worker	check_err $?
77*053f45beSAndroid Build Coastguard Worker
78*053f45beSAndroid Build Coastguard Worker	ip link add link "$devbr" name "$vlandev" type vlan id 1
79*053f45beSAndroid Build Coastguard Worker	check_err $?
80*053f45beSAndroid Build Coastguard Worker	ip addr add dev "$vlandev" 10.200.7.23/30
81*053f45beSAndroid Build Coastguard Worker	check_err $?
82*053f45beSAndroid Build Coastguard Worker	ip -6 addr add dev "$vlandev" dead:42::1234/64
83*053f45beSAndroid Build Coastguard Worker	check_err $?
84*053f45beSAndroid Build Coastguard Worker	ip -d link > /dev/null
85*053f45beSAndroid Build Coastguard Worker	check_err $?
86*053f45beSAndroid Build Coastguard Worker	ip r s t all > /dev/null
87*053f45beSAndroid Build Coastguard Worker	check_err $?
88*053f45beSAndroid Build Coastguard Worker
89*053f45beSAndroid Build Coastguard Worker	for name in "$devbr" "$vlandev" "$devdummy" ; do
90*053f45beSAndroid Build Coastguard Worker		kci_test_netconf "$name"
91*053f45beSAndroid Build Coastguard Worker	done
92*053f45beSAndroid Build Coastguard Worker
93*053f45beSAndroid Build Coastguard Worker	ip -6 addr del dev "$vlandev" dead:42::1234/64
94*053f45beSAndroid Build Coastguard Worker	check_err $?
95*053f45beSAndroid Build Coastguard Worker
96*053f45beSAndroid Build Coastguard Worker	ip link del dev "$vlandev"
97*053f45beSAndroid Build Coastguard Worker	check_err $?
98*053f45beSAndroid Build Coastguard Worker	ip link del dev "$devbr"
99*053f45beSAndroid Build Coastguard Worker	check_err $?
100*053f45beSAndroid Build Coastguard Worker
101*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
102*053f45beSAndroid Build Coastguard Worker		echo "FAIL: bridge setup"
103*053f45beSAndroid Build Coastguard Worker		return 1
104*053f45beSAndroid Build Coastguard Worker	fi
105*053f45beSAndroid Build Coastguard Worker	echo "PASS: bridge setup"
106*053f45beSAndroid Build Coastguard Worker
107*053f45beSAndroid Build Coastguard Worker}
108*053f45beSAndroid Build Coastguard Worker
109*053f45beSAndroid Build Coastguard Workerkci_test_gre()
110*053f45beSAndroid Build Coastguard Worker{
111*053f45beSAndroid Build Coastguard Worker	gredev=neta
112*053f45beSAndroid Build Coastguard Worker	rem=10.42.42.1
113*053f45beSAndroid Build Coastguard Worker	loc=10.0.0.1
114*053f45beSAndroid Build Coastguard Worker
115*053f45beSAndroid Build Coastguard Worker	local ret=0
116*053f45beSAndroid Build Coastguard Worker	ip tunnel add $gredev mode gre remote $rem local $loc ttl 1
117*053f45beSAndroid Build Coastguard Worker	check_err $?
118*053f45beSAndroid Build Coastguard Worker	ip link set $gredev up
119*053f45beSAndroid Build Coastguard Worker	check_err $?
120*053f45beSAndroid Build Coastguard Worker	ip addr add 10.23.7.10 dev $gredev
121*053f45beSAndroid Build Coastguard Worker	check_err $?
122*053f45beSAndroid Build Coastguard Worker	ip route add 10.23.8.0/30 dev $gredev
123*053f45beSAndroid Build Coastguard Worker	check_err $?
124*053f45beSAndroid Build Coastguard Worker	ip addr add dev "$devdummy" 10.23.7.11/24
125*053f45beSAndroid Build Coastguard Worker	check_err $?
126*053f45beSAndroid Build Coastguard Worker	ip link > /dev/null
127*053f45beSAndroid Build Coastguard Worker	check_err $?
128*053f45beSAndroid Build Coastguard Worker	ip addr > /dev/null
129*053f45beSAndroid Build Coastguard Worker	check_err $?
130*053f45beSAndroid Build Coastguard Worker
131*053f45beSAndroid Build Coastguard Worker	kci_test_netconf "$gredev"
132*053f45beSAndroid Build Coastguard Worker
133*053f45beSAndroid Build Coastguard Worker	ip addr del dev "$devdummy" 10.23.7.11/24
134*053f45beSAndroid Build Coastguard Worker	check_err $?
135*053f45beSAndroid Build Coastguard Worker
136*053f45beSAndroid Build Coastguard Worker	ip link del $gredev
137*053f45beSAndroid Build Coastguard Worker	check_err $?
138*053f45beSAndroid Build Coastguard Worker
139*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
140*053f45beSAndroid Build Coastguard Worker		echo "FAIL: gre tunnel endpoint"
141*053f45beSAndroid Build Coastguard Worker		return 1
142*053f45beSAndroid Build Coastguard Worker	fi
143*053f45beSAndroid Build Coastguard Worker	echo "PASS: gre tunnel endpoint"
144*053f45beSAndroid Build Coastguard Worker}
145*053f45beSAndroid Build Coastguard Worker
146*053f45beSAndroid Build Coastguard Worker# tc uses rtnetlink too, for full tc testing
147*053f45beSAndroid Build Coastguard Worker# please see tools/testing/selftests/tc-testing.
148*053f45beSAndroid Build Coastguard Workerkci_test_tc()
149*053f45beSAndroid Build Coastguard Worker{
150*053f45beSAndroid Build Coastguard Worker	dev=lo
151*053f45beSAndroid Build Coastguard Worker	local ret=0
152*053f45beSAndroid Build Coastguard Worker
153*053f45beSAndroid Build Coastguard Worker	tc qdisc add dev "$dev" root handle 1: htb
154*053f45beSAndroid Build Coastguard Worker	check_err $?
155*053f45beSAndroid Build Coastguard Worker	tc class add dev "$dev" parent 1: classid 1:10 htb rate 1mbit
156*053f45beSAndroid Build Coastguard Worker	check_err $?
157*053f45beSAndroid Build Coastguard Worker	tc filter add dev "$dev" parent 1:0 prio 5 handle ffe: protocol ip u32 divisor 256
158*053f45beSAndroid Build Coastguard Worker	check_err $?
159*053f45beSAndroid Build Coastguard Worker	tc filter add dev "$dev" parent 1:0 prio 5 handle ffd: protocol ip u32 divisor 256
160*053f45beSAndroid Build Coastguard Worker	check_err $?
161*053f45beSAndroid Build Coastguard Worker	tc filter add dev "$dev" parent 1:0 prio 5 handle ffc: protocol ip u32 divisor 256
162*053f45beSAndroid Build Coastguard Worker	check_err $?
163*053f45beSAndroid Build Coastguard Worker	tc filter add dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:3 u32 ht ffe:2: match ip src 10.0.0.3 flowid 1:10
164*053f45beSAndroid Build Coastguard Worker	check_err $?
165*053f45beSAndroid Build Coastguard Worker	tc filter add dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:2 u32 ht ffe:2: match ip src 10.0.0.2 flowid 1:10
166*053f45beSAndroid Build Coastguard Worker	check_err $?
167*053f45beSAndroid Build Coastguard Worker	tc filter show dev "$dev" parent  1:0 > /dev/null
168*053f45beSAndroid Build Coastguard Worker	check_err $?
169*053f45beSAndroid Build Coastguard Worker	tc filter del dev "$dev" protocol ip parent 1: prio 5 handle ffe:2:3 u32
170*053f45beSAndroid Build Coastguard Worker	check_err $?
171*053f45beSAndroid Build Coastguard Worker	tc filter show dev "$dev" parent  1:0 > /dev/null
172*053f45beSAndroid Build Coastguard Worker	check_err $?
173*053f45beSAndroid Build Coastguard Worker	tc qdisc del dev "$dev" root handle 1: htb
174*053f45beSAndroid Build Coastguard Worker	check_err $?
175*053f45beSAndroid Build Coastguard Worker
176*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
177*053f45beSAndroid Build Coastguard Worker		echo "FAIL: tc htb hierarchy"
178*053f45beSAndroid Build Coastguard Worker		return 1
179*053f45beSAndroid Build Coastguard Worker	fi
180*053f45beSAndroid Build Coastguard Worker	echo "PASS: tc htb hierarchy"
181*053f45beSAndroid Build Coastguard Worker
182*053f45beSAndroid Build Coastguard Worker}
183*053f45beSAndroid Build Coastguard Worker
184*053f45beSAndroid Build Coastguard Workerkci_test_polrouting()
185*053f45beSAndroid Build Coastguard Worker{
186*053f45beSAndroid Build Coastguard Worker	local ret=0
187*053f45beSAndroid Build Coastguard Worker	ip rule add fwmark 1 lookup 100
188*053f45beSAndroid Build Coastguard Worker	check_err $?
189*053f45beSAndroid Build Coastguard Worker	ip route add local 0.0.0.0/0 dev lo table 100
190*053f45beSAndroid Build Coastguard Worker	check_err $?
191*053f45beSAndroid Build Coastguard Worker	ip r s t all > /dev/null
192*053f45beSAndroid Build Coastguard Worker	check_err $?
193*053f45beSAndroid Build Coastguard Worker	ip rule del fwmark 1 lookup 100
194*053f45beSAndroid Build Coastguard Worker	check_err $?
195*053f45beSAndroid Build Coastguard Worker	ip route del local 0.0.0.0/0 dev lo table 100
196*053f45beSAndroid Build Coastguard Worker	check_err $?
197*053f45beSAndroid Build Coastguard Worker
198*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
199*053f45beSAndroid Build Coastguard Worker		echo "FAIL: policy route test"
200*053f45beSAndroid Build Coastguard Worker		return 1
201*053f45beSAndroid Build Coastguard Worker	fi
202*053f45beSAndroid Build Coastguard Worker	echo "PASS: policy routing"
203*053f45beSAndroid Build Coastguard Worker}
204*053f45beSAndroid Build Coastguard Worker
205*053f45beSAndroid Build Coastguard Workerkci_test_route_get()
206*053f45beSAndroid Build Coastguard Worker{
207*053f45beSAndroid Build Coastguard Worker	local hash_policy=$(sysctl -n net.ipv4.fib_multipath_hash_policy)
208*053f45beSAndroid Build Coastguard Worker
209*053f45beSAndroid Build Coastguard Worker	local ret=0
210*053f45beSAndroid Build Coastguard Worker
211*053f45beSAndroid Build Coastguard Worker	ip route get 127.0.0.1 > /dev/null
212*053f45beSAndroid Build Coastguard Worker	check_err $?
213*053f45beSAndroid Build Coastguard Worker	ip route get 127.0.0.1 dev "$devdummy" > /dev/null
214*053f45beSAndroid Build Coastguard Worker	check_err $?
215*053f45beSAndroid Build Coastguard Worker	ip route get ::1 > /dev/null
216*053f45beSAndroid Build Coastguard Worker	check_err $?
217*053f45beSAndroid Build Coastguard Worker	ip route get fe80::1 dev "$devdummy" > /dev/null
218*053f45beSAndroid Build Coastguard Worker	check_err $?
219*053f45beSAndroid Build Coastguard Worker	ip route get 127.0.0.1 from 127.0.0.1 oif lo tos 0x10 mark 0x1 > /dev/null
220*053f45beSAndroid Build Coastguard Worker	check_err $?
221*053f45beSAndroid Build Coastguard Worker	ip route get ::1 from ::1 iif lo oif lo tos 0x10 mark 0x1 > /dev/null
222*053f45beSAndroid Build Coastguard Worker	check_err $?
223*053f45beSAndroid Build Coastguard Worker	ip addr add dev "$devdummy" 10.23.7.11/24
224*053f45beSAndroid Build Coastguard Worker	check_err $?
225*053f45beSAndroid Build Coastguard Worker	ip route get 10.23.7.11 from 10.23.7.12 iif "$devdummy" > /dev/null
226*053f45beSAndroid Build Coastguard Worker	check_err $?
227*053f45beSAndroid Build Coastguard Worker	ip route add 10.23.8.0/24 \
228*053f45beSAndroid Build Coastguard Worker		nexthop via 10.23.7.13 dev "$devdummy" \
229*053f45beSAndroid Build Coastguard Worker		nexthop via 10.23.7.14 dev "$devdummy"
230*053f45beSAndroid Build Coastguard Worker	check_err $?
231*053f45beSAndroid Build Coastguard Worker	sysctl -wq net.ipv4.fib_multipath_hash_policy=0
232*053f45beSAndroid Build Coastguard Worker	ip route get 10.23.8.11 > /dev/null
233*053f45beSAndroid Build Coastguard Worker	check_err $?
234*053f45beSAndroid Build Coastguard Worker	sysctl -wq net.ipv4.fib_multipath_hash_policy=1
235*053f45beSAndroid Build Coastguard Worker	ip route get 10.23.8.11 > /dev/null
236*053f45beSAndroid Build Coastguard Worker	check_err $?
237*053f45beSAndroid Build Coastguard Worker	sysctl -wq net.ipv4.fib_multipath_hash_policy="$hash_policy"
238*053f45beSAndroid Build Coastguard Worker	ip route del 10.23.8.0/24
239*053f45beSAndroid Build Coastguard Worker	check_err $?
240*053f45beSAndroid Build Coastguard Worker	ip addr del dev "$devdummy" 10.23.7.11/24
241*053f45beSAndroid Build Coastguard Worker	check_err $?
242*053f45beSAndroid Build Coastguard Worker
243*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
244*053f45beSAndroid Build Coastguard Worker		echo "FAIL: route get"
245*053f45beSAndroid Build Coastguard Worker		return 1
246*053f45beSAndroid Build Coastguard Worker	fi
247*053f45beSAndroid Build Coastguard Worker
248*053f45beSAndroid Build Coastguard Worker	echo "PASS: route get"
249*053f45beSAndroid Build Coastguard Worker}
250*053f45beSAndroid Build Coastguard Worker
251*053f45beSAndroid Build Coastguard Workerkci_test_addrlft()
252*053f45beSAndroid Build Coastguard Worker{
253*053f45beSAndroid Build Coastguard Worker	for i in $(seq 10 100) ;do
254*053f45beSAndroid Build Coastguard Worker		lft=$(((RANDOM%3) + 1))
255*053f45beSAndroid Build Coastguard Worker		ip addr add 10.23.11.$i/32 dev "$devdummy" preferred_lft $lft valid_lft $((lft+1))
256*053f45beSAndroid Build Coastguard Worker		check_err $?
257*053f45beSAndroid Build Coastguard Worker	done
258*053f45beSAndroid Build Coastguard Worker
259*053f45beSAndroid Build Coastguard Worker	sleep 5
260*053f45beSAndroid Build Coastguard Worker
261*053f45beSAndroid Build Coastguard Worker	ip addr show dev "$devdummy" | grep "10.23.11."
262*053f45beSAndroid Build Coastguard Worker	if [ $? -eq 0 ]; then
263*053f45beSAndroid Build Coastguard Worker		echo "FAIL: preferred_lft addresses remaining"
264*053f45beSAndroid Build Coastguard Worker		check_err 1
265*053f45beSAndroid Build Coastguard Worker		return
266*053f45beSAndroid Build Coastguard Worker	fi
267*053f45beSAndroid Build Coastguard Worker
268*053f45beSAndroid Build Coastguard Worker	echo "PASS: preferred_lft addresses have expired"
269*053f45beSAndroid Build Coastguard Worker}
270*053f45beSAndroid Build Coastguard Worker
271*053f45beSAndroid Build Coastguard Workerkci_test_promote_secondaries()
272*053f45beSAndroid Build Coastguard Worker{
273*053f45beSAndroid Build Coastguard Worker	promote=$(sysctl -n net.ipv4.conf.$devdummy.promote_secondaries)
274*053f45beSAndroid Build Coastguard Worker
275*053f45beSAndroid Build Coastguard Worker	sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=1
276*053f45beSAndroid Build Coastguard Worker
277*053f45beSAndroid Build Coastguard Worker	for i in $(seq 2 254);do
278*053f45beSAndroid Build Coastguard Worker		IP="10.23.11.$i"
279*053f45beSAndroid Build Coastguard Worker		ip -f inet addr add $IP/16 brd + dev "$devdummy"
280*053f45beSAndroid Build Coastguard Worker		ifconfig "$devdummy" $IP netmask 255.255.0.0
281*053f45beSAndroid Build Coastguard Worker	done
282*053f45beSAndroid Build Coastguard Worker
283*053f45beSAndroid Build Coastguard Worker	ip addr flush dev "$devdummy"
284*053f45beSAndroid Build Coastguard Worker
285*053f45beSAndroid Build Coastguard Worker	[ $promote -eq 0 ] && sysctl -q net.ipv4.conf.$devdummy.promote_secondaries=0
286*053f45beSAndroid Build Coastguard Worker
287*053f45beSAndroid Build Coastguard Worker	echo "PASS: promote_secondaries complete"
288*053f45beSAndroid Build Coastguard Worker}
289*053f45beSAndroid Build Coastguard Worker
290*053f45beSAndroid Build Coastguard Workerkci_test_addrlabel()
291*053f45beSAndroid Build Coastguard Worker{
292*053f45beSAndroid Build Coastguard Worker	local ret=0
293*053f45beSAndroid Build Coastguard Worker
294*053f45beSAndroid Build Coastguard Worker	ip addrlabel add prefix dead::/64 dev lo label 1
295*053f45beSAndroid Build Coastguard Worker	check_err $?
296*053f45beSAndroid Build Coastguard Worker
297*053f45beSAndroid Build Coastguard Worker	ip addrlabel list |grep -q "prefix dead::/64 dev lo label 1"
298*053f45beSAndroid Build Coastguard Worker	check_err $?
299*053f45beSAndroid Build Coastguard Worker
300*053f45beSAndroid Build Coastguard Worker	ip addrlabel del prefix dead::/64 dev lo label 1 2> /dev/null
301*053f45beSAndroid Build Coastguard Worker	check_err $?
302*053f45beSAndroid Build Coastguard Worker
303*053f45beSAndroid Build Coastguard Worker	ip addrlabel add prefix dead::/64 label 1 2> /dev/null
304*053f45beSAndroid Build Coastguard Worker	check_err $?
305*053f45beSAndroid Build Coastguard Worker
306*053f45beSAndroid Build Coastguard Worker	ip addrlabel del prefix dead::/64 label 1 2> /dev/null
307*053f45beSAndroid Build Coastguard Worker	check_err $?
308*053f45beSAndroid Build Coastguard Worker
309*053f45beSAndroid Build Coastguard Worker	# concurrent add/delete
310*053f45beSAndroid Build Coastguard Worker	for i in $(seq 1 1000); do
311*053f45beSAndroid Build Coastguard Worker		ip addrlabel add prefix 1c3::/64 label 12345 2>/dev/null
312*053f45beSAndroid Build Coastguard Worker	done &
313*053f45beSAndroid Build Coastguard Worker
314*053f45beSAndroid Build Coastguard Worker	for i in $(seq 1 1000); do
315*053f45beSAndroid Build Coastguard Worker		ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null
316*053f45beSAndroid Build Coastguard Worker	done
317*053f45beSAndroid Build Coastguard Worker
318*053f45beSAndroid Build Coastguard Worker	wait
319*053f45beSAndroid Build Coastguard Worker
320*053f45beSAndroid Build Coastguard Worker	ip addrlabel del prefix 1c3::/64 label 12345 2>/dev/null
321*053f45beSAndroid Build Coastguard Worker
322*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
323*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipv6 addrlabel"
324*053f45beSAndroid Build Coastguard Worker		return 1
325*053f45beSAndroid Build Coastguard Worker	fi
326*053f45beSAndroid Build Coastguard Worker
327*053f45beSAndroid Build Coastguard Worker	echo "PASS: ipv6 addrlabel"
328*053f45beSAndroid Build Coastguard Worker}
329*053f45beSAndroid Build Coastguard Worker
330*053f45beSAndroid Build Coastguard Workerkci_test_ifalias()
331*053f45beSAndroid Build Coastguard Worker{
332*053f45beSAndroid Build Coastguard Worker	local ret=0
333*053f45beSAndroid Build Coastguard Worker	namewant=$(uuidgen)
334*053f45beSAndroid Build Coastguard Worker	syspathname="/sys/class/net/$devdummy/ifalias"
335*053f45beSAndroid Build Coastguard Worker
336*053f45beSAndroid Build Coastguard Worker	ip link set dev "$devdummy" alias "$namewant"
337*053f45beSAndroid Build Coastguard Worker	check_err $?
338*053f45beSAndroid Build Coastguard Worker
339*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
340*053f45beSAndroid Build Coastguard Worker		echo "FAIL: cannot set interface alias of $devdummy to $namewant"
341*053f45beSAndroid Build Coastguard Worker		return 1
342*053f45beSAndroid Build Coastguard Worker	fi
343*053f45beSAndroid Build Coastguard Worker
344*053f45beSAndroid Build Coastguard Worker	ip link show "$devdummy" | grep -q "alias $namewant"
345*053f45beSAndroid Build Coastguard Worker	check_err $?
346*053f45beSAndroid Build Coastguard Worker
347*053f45beSAndroid Build Coastguard Worker	if [ -r "$syspathname" ] ; then
348*053f45beSAndroid Build Coastguard Worker		read namehave < "$syspathname"
349*053f45beSAndroid Build Coastguard Worker		if [ "$namewant" != "$namehave" ]; then
350*053f45beSAndroid Build Coastguard Worker			echo "FAIL: did set ifalias $namewant but got $namehave"
351*053f45beSAndroid Build Coastguard Worker			return 1
352*053f45beSAndroid Build Coastguard Worker		fi
353*053f45beSAndroid Build Coastguard Worker
354*053f45beSAndroid Build Coastguard Worker		namewant=$(uuidgen)
355*053f45beSAndroid Build Coastguard Worker		echo "$namewant" > "$syspathname"
356*053f45beSAndroid Build Coastguard Worker	        ip link show "$devdummy" | grep -q "alias $namewant"
357*053f45beSAndroid Build Coastguard Worker		check_err $?
358*053f45beSAndroid Build Coastguard Worker
359*053f45beSAndroid Build Coastguard Worker		# sysfs interface allows to delete alias again
360*053f45beSAndroid Build Coastguard Worker		echo "" > "$syspathname"
361*053f45beSAndroid Build Coastguard Worker
362*053f45beSAndroid Build Coastguard Worker	        ip link show "$devdummy" | grep -q "alias $namewant"
363*053f45beSAndroid Build Coastguard Worker		check_fail $?
364*053f45beSAndroid Build Coastguard Worker
365*053f45beSAndroid Build Coastguard Worker		for i in $(seq 1 100); do
366*053f45beSAndroid Build Coastguard Worker			uuidgen > "$syspathname" &
367*053f45beSAndroid Build Coastguard Worker		done
368*053f45beSAndroid Build Coastguard Worker
369*053f45beSAndroid Build Coastguard Worker		wait
370*053f45beSAndroid Build Coastguard Worker
371*053f45beSAndroid Build Coastguard Worker		# re-add the alias -- kernel should free mem when dummy dev is removed
372*053f45beSAndroid Build Coastguard Worker		ip link set dev "$devdummy" alias "$namewant"
373*053f45beSAndroid Build Coastguard Worker		check_err $?
374*053f45beSAndroid Build Coastguard Worker	fi
375*053f45beSAndroid Build Coastguard Worker
376*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
377*053f45beSAndroid Build Coastguard Worker		echo "FAIL: set interface alias $devdummy to $namewant"
378*053f45beSAndroid Build Coastguard Worker		return 1
379*053f45beSAndroid Build Coastguard Worker	fi
380*053f45beSAndroid Build Coastguard Worker
381*053f45beSAndroid Build Coastguard Worker	echo "PASS: set ifalias $namewant for $devdummy"
382*053f45beSAndroid Build Coastguard Worker}
383*053f45beSAndroid Build Coastguard Worker
384*053f45beSAndroid Build Coastguard Workerkci_test_vrf()
385*053f45beSAndroid Build Coastguard Worker{
386*053f45beSAndroid Build Coastguard Worker	vrfname="test-vrf"
387*053f45beSAndroid Build Coastguard Worker	local ret=0
388*053f45beSAndroid Build Coastguard Worker
389*053f45beSAndroid Build Coastguard Worker	ip link show type vrf 2>/dev/null
390*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
391*053f45beSAndroid Build Coastguard Worker		echo "SKIP: vrf: iproute2 too old"
392*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
393*053f45beSAndroid Build Coastguard Worker	fi
394*053f45beSAndroid Build Coastguard Worker
395*053f45beSAndroid Build Coastguard Worker	ip link add "$vrfname" type vrf table 10
396*053f45beSAndroid Build Coastguard Worker	check_err $?
397*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
398*053f45beSAndroid Build Coastguard Worker		echo "FAIL: can't add vrf interface, skipping test"
399*053f45beSAndroid Build Coastguard Worker		return 0
400*053f45beSAndroid Build Coastguard Worker	fi
401*053f45beSAndroid Build Coastguard Worker
402*053f45beSAndroid Build Coastguard Worker	ip -br link show type vrf | grep -q "$vrfname"
403*053f45beSAndroid Build Coastguard Worker	check_err $?
404*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
405*053f45beSAndroid Build Coastguard Worker		echo "FAIL: created vrf device not found"
406*053f45beSAndroid Build Coastguard Worker		return 1
407*053f45beSAndroid Build Coastguard Worker	fi
408*053f45beSAndroid Build Coastguard Worker
409*053f45beSAndroid Build Coastguard Worker	ip link set dev "$vrfname" up
410*053f45beSAndroid Build Coastguard Worker	check_err $?
411*053f45beSAndroid Build Coastguard Worker
412*053f45beSAndroid Build Coastguard Worker	ip link set dev "$devdummy" master "$vrfname"
413*053f45beSAndroid Build Coastguard Worker	check_err $?
414*053f45beSAndroid Build Coastguard Worker	ip link del dev "$vrfname"
415*053f45beSAndroid Build Coastguard Worker	check_err $?
416*053f45beSAndroid Build Coastguard Worker
417*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
418*053f45beSAndroid Build Coastguard Worker		echo "FAIL: vrf"
419*053f45beSAndroid Build Coastguard Worker		return 1
420*053f45beSAndroid Build Coastguard Worker	fi
421*053f45beSAndroid Build Coastguard Worker
422*053f45beSAndroid Build Coastguard Worker	echo "PASS: vrf"
423*053f45beSAndroid Build Coastguard Worker}
424*053f45beSAndroid Build Coastguard Worker
425*053f45beSAndroid Build Coastguard Workerkci_test_encap_vxlan()
426*053f45beSAndroid Build Coastguard Worker{
427*053f45beSAndroid Build Coastguard Worker	local ret=0
428*053f45beSAndroid Build Coastguard Worker	vxlan="test-vxlan0"
429*053f45beSAndroid Build Coastguard Worker	vlan="test-vlan0"
430*053f45beSAndroid Build Coastguard Worker	testns="$1"
431*053f45beSAndroid Build Coastguard Worker
432*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add "$vxlan" type vxlan id 42 group 239.1.1.1 \
433*053f45beSAndroid Build Coastguard Worker		dev "$devdummy" dstport 4789 2>/dev/null
434*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
435*053f45beSAndroid Build Coastguard Worker		echo "FAIL: can't add vxlan interface, skipping test"
436*053f45beSAndroid Build Coastguard Worker		return 0
437*053f45beSAndroid Build Coastguard Worker	fi
438*053f45beSAndroid Build Coastguard Worker	check_err $?
439*053f45beSAndroid Build Coastguard Worker
440*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add 10.2.11.49/24 dev "$vxlan"
441*053f45beSAndroid Build Coastguard Worker	check_err $?
442*053f45beSAndroid Build Coastguard Worker
443*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set up dev "$vxlan"
444*053f45beSAndroid Build Coastguard Worker	check_err $?
445*053f45beSAndroid Build Coastguard Worker
446*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add link "$vxlan" name "$vlan" type vlan id 1
447*053f45beSAndroid Build Coastguard Worker	check_err $?
448*053f45beSAndroid Build Coastguard Worker
449*053f45beSAndroid Build Coastguard Worker	# changelink testcases
450*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan vni 43 2>/dev/null
451*053f45beSAndroid Build Coastguard Worker	check_fail $?
452*053f45beSAndroid Build Coastguard Worker
453*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan group ffe5::5 dev "$devdummy" 2>/dev/null
454*053f45beSAndroid Build Coastguard Worker	check_fail $?
455*053f45beSAndroid Build Coastguard Worker
456*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan ttl inherit 2>/dev/null
457*053f45beSAndroid Build Coastguard Worker	check_fail $?
458*053f45beSAndroid Build Coastguard Worker
459*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan ttl 64
460*053f45beSAndroid Build Coastguard Worker	check_err $?
461*053f45beSAndroid Build Coastguard Worker
462*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan nolearning
463*053f45beSAndroid Build Coastguard Worker	check_err $?
464*053f45beSAndroid Build Coastguard Worker
465*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan proxy 2>/dev/null
466*053f45beSAndroid Build Coastguard Worker	check_fail $?
467*053f45beSAndroid Build Coastguard Worker
468*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan norsc 2>/dev/null
469*053f45beSAndroid Build Coastguard Worker	check_fail $?
470*053f45beSAndroid Build Coastguard Worker
471*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan l2miss 2>/dev/null
472*053f45beSAndroid Build Coastguard Worker	check_fail $?
473*053f45beSAndroid Build Coastguard Worker
474*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan l3miss 2>/dev/null
475*053f45beSAndroid Build Coastguard Worker	check_fail $?
476*053f45beSAndroid Build Coastguard Worker
477*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan external 2>/dev/null
478*053f45beSAndroid Build Coastguard Worker	check_fail $?
479*053f45beSAndroid Build Coastguard Worker
480*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan udpcsum 2>/dev/null
481*053f45beSAndroid Build Coastguard Worker	check_fail $?
482*053f45beSAndroid Build Coastguard Worker
483*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan udp6zerocsumtx 2>/dev/null
484*053f45beSAndroid Build Coastguard Worker	check_fail $?
485*053f45beSAndroid Build Coastguard Worker
486*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan udp6zerocsumrx 2>/dev/null
487*053f45beSAndroid Build Coastguard Worker	check_fail $?
488*053f45beSAndroid Build Coastguard Worker
489*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan remcsumtx 2>/dev/null
490*053f45beSAndroid Build Coastguard Worker	check_fail $?
491*053f45beSAndroid Build Coastguard Worker
492*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan remcsumrx 2>/dev/null
493*053f45beSAndroid Build Coastguard Worker	check_fail $?
494*053f45beSAndroid Build Coastguard Worker
495*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan gbp 2>/dev/null
496*053f45beSAndroid Build Coastguard Worker	check_fail $?
497*053f45beSAndroid Build Coastguard Worker
498*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev "$vxlan" type vxlan gpe 2>/dev/null
499*053f45beSAndroid Build Coastguard Worker	check_fail $?
500*053f45beSAndroid Build Coastguard Worker
501*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$vxlan"
502*053f45beSAndroid Build Coastguard Worker	check_err $?
503*053f45beSAndroid Build Coastguard Worker
504*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
505*053f45beSAndroid Build Coastguard Worker		echo "FAIL: vxlan"
506*053f45beSAndroid Build Coastguard Worker		return 1
507*053f45beSAndroid Build Coastguard Worker	fi
508*053f45beSAndroid Build Coastguard Worker	echo "PASS: vxlan"
509*053f45beSAndroid Build Coastguard Worker}
510*053f45beSAndroid Build Coastguard Worker
511*053f45beSAndroid Build Coastguard Workerkci_test_encap_fou()
512*053f45beSAndroid Build Coastguard Worker{
513*053f45beSAndroid Build Coastguard Worker	local ret=0
514*053f45beSAndroid Build Coastguard Worker	name="test-fou"
515*053f45beSAndroid Build Coastguard Worker	testns="$1"
516*053f45beSAndroid Build Coastguard Worker
517*053f45beSAndroid Build Coastguard Worker	ip fou help 2>&1 |grep -q 'Usage: ip fou'
518*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
519*053f45beSAndroid Build Coastguard Worker		echo "SKIP: fou: iproute2 too old"
520*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
521*053f45beSAndroid Build Coastguard Worker	fi
522*053f45beSAndroid Build Coastguard Worker
523*053f45beSAndroid Build Coastguard Worker	if ! /sbin/modprobe -q -n fou; then
524*053f45beSAndroid Build Coastguard Worker		echo "SKIP: module fou is not found"
525*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
526*053f45beSAndroid Build Coastguard Worker	fi
527*053f45beSAndroid Build Coastguard Worker	/sbin/modprobe -q fou
528*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" fou add port 7777 ipproto 47 2>/dev/null
529*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
530*053f45beSAndroid Build Coastguard Worker		echo "FAIL: can't add fou port 7777, skipping test"
531*053f45beSAndroid Build Coastguard Worker		return 1
532*053f45beSAndroid Build Coastguard Worker	fi
533*053f45beSAndroid Build Coastguard Worker
534*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" fou add port 8888 ipproto 4
535*053f45beSAndroid Build Coastguard Worker	check_err $?
536*053f45beSAndroid Build Coastguard Worker
537*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" fou del port 9999 2>/dev/null
538*053f45beSAndroid Build Coastguard Worker	check_fail $?
539*053f45beSAndroid Build Coastguard Worker
540*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" fou del port 7777
541*053f45beSAndroid Build Coastguard Worker	check_err $?
542*053f45beSAndroid Build Coastguard Worker
543*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
544*053f45beSAndroid Build Coastguard Worker		echo "FAIL: fou"
545*053f45beSAndroid Build Coastguard Worker		return 1
546*053f45beSAndroid Build Coastguard Worker	fi
547*053f45beSAndroid Build Coastguard Worker
548*053f45beSAndroid Build Coastguard Worker	echo "PASS: fou"
549*053f45beSAndroid Build Coastguard Worker}
550*053f45beSAndroid Build Coastguard Worker
551*053f45beSAndroid Build Coastguard Worker# test various encap methods, use netns to avoid unwanted interference
552*053f45beSAndroid Build Coastguard Workerkci_test_encap()
553*053f45beSAndroid Build Coastguard Worker{
554*053f45beSAndroid Build Coastguard Worker	testns="testns"
555*053f45beSAndroid Build Coastguard Worker	local ret=0
556*053f45beSAndroid Build Coastguard Worker
557*053f45beSAndroid Build Coastguard Worker	ip netns add "$testns"
558*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
559*053f45beSAndroid Build Coastguard Worker		echo "SKIP encap tests: cannot add net namespace $testns"
560*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
561*053f45beSAndroid Build Coastguard Worker	fi
562*053f45beSAndroid Build Coastguard Worker
563*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set lo up
564*053f45beSAndroid Build Coastguard Worker	check_err $?
565*053f45beSAndroid Build Coastguard Worker
566*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add name "$devdummy" type dummy
567*053f45beSAndroid Build Coastguard Worker	check_err $?
568*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set "$devdummy" up
569*053f45beSAndroid Build Coastguard Worker	check_err $?
570*053f45beSAndroid Build Coastguard Worker
571*053f45beSAndroid Build Coastguard Worker	kci_test_encap_vxlan "$testns"
572*053f45beSAndroid Build Coastguard Worker	check_err $?
573*053f45beSAndroid Build Coastguard Worker	kci_test_encap_fou "$testns"
574*053f45beSAndroid Build Coastguard Worker	check_err $?
575*053f45beSAndroid Build Coastguard Worker
576*053f45beSAndroid Build Coastguard Worker	ip netns del "$testns"
577*053f45beSAndroid Build Coastguard Worker	return $ret
578*053f45beSAndroid Build Coastguard Worker}
579*053f45beSAndroid Build Coastguard Worker
580*053f45beSAndroid Build Coastguard Workerkci_test_macsec()
581*053f45beSAndroid Build Coastguard Worker{
582*053f45beSAndroid Build Coastguard Worker	msname="test_macsec0"
583*053f45beSAndroid Build Coastguard Worker	local ret=0
584*053f45beSAndroid Build Coastguard Worker
585*053f45beSAndroid Build Coastguard Worker	ip macsec help 2>&1 | grep -q "^Usage: ip macsec"
586*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
587*053f45beSAndroid Build Coastguard Worker		echo "SKIP: macsec: iproute2 too old"
588*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
589*053f45beSAndroid Build Coastguard Worker	fi
590*053f45beSAndroid Build Coastguard Worker
591*053f45beSAndroid Build Coastguard Worker	ip link add link "$devdummy" "$msname" type macsec port 42 encrypt on
592*053f45beSAndroid Build Coastguard Worker	check_err $?
593*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
594*053f45beSAndroid Build Coastguard Worker		echo "FAIL: can't add macsec interface, skipping test"
595*053f45beSAndroid Build Coastguard Worker		return 1
596*053f45beSAndroid Build Coastguard Worker	fi
597*053f45beSAndroid Build Coastguard Worker
598*053f45beSAndroid Build Coastguard Worker	ip macsec add "$msname" tx sa 0 pn 1024 on key 01 12345678901234567890123456789012
599*053f45beSAndroid Build Coastguard Worker	check_err $?
600*053f45beSAndroid Build Coastguard Worker
601*053f45beSAndroid Build Coastguard Worker	ip macsec add "$msname" rx port 1234 address "1c:ed:de:ad:be:ef"
602*053f45beSAndroid Build Coastguard Worker	check_err $?
603*053f45beSAndroid Build Coastguard Worker
604*053f45beSAndroid Build Coastguard Worker	ip macsec add "$msname" rx port 1234 address "1c:ed:de:ad:be:ef" sa 0 pn 1 on key 00 0123456789abcdef0123456789abcdef
605*053f45beSAndroid Build Coastguard Worker	check_err $?
606*053f45beSAndroid Build Coastguard Worker
607*053f45beSAndroid Build Coastguard Worker	ip macsec show > /dev/null
608*053f45beSAndroid Build Coastguard Worker	check_err $?
609*053f45beSAndroid Build Coastguard Worker
610*053f45beSAndroid Build Coastguard Worker	ip link del dev "$msname"
611*053f45beSAndroid Build Coastguard Worker	check_err $?
612*053f45beSAndroid Build Coastguard Worker
613*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
614*053f45beSAndroid Build Coastguard Worker		echo "FAIL: macsec"
615*053f45beSAndroid Build Coastguard Worker		return 1
616*053f45beSAndroid Build Coastguard Worker	fi
617*053f45beSAndroid Build Coastguard Worker
618*053f45beSAndroid Build Coastguard Worker	echo "PASS: macsec"
619*053f45beSAndroid Build Coastguard Worker}
620*053f45beSAndroid Build Coastguard Worker
621*053f45beSAndroid Build Coastguard Worker#-------------------------------------------------------------------
622*053f45beSAndroid Build Coastguard Worker# Example commands
623*053f45beSAndroid Build Coastguard Worker#   ip x s add proto esp src 14.0.0.52 dst 14.0.0.70 \
624*053f45beSAndroid Build Coastguard Worker#            spi 0x07 mode transport reqid 0x07 replay-window 32 \
625*053f45beSAndroid Build Coastguard Worker#            aead 'rfc4106(gcm(aes))' 1234567890123456dcba 128 \
626*053f45beSAndroid Build Coastguard Worker#            sel src 14.0.0.52/24 dst 14.0.0.70/24
627*053f45beSAndroid Build Coastguard Worker#   ip x p add dir out src 14.0.0.52/24 dst 14.0.0.70/24 \
628*053f45beSAndroid Build Coastguard Worker#            tmpl proto esp src 14.0.0.52 dst 14.0.0.70 \
629*053f45beSAndroid Build Coastguard Worker#            spi 0x07 mode transport reqid 0x07
630*053f45beSAndroid Build Coastguard Worker#
631*053f45beSAndroid Build Coastguard Worker# Subcommands not tested
632*053f45beSAndroid Build Coastguard Worker#    ip x s update
633*053f45beSAndroid Build Coastguard Worker#    ip x s allocspi
634*053f45beSAndroid Build Coastguard Worker#    ip x s deleteall
635*053f45beSAndroid Build Coastguard Worker#    ip x p update
636*053f45beSAndroid Build Coastguard Worker#    ip x p deleteall
637*053f45beSAndroid Build Coastguard Worker#    ip x p set
638*053f45beSAndroid Build Coastguard Worker#-------------------------------------------------------------------
639*053f45beSAndroid Build Coastguard Workerkci_test_ipsec()
640*053f45beSAndroid Build Coastguard Worker{
641*053f45beSAndroid Build Coastguard Worker	local ret=0
642*053f45beSAndroid Build Coastguard Worker	algo="aead rfc4106(gcm(aes)) 0x3132333435363738393031323334353664636261 128"
643*053f45beSAndroid Build Coastguard Worker	srcip=192.168.123.1
644*053f45beSAndroid Build Coastguard Worker	dstip=192.168.123.2
645*053f45beSAndroid Build Coastguard Worker	spi=7
646*053f45beSAndroid Build Coastguard Worker
647*053f45beSAndroid Build Coastguard Worker	ip addr add $srcip dev $devdummy
648*053f45beSAndroid Build Coastguard Worker
649*053f45beSAndroid Build Coastguard Worker	# flush to be sure there's nothing configured
650*053f45beSAndroid Build Coastguard Worker	ip x s flush ; ip x p flush
651*053f45beSAndroid Build Coastguard Worker	check_err $?
652*053f45beSAndroid Build Coastguard Worker
653*053f45beSAndroid Build Coastguard Worker	# start the monitor in the background
654*053f45beSAndroid Build Coastguard Worker	tmpfile=`mktemp /var/run/ipsectestXXX`
655*053f45beSAndroid Build Coastguard Worker	mpid=`(ip x m > $tmpfile & echo $!) 2>/dev/null`
656*053f45beSAndroid Build Coastguard Worker	sleep 0.2
657*053f45beSAndroid Build Coastguard Worker
658*053f45beSAndroid Build Coastguard Worker	ipsecid="proto esp src $srcip dst $dstip spi 0x07"
659*053f45beSAndroid Build Coastguard Worker	ip x s add $ipsecid \
660*053f45beSAndroid Build Coastguard Worker            mode transport reqid 0x07 replay-window 32 \
661*053f45beSAndroid Build Coastguard Worker            $algo sel src $srcip/24 dst $dstip/24
662*053f45beSAndroid Build Coastguard Worker	check_err $?
663*053f45beSAndroid Build Coastguard Worker
664*053f45beSAndroid Build Coastguard Worker	lines=`ip x s list | grep $srcip | grep $dstip | wc -l`
665*053f45beSAndroid Build Coastguard Worker	test $lines -eq 2
666*053f45beSAndroid Build Coastguard Worker	check_err $?
667*053f45beSAndroid Build Coastguard Worker
668*053f45beSAndroid Build Coastguard Worker	ip x s count | grep -q "SAD count 1"
669*053f45beSAndroid Build Coastguard Worker	check_err $?
670*053f45beSAndroid Build Coastguard Worker
671*053f45beSAndroid Build Coastguard Worker	lines=`ip x s get $ipsecid | grep $srcip | grep $dstip | wc -l`
672*053f45beSAndroid Build Coastguard Worker	test $lines -eq 2
673*053f45beSAndroid Build Coastguard Worker	check_err $?
674*053f45beSAndroid Build Coastguard Worker
675*053f45beSAndroid Build Coastguard Worker	ip x s delete $ipsecid
676*053f45beSAndroid Build Coastguard Worker	check_err $?
677*053f45beSAndroid Build Coastguard Worker
678*053f45beSAndroid Build Coastguard Worker	lines=`ip x s list | wc -l`
679*053f45beSAndroid Build Coastguard Worker	test $lines -eq 0
680*053f45beSAndroid Build Coastguard Worker	check_err $?
681*053f45beSAndroid Build Coastguard Worker
682*053f45beSAndroid Build Coastguard Worker	ipsecsel="dir out src $srcip/24 dst $dstip/24"
683*053f45beSAndroid Build Coastguard Worker	ip x p add $ipsecsel \
684*053f45beSAndroid Build Coastguard Worker		    tmpl proto esp src $srcip dst $dstip \
685*053f45beSAndroid Build Coastguard Worker		    spi 0x07 mode transport reqid 0x07
686*053f45beSAndroid Build Coastguard Worker	check_err $?
687*053f45beSAndroid Build Coastguard Worker
688*053f45beSAndroid Build Coastguard Worker	lines=`ip x p list | grep $srcip | grep $dstip | wc -l`
689*053f45beSAndroid Build Coastguard Worker	test $lines -eq 2
690*053f45beSAndroid Build Coastguard Worker	check_err $?
691*053f45beSAndroid Build Coastguard Worker
692*053f45beSAndroid Build Coastguard Worker	ip x p count | grep -q "SPD IN  0 OUT 1 FWD 0"
693*053f45beSAndroid Build Coastguard Worker	check_err $?
694*053f45beSAndroid Build Coastguard Worker
695*053f45beSAndroid Build Coastguard Worker	lines=`ip x p get $ipsecsel | grep $srcip | grep $dstip | wc -l`
696*053f45beSAndroid Build Coastguard Worker	test $lines -eq 2
697*053f45beSAndroid Build Coastguard Worker	check_err $?
698*053f45beSAndroid Build Coastguard Worker
699*053f45beSAndroid Build Coastguard Worker	ip x p delete $ipsecsel
700*053f45beSAndroid Build Coastguard Worker	check_err $?
701*053f45beSAndroid Build Coastguard Worker
702*053f45beSAndroid Build Coastguard Worker	lines=`ip x p list | wc -l`
703*053f45beSAndroid Build Coastguard Worker	test $lines -eq 0
704*053f45beSAndroid Build Coastguard Worker	check_err $?
705*053f45beSAndroid Build Coastguard Worker
706*053f45beSAndroid Build Coastguard Worker	# check the monitor results
707*053f45beSAndroid Build Coastguard Worker	kill $mpid
708*053f45beSAndroid Build Coastguard Worker	lines=`wc -l $tmpfile | cut "-d " -f1`
709*053f45beSAndroid Build Coastguard Worker	test $lines -eq 20
710*053f45beSAndroid Build Coastguard Worker	check_err $?
711*053f45beSAndroid Build Coastguard Worker	rm -rf $tmpfile
712*053f45beSAndroid Build Coastguard Worker
713*053f45beSAndroid Build Coastguard Worker	# clean up any leftovers
714*053f45beSAndroid Build Coastguard Worker	ip x s flush
715*053f45beSAndroid Build Coastguard Worker	check_err $?
716*053f45beSAndroid Build Coastguard Worker	ip x p flush
717*053f45beSAndroid Build Coastguard Worker	check_err $?
718*053f45beSAndroid Build Coastguard Worker	ip addr del $srcip/32 dev $devdummy
719*053f45beSAndroid Build Coastguard Worker
720*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
721*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec"
722*053f45beSAndroid Build Coastguard Worker		return 1
723*053f45beSAndroid Build Coastguard Worker	fi
724*053f45beSAndroid Build Coastguard Worker	echo "PASS: ipsec"
725*053f45beSAndroid Build Coastguard Worker}
726*053f45beSAndroid Build Coastguard Worker
727*053f45beSAndroid Build Coastguard Worker#-------------------------------------------------------------------
728*053f45beSAndroid Build Coastguard Worker# Example commands
729*053f45beSAndroid Build Coastguard Worker#   ip x s add proto esp src 14.0.0.52 dst 14.0.0.70 \
730*053f45beSAndroid Build Coastguard Worker#            spi 0x07 mode transport reqid 0x07 replay-window 32 \
731*053f45beSAndroid Build Coastguard Worker#            aead 'rfc4106(gcm(aes))' 1234567890123456dcba 128 \
732*053f45beSAndroid Build Coastguard Worker#            sel src 14.0.0.52/24 dst 14.0.0.70/24
733*053f45beSAndroid Build Coastguard Worker#            offload dev sim1 dir out
734*053f45beSAndroid Build Coastguard Worker#   ip x p add dir out src 14.0.0.52/24 dst 14.0.0.70/24 \
735*053f45beSAndroid Build Coastguard Worker#            tmpl proto esp src 14.0.0.52 dst 14.0.0.70 \
736*053f45beSAndroid Build Coastguard Worker#            spi 0x07 mode transport reqid 0x07
737*053f45beSAndroid Build Coastguard Worker#
738*053f45beSAndroid Build Coastguard Worker#-------------------------------------------------------------------
739*053f45beSAndroid Build Coastguard Workerkci_test_ipsec_offload()
740*053f45beSAndroid Build Coastguard Worker{
741*053f45beSAndroid Build Coastguard Worker	local ret=0
742*053f45beSAndroid Build Coastguard Worker	algo="aead rfc4106(gcm(aes)) 0x3132333435363738393031323334353664636261 128"
743*053f45beSAndroid Build Coastguard Worker	srcip=192.168.123.3
744*053f45beSAndroid Build Coastguard Worker	dstip=192.168.123.4
745*053f45beSAndroid Build Coastguard Worker	sysfsd=/sys/kernel/debug/netdevsim/netdevsim0/ports/0/
746*053f45beSAndroid Build Coastguard Worker	sysfsf=$sysfsd/ipsec
747*053f45beSAndroid Build Coastguard Worker	sysfsnet=/sys/bus/netdevsim/devices/netdevsim0/net/
748*053f45beSAndroid Build Coastguard Worker	probed=false
749*053f45beSAndroid Build Coastguard Worker
750*053f45beSAndroid Build Coastguard Worker	# setup netdevsim since dummydev doesn't have offload support
751*053f45beSAndroid Build Coastguard Worker	if [ ! -w /sys/bus/netdevsim/new_device ] ; then
752*053f45beSAndroid Build Coastguard Worker		modprobe -q netdevsim
753*053f45beSAndroid Build Coastguard Worker		check_err $?
754*053f45beSAndroid Build Coastguard Worker		if [ $ret -ne 0 ]; then
755*053f45beSAndroid Build Coastguard Worker			echo "SKIP: ipsec_offload can't load netdevsim"
756*053f45beSAndroid Build Coastguard Worker			return $ksft_skip
757*053f45beSAndroid Build Coastguard Worker		fi
758*053f45beSAndroid Build Coastguard Worker		probed=true
759*053f45beSAndroid Build Coastguard Worker	fi
760*053f45beSAndroid Build Coastguard Worker
761*053f45beSAndroid Build Coastguard Worker	echo "0" > /sys/bus/netdevsim/new_device
762*053f45beSAndroid Build Coastguard Worker	while [ ! -d $sysfsnet ] ; do :; done
763*053f45beSAndroid Build Coastguard Worker	udevadm settle
764*053f45beSAndroid Build Coastguard Worker	dev=`ls $sysfsnet`
765*053f45beSAndroid Build Coastguard Worker
766*053f45beSAndroid Build Coastguard Worker	ip addr add $srcip dev $dev
767*053f45beSAndroid Build Coastguard Worker	ip link set $dev up
768*053f45beSAndroid Build Coastguard Worker	if [ ! -d $sysfsd ] ; then
769*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload can't create device $dev"
770*053f45beSAndroid Build Coastguard Worker		return 1
771*053f45beSAndroid Build Coastguard Worker	fi
772*053f45beSAndroid Build Coastguard Worker	if [ ! -f $sysfsf ] ; then
773*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload netdevsim doesn't support IPsec offload"
774*053f45beSAndroid Build Coastguard Worker		return 1
775*053f45beSAndroid Build Coastguard Worker	fi
776*053f45beSAndroid Build Coastguard Worker
777*053f45beSAndroid Build Coastguard Worker	# flush to be sure there's nothing configured
778*053f45beSAndroid Build Coastguard Worker	ip x s flush ; ip x p flush
779*053f45beSAndroid Build Coastguard Worker
780*053f45beSAndroid Build Coastguard Worker	# create offloaded SAs, both in and out
781*053f45beSAndroid Build Coastguard Worker	ip x p add dir out src $srcip/24 dst $dstip/24 \
782*053f45beSAndroid Build Coastguard Worker	    tmpl proto esp src $srcip dst $dstip spi 9 \
783*053f45beSAndroid Build Coastguard Worker	    mode transport reqid 42
784*053f45beSAndroid Build Coastguard Worker	check_err $?
785*053f45beSAndroid Build Coastguard Worker	ip x p add dir in src $dstip/24 dst $srcip/24 \
786*053f45beSAndroid Build Coastguard Worker	    tmpl proto esp src $dstip dst $srcip spi 9 \
787*053f45beSAndroid Build Coastguard Worker	    mode transport reqid 42
788*053f45beSAndroid Build Coastguard Worker	check_err $?
789*053f45beSAndroid Build Coastguard Worker
790*053f45beSAndroid Build Coastguard Worker	ip x s add proto esp src $srcip dst $dstip spi 9 \
791*053f45beSAndroid Build Coastguard Worker	    mode transport reqid 42 $algo sel src $srcip/24 dst $dstip/24 \
792*053f45beSAndroid Build Coastguard Worker	    offload dev $dev dir out
793*053f45beSAndroid Build Coastguard Worker	check_err $?
794*053f45beSAndroid Build Coastguard Worker	ip x s add proto esp src $dstip dst $srcip spi 9 \
795*053f45beSAndroid Build Coastguard Worker	    mode transport reqid 42 $algo sel src $dstip/24 dst $srcip/24 \
796*053f45beSAndroid Build Coastguard Worker	    offload dev $dev dir in
797*053f45beSAndroid Build Coastguard Worker	check_err $?
798*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
799*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload can't create SA"
800*053f45beSAndroid Build Coastguard Worker		return 1
801*053f45beSAndroid Build Coastguard Worker	fi
802*053f45beSAndroid Build Coastguard Worker
803*053f45beSAndroid Build Coastguard Worker	# does offload show up in ip output
804*053f45beSAndroid Build Coastguard Worker	lines=`ip x s list | grep -c "crypto offload parameters: dev $dev dir"`
805*053f45beSAndroid Build Coastguard Worker	if [ $lines -ne 2 ] ; then
806*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload SA offload missing from list output"
807*053f45beSAndroid Build Coastguard Worker		check_err 1
808*053f45beSAndroid Build Coastguard Worker	fi
809*053f45beSAndroid Build Coastguard Worker
810*053f45beSAndroid Build Coastguard Worker	# use ping to exercise the Tx path
811*053f45beSAndroid Build Coastguard Worker	ping -I $dev -c 3 -W 1 -i 0 $dstip >/dev/null
812*053f45beSAndroid Build Coastguard Worker
813*053f45beSAndroid Build Coastguard Worker	# does driver have correct offload info
814*053f45beSAndroid Build Coastguard Worker	diff $sysfsf - << EOF
815*053f45beSAndroid Build Coastguard WorkerSA count=2 tx=3
816*053f45beSAndroid Build Coastguard Workersa[0] tx ipaddr=0x00000000 00000000 00000000 00000000
817*053f45beSAndroid Build Coastguard Workersa[0]    spi=0x00000009 proto=0x32 salt=0x61626364 crypt=1
818*053f45beSAndroid Build Coastguard Workersa[0]    key=0x34333231 38373635 32313039 36353433
819*053f45beSAndroid Build Coastguard Workersa[1] rx ipaddr=0x00000000 00000000 00000000 037ba8c0
820*053f45beSAndroid Build Coastguard Workersa[1]    spi=0x00000009 proto=0x32 salt=0x61626364 crypt=1
821*053f45beSAndroid Build Coastguard Workersa[1]    key=0x34333231 38373635 32313039 36353433
822*053f45beSAndroid Build Coastguard WorkerEOF
823*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ] ; then
824*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload incorrect driver data"
825*053f45beSAndroid Build Coastguard Worker		check_err 1
826*053f45beSAndroid Build Coastguard Worker	fi
827*053f45beSAndroid Build Coastguard Worker
828*053f45beSAndroid Build Coastguard Worker	# does offload get removed from driver
829*053f45beSAndroid Build Coastguard Worker	ip x s flush
830*053f45beSAndroid Build Coastguard Worker	ip x p flush
831*053f45beSAndroid Build Coastguard Worker	lines=`grep -c "SA count=0" $sysfsf`
832*053f45beSAndroid Build Coastguard Worker	if [ $lines -ne 1 ] ; then
833*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload SA not removed from driver"
834*053f45beSAndroid Build Coastguard Worker		check_err 1
835*053f45beSAndroid Build Coastguard Worker	fi
836*053f45beSAndroid Build Coastguard Worker
837*053f45beSAndroid Build Coastguard Worker	# clean up any leftovers
838*053f45beSAndroid Build Coastguard Worker	$probed && rmmod netdevsim
839*053f45beSAndroid Build Coastguard Worker
840*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
841*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ipsec_offload"
842*053f45beSAndroid Build Coastguard Worker		return 1
843*053f45beSAndroid Build Coastguard Worker	fi
844*053f45beSAndroid Build Coastguard Worker	echo "PASS: ipsec_offload"
845*053f45beSAndroid Build Coastguard Worker}
846*053f45beSAndroid Build Coastguard Worker
847*053f45beSAndroid Build Coastguard Workerkci_test_gretap()
848*053f45beSAndroid Build Coastguard Worker{
849*053f45beSAndroid Build Coastguard Worker	testns="testns"
850*053f45beSAndroid Build Coastguard Worker	DEV_NS=gretap00
851*053f45beSAndroid Build Coastguard Worker	local ret=0
852*053f45beSAndroid Build Coastguard Worker
853*053f45beSAndroid Build Coastguard Worker	ip netns add "$testns"
854*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
855*053f45beSAndroid Build Coastguard Worker		echo "SKIP gretap tests: cannot add net namespace $testns"
856*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
857*053f45beSAndroid Build Coastguard Worker	fi
858*053f45beSAndroid Build Coastguard Worker
859*053f45beSAndroid Build Coastguard Worker	ip link help gretap 2>&1 | grep -q "^Usage:"
860*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
861*053f45beSAndroid Build Coastguard Worker		echo "SKIP: gretap: iproute2 too old"
862*053f45beSAndroid Build Coastguard Worker		ip netns del "$testns"
863*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
864*053f45beSAndroid Build Coastguard Worker	fi
865*053f45beSAndroid Build Coastguard Worker
866*053f45beSAndroid Build Coastguard Worker	# test native tunnel
867*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type gretap seq \
868*053f45beSAndroid Build Coastguard Worker		key 102 local 172.16.1.100 remote 172.16.1.200
869*053f45beSAndroid Build Coastguard Worker	check_err $?
870*053f45beSAndroid Build Coastguard Worker
871*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24
872*053f45beSAndroid Build Coastguard Worker	check_err $?
873*053f45beSAndroid Build Coastguard Worker
874*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev $DEV_NS up
875*053f45beSAndroid Build Coastguard Worker	check_err $?
876*053f45beSAndroid Build Coastguard Worker
877*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
878*053f45beSAndroid Build Coastguard Worker	check_err $?
879*053f45beSAndroid Build Coastguard Worker
880*053f45beSAndroid Build Coastguard Worker	# test external mode
881*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type gretap external
882*053f45beSAndroid Build Coastguard Worker	check_err $?
883*053f45beSAndroid Build Coastguard Worker
884*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
885*053f45beSAndroid Build Coastguard Worker	check_err $?
886*053f45beSAndroid Build Coastguard Worker
887*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
888*053f45beSAndroid Build Coastguard Worker		echo "FAIL: gretap"
889*053f45beSAndroid Build Coastguard Worker		ip netns del "$testns"
890*053f45beSAndroid Build Coastguard Worker		return 1
891*053f45beSAndroid Build Coastguard Worker	fi
892*053f45beSAndroid Build Coastguard Worker	echo "PASS: gretap"
893*053f45beSAndroid Build Coastguard Worker
894*053f45beSAndroid Build Coastguard Worker	ip netns del "$testns"
895*053f45beSAndroid Build Coastguard Worker}
896*053f45beSAndroid Build Coastguard Worker
897*053f45beSAndroid Build Coastguard Workerkci_test_ip6gretap()
898*053f45beSAndroid Build Coastguard Worker{
899*053f45beSAndroid Build Coastguard Worker	testns="testns"
900*053f45beSAndroid Build Coastguard Worker	DEV_NS=ip6gretap00
901*053f45beSAndroid Build Coastguard Worker	local ret=0
902*053f45beSAndroid Build Coastguard Worker
903*053f45beSAndroid Build Coastguard Worker	ip netns add "$testns"
904*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
905*053f45beSAndroid Build Coastguard Worker		echo "SKIP ip6gretap tests: cannot add net namespace $testns"
906*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
907*053f45beSAndroid Build Coastguard Worker	fi
908*053f45beSAndroid Build Coastguard Worker
909*053f45beSAndroid Build Coastguard Worker	ip link help ip6gretap 2>&1 | grep -q "^Usage:"
910*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
911*053f45beSAndroid Build Coastguard Worker		echo "SKIP: ip6gretap: iproute2 too old"
912*053f45beSAndroid Build Coastguard Worker		ip netns del "$testns"
913*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
914*053f45beSAndroid Build Coastguard Worker	fi
915*053f45beSAndroid Build Coastguard Worker
916*053f45beSAndroid Build Coastguard Worker	# test native tunnel
917*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type ip6gretap seq \
918*053f45beSAndroid Build Coastguard Worker		key 102 local fc00:100::1 remote fc00:100::2
919*053f45beSAndroid Build Coastguard Worker	check_err $?
920*053f45beSAndroid Build Coastguard Worker
921*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add dev "$DEV_NS" fc00:200::1/96
922*053f45beSAndroid Build Coastguard Worker	check_err $?
923*053f45beSAndroid Build Coastguard Worker
924*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev $DEV_NS up
925*053f45beSAndroid Build Coastguard Worker	check_err $?
926*053f45beSAndroid Build Coastguard Worker
927*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
928*053f45beSAndroid Build Coastguard Worker	check_err $?
929*053f45beSAndroid Build Coastguard Worker
930*053f45beSAndroid Build Coastguard Worker	# test external mode
931*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type ip6gretap external
932*053f45beSAndroid Build Coastguard Worker	check_err $?
933*053f45beSAndroid Build Coastguard Worker
934*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
935*053f45beSAndroid Build Coastguard Worker	check_err $?
936*053f45beSAndroid Build Coastguard Worker
937*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
938*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ip6gretap"
939*053f45beSAndroid Build Coastguard Worker		ip netns del "$testns"
940*053f45beSAndroid Build Coastguard Worker		return 1
941*053f45beSAndroid Build Coastguard Worker	fi
942*053f45beSAndroid Build Coastguard Worker	echo "PASS: ip6gretap"
943*053f45beSAndroid Build Coastguard Worker
944*053f45beSAndroid Build Coastguard Worker	ip netns del "$testns"
945*053f45beSAndroid Build Coastguard Worker}
946*053f45beSAndroid Build Coastguard Worker
947*053f45beSAndroid Build Coastguard Workerkci_test_erspan()
948*053f45beSAndroid Build Coastguard Worker{
949*053f45beSAndroid Build Coastguard Worker	testns="testns"
950*053f45beSAndroid Build Coastguard Worker	DEV_NS=erspan00
951*053f45beSAndroid Build Coastguard Worker	local ret=0
952*053f45beSAndroid Build Coastguard Worker
953*053f45beSAndroid Build Coastguard Worker	ip link help erspan 2>&1 | grep -q "^Usage:"
954*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
955*053f45beSAndroid Build Coastguard Worker		echo "SKIP: erspan: iproute2 too old"
956*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
957*053f45beSAndroid Build Coastguard Worker	fi
958*053f45beSAndroid Build Coastguard Worker
959*053f45beSAndroid Build Coastguard Worker	ip netns add "$testns"
960*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
961*053f45beSAndroid Build Coastguard Worker		echo "SKIP erspan tests: cannot add net namespace $testns"
962*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
963*053f45beSAndroid Build Coastguard Worker	fi
964*053f45beSAndroid Build Coastguard Worker
965*053f45beSAndroid Build Coastguard Worker	# test native tunnel erspan v1
966*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type erspan seq \
967*053f45beSAndroid Build Coastguard Worker		key 102 local 172.16.1.100 remote 172.16.1.200 \
968*053f45beSAndroid Build Coastguard Worker		erspan_ver 1 erspan 488
969*053f45beSAndroid Build Coastguard Worker	check_err $?
970*053f45beSAndroid Build Coastguard Worker
971*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24
972*053f45beSAndroid Build Coastguard Worker	check_err $?
973*053f45beSAndroid Build Coastguard Worker
974*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev $DEV_NS up
975*053f45beSAndroid Build Coastguard Worker	check_err $?
976*053f45beSAndroid Build Coastguard Worker
977*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
978*053f45beSAndroid Build Coastguard Worker	check_err $?
979*053f45beSAndroid Build Coastguard Worker
980*053f45beSAndroid Build Coastguard Worker	# test native tunnel erspan v2
981*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type erspan seq \
982*053f45beSAndroid Build Coastguard Worker		key 102 local 172.16.1.100 remote 172.16.1.200 \
983*053f45beSAndroid Build Coastguard Worker		erspan_ver 2 erspan_dir ingress erspan_hwid 7
984*053f45beSAndroid Build Coastguard Worker	check_err $?
985*053f45beSAndroid Build Coastguard Worker
986*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24
987*053f45beSAndroid Build Coastguard Worker	check_err $?
988*053f45beSAndroid Build Coastguard Worker
989*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev $DEV_NS up
990*053f45beSAndroid Build Coastguard Worker	check_err $?
991*053f45beSAndroid Build Coastguard Worker
992*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
993*053f45beSAndroid Build Coastguard Worker	check_err $?
994*053f45beSAndroid Build Coastguard Worker
995*053f45beSAndroid Build Coastguard Worker	# test external mode
996*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type erspan external
997*053f45beSAndroid Build Coastguard Worker	check_err $?
998*053f45beSAndroid Build Coastguard Worker
999*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
1000*053f45beSAndroid Build Coastguard Worker	check_err $?
1001*053f45beSAndroid Build Coastguard Worker
1002*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
1003*053f45beSAndroid Build Coastguard Worker		echo "FAIL: erspan"
1004*053f45beSAndroid Build Coastguard Worker		ip netns del "$testns"
1005*053f45beSAndroid Build Coastguard Worker		return 1
1006*053f45beSAndroid Build Coastguard Worker	fi
1007*053f45beSAndroid Build Coastguard Worker	echo "PASS: erspan"
1008*053f45beSAndroid Build Coastguard Worker
1009*053f45beSAndroid Build Coastguard Worker	ip netns del "$testns"
1010*053f45beSAndroid Build Coastguard Worker}
1011*053f45beSAndroid Build Coastguard Worker
1012*053f45beSAndroid Build Coastguard Workerkci_test_ip6erspan()
1013*053f45beSAndroid Build Coastguard Worker{
1014*053f45beSAndroid Build Coastguard Worker	testns="testns"
1015*053f45beSAndroid Build Coastguard Worker	DEV_NS=ip6erspan00
1016*053f45beSAndroid Build Coastguard Worker	local ret=0
1017*053f45beSAndroid Build Coastguard Worker
1018*053f45beSAndroid Build Coastguard Worker	ip link help ip6erspan 2>&1 | grep -q "^Usage:"
1019*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
1020*053f45beSAndroid Build Coastguard Worker		echo "SKIP: ip6erspan: iproute2 too old"
1021*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
1022*053f45beSAndroid Build Coastguard Worker	fi
1023*053f45beSAndroid Build Coastguard Worker
1024*053f45beSAndroid Build Coastguard Worker	ip netns add "$testns"
1025*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
1026*053f45beSAndroid Build Coastguard Worker		echo "SKIP ip6erspan tests: cannot add net namespace $testns"
1027*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
1028*053f45beSAndroid Build Coastguard Worker	fi
1029*053f45beSAndroid Build Coastguard Worker
1030*053f45beSAndroid Build Coastguard Worker	# test native tunnel ip6erspan v1
1031*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type ip6erspan seq \
1032*053f45beSAndroid Build Coastguard Worker		key 102 local fc00:100::1 remote fc00:100::2 \
1033*053f45beSAndroid Build Coastguard Worker		erspan_ver 1 erspan 488
1034*053f45beSAndroid Build Coastguard Worker	check_err $?
1035*053f45beSAndroid Build Coastguard Worker
1036*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24
1037*053f45beSAndroid Build Coastguard Worker	check_err $?
1038*053f45beSAndroid Build Coastguard Worker
1039*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev $DEV_NS up
1040*053f45beSAndroid Build Coastguard Worker	check_err $?
1041*053f45beSAndroid Build Coastguard Worker
1042*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
1043*053f45beSAndroid Build Coastguard Worker	check_err $?
1044*053f45beSAndroid Build Coastguard Worker
1045*053f45beSAndroid Build Coastguard Worker	# test native tunnel ip6erspan v2
1046*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" type ip6erspan seq \
1047*053f45beSAndroid Build Coastguard Worker		key 102 local fc00:100::1 remote fc00:100::2 \
1048*053f45beSAndroid Build Coastguard Worker		erspan_ver 2 erspan_dir ingress erspan_hwid 7
1049*053f45beSAndroid Build Coastguard Worker	check_err $?
1050*053f45beSAndroid Build Coastguard Worker
1051*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" addr add dev "$DEV_NS" 10.1.1.100/24
1052*053f45beSAndroid Build Coastguard Worker	check_err $?
1053*053f45beSAndroid Build Coastguard Worker
1054*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link set dev $DEV_NS up
1055*053f45beSAndroid Build Coastguard Worker	check_err $?
1056*053f45beSAndroid Build Coastguard Worker
1057*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
1058*053f45beSAndroid Build Coastguard Worker	check_err $?
1059*053f45beSAndroid Build Coastguard Worker
1060*053f45beSAndroid Build Coastguard Worker	# test external mode
1061*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link add dev "$DEV_NS" \
1062*053f45beSAndroid Build Coastguard Worker		type ip6erspan external
1063*053f45beSAndroid Build Coastguard Worker	check_err $?
1064*053f45beSAndroid Build Coastguard Worker
1065*053f45beSAndroid Build Coastguard Worker	ip -netns "$testns" link del "$DEV_NS"
1066*053f45beSAndroid Build Coastguard Worker	check_err $?
1067*053f45beSAndroid Build Coastguard Worker
1068*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
1069*053f45beSAndroid Build Coastguard Worker		echo "FAIL: ip6erspan"
1070*053f45beSAndroid Build Coastguard Worker		ip netns del "$testns"
1071*053f45beSAndroid Build Coastguard Worker		return 1
1072*053f45beSAndroid Build Coastguard Worker	fi
1073*053f45beSAndroid Build Coastguard Worker	echo "PASS: ip6erspan"
1074*053f45beSAndroid Build Coastguard Worker
1075*053f45beSAndroid Build Coastguard Worker	ip netns del "$testns"
1076*053f45beSAndroid Build Coastguard Worker}
1077*053f45beSAndroid Build Coastguard Worker
1078*053f45beSAndroid Build Coastguard Workerkci_test_fdb_get()
1079*053f45beSAndroid Build Coastguard Worker{
1080*053f45beSAndroid Build Coastguard Worker	IP="ip -netns testns"
1081*053f45beSAndroid Build Coastguard Worker	BRIDGE="bridge -netns testns"
1082*053f45beSAndroid Build Coastguard Worker	brdev="test-br0"
1083*053f45beSAndroid Build Coastguard Worker	vxlandev="vxlan10"
1084*053f45beSAndroid Build Coastguard Worker	test_mac=de:ad:be:ef:13:37
1085*053f45beSAndroid Build Coastguard Worker	localip="10.0.2.2"
1086*053f45beSAndroid Build Coastguard Worker	dstip="10.0.2.3"
1087*053f45beSAndroid Build Coastguard Worker	local ret=0
1088*053f45beSAndroid Build Coastguard Worker
1089*053f45beSAndroid Build Coastguard Worker	bridge fdb help 2>&1 |grep -q 'bridge fdb get'
1090*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
1091*053f45beSAndroid Build Coastguard Worker		echo "SKIP: fdb get tests: iproute2 too old"
1092*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
1093*053f45beSAndroid Build Coastguard Worker	fi
1094*053f45beSAndroid Build Coastguard Worker
1095*053f45beSAndroid Build Coastguard Worker	ip netns add testns
1096*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ]; then
1097*053f45beSAndroid Build Coastguard Worker		echo "SKIP fdb get tests: cannot add net namespace $testns"
1098*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
1099*053f45beSAndroid Build Coastguard Worker	fi
1100*053f45beSAndroid Build Coastguard Worker
1101*053f45beSAndroid Build Coastguard Worker	$IP link add "$vxlandev" type vxlan id 10 local $localip \
1102*053f45beSAndroid Build Coastguard Worker                dstport 4789 2>/dev/null
1103*053f45beSAndroid Build Coastguard Worker	check_err $?
1104*053f45beSAndroid Build Coastguard Worker	$IP link add name "$brdev" type bridge &>/dev/null
1105*053f45beSAndroid Build Coastguard Worker	check_err $?
1106*053f45beSAndroid Build Coastguard Worker	$IP link set dev "$vxlandev" master "$brdev" &>/dev/null
1107*053f45beSAndroid Build Coastguard Worker	check_err $?
1108*053f45beSAndroid Build Coastguard Worker	$BRIDGE fdb add $test_mac dev "$vxlandev" master &>/dev/null
1109*053f45beSAndroid Build Coastguard Worker	check_err $?
1110*053f45beSAndroid Build Coastguard Worker	$BRIDGE fdb add $test_mac dev "$vxlandev" dst $dstip self &>/dev/null
1111*053f45beSAndroid Build Coastguard Worker	check_err $?
1112*053f45beSAndroid Build Coastguard Worker
1113*053f45beSAndroid Build Coastguard Worker	$BRIDGE fdb get $test_mac brport "$vxlandev" 2>/dev/null | grep -q "dev $vxlandev master $brdev"
1114*053f45beSAndroid Build Coastguard Worker	check_err $?
1115*053f45beSAndroid Build Coastguard Worker	$BRIDGE fdb get $test_mac br "$brdev" 2>/dev/null | grep -q "dev $vxlandev master $brdev"
1116*053f45beSAndroid Build Coastguard Worker	check_err $?
1117*053f45beSAndroid Build Coastguard Worker	$BRIDGE fdb get $test_mac dev "$vxlandev" self 2>/dev/null | grep -q "dev $vxlandev dst $dstip"
1118*053f45beSAndroid Build Coastguard Worker	check_err $?
1119*053f45beSAndroid Build Coastguard Worker
1120*053f45beSAndroid Build Coastguard Worker	ip netns del testns &>/dev/null
1121*053f45beSAndroid Build Coastguard Worker
1122*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
1123*053f45beSAndroid Build Coastguard Worker		echo "FAIL: bridge fdb get"
1124*053f45beSAndroid Build Coastguard Worker		return 1
1125*053f45beSAndroid Build Coastguard Worker	fi
1126*053f45beSAndroid Build Coastguard Worker
1127*053f45beSAndroid Build Coastguard Worker	echo "PASS: bridge fdb get"
1128*053f45beSAndroid Build Coastguard Worker}
1129*053f45beSAndroid Build Coastguard Worker
1130*053f45beSAndroid Build Coastguard Workerkci_test_neigh_get()
1131*053f45beSAndroid Build Coastguard Worker{
1132*053f45beSAndroid Build Coastguard Worker	dstmac=de:ad:be:ef:13:37
1133*053f45beSAndroid Build Coastguard Worker	dstip=10.0.2.4
1134*053f45beSAndroid Build Coastguard Worker	dstip6=dead::2
1135*053f45beSAndroid Build Coastguard Worker	local ret=0
1136*053f45beSAndroid Build Coastguard Worker
1137*053f45beSAndroid Build Coastguard Worker	ip neigh help 2>&1 |grep -q 'ip neigh get'
1138*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
1139*053f45beSAndroid Build Coastguard Worker		echo "SKIP: fdb get tests: iproute2 too old"
1140*053f45beSAndroid Build Coastguard Worker		return $ksft_skip
1141*053f45beSAndroid Build Coastguard Worker	fi
1142*053f45beSAndroid Build Coastguard Worker
1143*053f45beSAndroid Build Coastguard Worker	# ipv4
1144*053f45beSAndroid Build Coastguard Worker	ip neigh add $dstip lladdr $dstmac dev "$devdummy"  > /dev/null
1145*053f45beSAndroid Build Coastguard Worker	check_err $?
1146*053f45beSAndroid Build Coastguard Worker	ip neigh get $dstip dev "$devdummy" 2> /dev/null | grep -q "$dstmac"
1147*053f45beSAndroid Build Coastguard Worker	check_err $?
1148*053f45beSAndroid Build Coastguard Worker	ip neigh del $dstip lladdr $dstmac dev "$devdummy"  > /dev/null
1149*053f45beSAndroid Build Coastguard Worker	check_err $?
1150*053f45beSAndroid Build Coastguard Worker
1151*053f45beSAndroid Build Coastguard Worker	# ipv4 proxy
1152*053f45beSAndroid Build Coastguard Worker	ip neigh add proxy $dstip dev "$devdummy" > /dev/null
1153*053f45beSAndroid Build Coastguard Worker	check_err $?
1154*053f45beSAndroid Build Coastguard Worker	ip neigh get proxy $dstip dev "$devdummy" 2>/dev/null | grep -q "$dstip"
1155*053f45beSAndroid Build Coastguard Worker	check_err $?
1156*053f45beSAndroid Build Coastguard Worker	ip neigh del proxy $dstip dev "$devdummy" > /dev/null
1157*053f45beSAndroid Build Coastguard Worker	check_err $?
1158*053f45beSAndroid Build Coastguard Worker
1159*053f45beSAndroid Build Coastguard Worker	# ipv6
1160*053f45beSAndroid Build Coastguard Worker	ip neigh add $dstip6 lladdr $dstmac dev "$devdummy"  > /dev/null
1161*053f45beSAndroid Build Coastguard Worker	check_err $?
1162*053f45beSAndroid Build Coastguard Worker	ip neigh get $dstip6 dev "$devdummy" 2> /dev/null | grep -q "$dstmac"
1163*053f45beSAndroid Build Coastguard Worker	check_err $?
1164*053f45beSAndroid Build Coastguard Worker	ip neigh del $dstip6 lladdr $dstmac dev "$devdummy"  > /dev/null
1165*053f45beSAndroid Build Coastguard Worker	check_err $?
1166*053f45beSAndroid Build Coastguard Worker
1167*053f45beSAndroid Build Coastguard Worker	# ipv6 proxy
1168*053f45beSAndroid Build Coastguard Worker	ip neigh add proxy $dstip6 dev "$devdummy" > /dev/null
1169*053f45beSAndroid Build Coastguard Worker	check_err $?
1170*053f45beSAndroid Build Coastguard Worker	ip neigh get proxy $dstip6 dev "$devdummy" 2>/dev/null | grep -q "$dstip6"
1171*053f45beSAndroid Build Coastguard Worker	check_err $?
1172*053f45beSAndroid Build Coastguard Worker	ip neigh del proxy $dstip6 dev "$devdummy" > /dev/null
1173*053f45beSAndroid Build Coastguard Worker	check_err $?
1174*053f45beSAndroid Build Coastguard Worker
1175*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
1176*053f45beSAndroid Build Coastguard Worker		echo "FAIL: neigh get"
1177*053f45beSAndroid Build Coastguard Worker		return 1
1178*053f45beSAndroid Build Coastguard Worker	fi
1179*053f45beSAndroid Build Coastguard Worker
1180*053f45beSAndroid Build Coastguard Worker	echo "PASS: neigh get"
1181*053f45beSAndroid Build Coastguard Worker}
1182*053f45beSAndroid Build Coastguard Worker
1183*053f45beSAndroid Build Coastguard Workerkci_test_bridge_parent_id()
1184*053f45beSAndroid Build Coastguard Worker{
1185*053f45beSAndroid Build Coastguard Worker	local ret=0
1186*053f45beSAndroid Build Coastguard Worker	sysfsnet=/sys/bus/netdevsim/devices/netdevsim
1187*053f45beSAndroid Build Coastguard Worker	probed=false
1188*053f45beSAndroid Build Coastguard Worker
1189*053f45beSAndroid Build Coastguard Worker	if [ ! -w /sys/bus/netdevsim/new_device ] ; then
1190*053f45beSAndroid Build Coastguard Worker		modprobe -q netdevsim
1191*053f45beSAndroid Build Coastguard Worker		check_err $?
1192*053f45beSAndroid Build Coastguard Worker		if [ $ret -ne 0 ]; then
1193*053f45beSAndroid Build Coastguard Worker			echo "SKIP: bridge_parent_id can't load netdevsim"
1194*053f45beSAndroid Build Coastguard Worker			return $ksft_skip
1195*053f45beSAndroid Build Coastguard Worker		fi
1196*053f45beSAndroid Build Coastguard Worker		probed=true
1197*053f45beSAndroid Build Coastguard Worker	fi
1198*053f45beSAndroid Build Coastguard Worker
1199*053f45beSAndroid Build Coastguard Worker	echo "10 1" > /sys/bus/netdevsim/new_device
1200*053f45beSAndroid Build Coastguard Worker	while [ ! -d ${sysfsnet}10 ] ; do :; done
1201*053f45beSAndroid Build Coastguard Worker	echo "20 1" > /sys/bus/netdevsim/new_device
1202*053f45beSAndroid Build Coastguard Worker	while [ ! -d ${sysfsnet}20 ] ; do :; done
1203*053f45beSAndroid Build Coastguard Worker	udevadm settle
1204*053f45beSAndroid Build Coastguard Worker	dev10=`ls ${sysfsnet}10/net/`
1205*053f45beSAndroid Build Coastguard Worker	dev20=`ls ${sysfsnet}20/net/`
1206*053f45beSAndroid Build Coastguard Worker
1207*053f45beSAndroid Build Coastguard Worker	ip link add name test-bond0 type bond mode 802.3ad
1208*053f45beSAndroid Build Coastguard Worker	ip link set dev $dev10 master test-bond0
1209*053f45beSAndroid Build Coastguard Worker	ip link set dev $dev20 master test-bond0
1210*053f45beSAndroid Build Coastguard Worker	ip link add name test-br0 type bridge
1211*053f45beSAndroid Build Coastguard Worker	ip link set dev test-bond0 master test-br0
1212*053f45beSAndroid Build Coastguard Worker	check_err $?
1213*053f45beSAndroid Build Coastguard Worker
1214*053f45beSAndroid Build Coastguard Worker	# clean up any leftovers
1215*053f45beSAndroid Build Coastguard Worker	ip link del dev test-br0
1216*053f45beSAndroid Build Coastguard Worker	ip link del dev test-bond0
1217*053f45beSAndroid Build Coastguard Worker	echo 20 > /sys/bus/netdevsim/del_device
1218*053f45beSAndroid Build Coastguard Worker	echo 10 > /sys/bus/netdevsim/del_device
1219*053f45beSAndroid Build Coastguard Worker	$probed && rmmod netdevsim
1220*053f45beSAndroid Build Coastguard Worker
1221*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ]; then
1222*053f45beSAndroid Build Coastguard Worker		echo "FAIL: bridge_parent_id"
1223*053f45beSAndroid Build Coastguard Worker		return 1
1224*053f45beSAndroid Build Coastguard Worker	fi
1225*053f45beSAndroid Build Coastguard Worker	echo "PASS: bridge_parent_id"
1226*053f45beSAndroid Build Coastguard Worker}
1227*053f45beSAndroid Build Coastguard Worker
1228*053f45beSAndroid Build Coastguard Workerkci_test_rtnl()
1229*053f45beSAndroid Build Coastguard Worker{
1230*053f45beSAndroid Build Coastguard Worker	local ret=0
1231*053f45beSAndroid Build Coastguard Worker	kci_add_dummy
1232*053f45beSAndroid Build Coastguard Worker	if [ $ret -ne 0 ];then
1233*053f45beSAndroid Build Coastguard Worker		echo "FAIL: cannot add dummy interface"
1234*053f45beSAndroid Build Coastguard Worker		return 1
1235*053f45beSAndroid Build Coastguard Worker	fi
1236*053f45beSAndroid Build Coastguard Worker
1237*053f45beSAndroid Build Coastguard Worker	kci_test_polrouting
1238*053f45beSAndroid Build Coastguard Worker	check_err $?
1239*053f45beSAndroid Build Coastguard Worker	kci_test_route_get
1240*053f45beSAndroid Build Coastguard Worker	check_err $?
1241*053f45beSAndroid Build Coastguard Worker	kci_test_addrlft
1242*053f45beSAndroid Build Coastguard Worker	check_err $?
1243*053f45beSAndroid Build Coastguard Worker	kci_test_promote_secondaries
1244*053f45beSAndroid Build Coastguard Worker	check_err $?
1245*053f45beSAndroid Build Coastguard Worker	kci_test_tc
1246*053f45beSAndroid Build Coastguard Worker	check_err $?
1247*053f45beSAndroid Build Coastguard Worker	kci_test_gre
1248*053f45beSAndroid Build Coastguard Worker	check_err $?
1249*053f45beSAndroid Build Coastguard Worker	kci_test_gretap
1250*053f45beSAndroid Build Coastguard Worker	check_err $?
1251*053f45beSAndroid Build Coastguard Worker	kci_test_ip6gretap
1252*053f45beSAndroid Build Coastguard Worker	check_err $?
1253*053f45beSAndroid Build Coastguard Worker	kci_test_erspan
1254*053f45beSAndroid Build Coastguard Worker	check_err $?
1255*053f45beSAndroid Build Coastguard Worker	kci_test_ip6erspan
1256*053f45beSAndroid Build Coastguard Worker	check_err $?
1257*053f45beSAndroid Build Coastguard Worker	kci_test_bridge
1258*053f45beSAndroid Build Coastguard Worker	check_err $?
1259*053f45beSAndroid Build Coastguard Worker	kci_test_addrlabel
1260*053f45beSAndroid Build Coastguard Worker	check_err $?
1261*053f45beSAndroid Build Coastguard Worker	kci_test_ifalias
1262*053f45beSAndroid Build Coastguard Worker	check_err $?
1263*053f45beSAndroid Build Coastguard Worker	kci_test_vrf
1264*053f45beSAndroid Build Coastguard Worker	check_err $?
1265*053f45beSAndroid Build Coastguard Worker	kci_test_encap
1266*053f45beSAndroid Build Coastguard Worker	check_err $?
1267*053f45beSAndroid Build Coastguard Worker	kci_test_macsec
1268*053f45beSAndroid Build Coastguard Worker	check_err $?
1269*053f45beSAndroid Build Coastguard Worker	kci_test_ipsec
1270*053f45beSAndroid Build Coastguard Worker	check_err $?
1271*053f45beSAndroid Build Coastguard Worker	kci_test_ipsec_offload
1272*053f45beSAndroid Build Coastguard Worker	check_err $?
1273*053f45beSAndroid Build Coastguard Worker	kci_test_fdb_get
1274*053f45beSAndroid Build Coastguard Worker	check_err $?
1275*053f45beSAndroid Build Coastguard Worker	kci_test_neigh_get
1276*053f45beSAndroid Build Coastguard Worker	check_err $?
1277*053f45beSAndroid Build Coastguard Worker	kci_test_bridge_parent_id
1278*053f45beSAndroid Build Coastguard Worker	check_err $?
1279*053f45beSAndroid Build Coastguard Worker
1280*053f45beSAndroid Build Coastguard Worker	kci_del_dummy
1281*053f45beSAndroid Build Coastguard Worker	return $ret
1282*053f45beSAndroid Build Coastguard Worker}
1283*053f45beSAndroid Build Coastguard Worker
1284*053f45beSAndroid Build Coastguard Worker#check for needed privileges
1285*053f45beSAndroid Build Coastguard Workerif [ "$(id -u)" -ne 0 ];then
1286*053f45beSAndroid Build Coastguard Worker	echo "SKIP: Need root privileges"
1287*053f45beSAndroid Build Coastguard Worker	exit $ksft_skip
1288*053f45beSAndroid Build Coastguard Workerfi
1289*053f45beSAndroid Build Coastguard Worker
1290*053f45beSAndroid Build Coastguard Workerfor x in ip tc;do
1291*053f45beSAndroid Build Coastguard Worker	$x -Version 2>/dev/null >/dev/null
1292*053f45beSAndroid Build Coastguard Worker	if [ $? -ne 0 ];then
1293*053f45beSAndroid Build Coastguard Worker		echo "SKIP: Could not run test without the $x tool"
1294*053f45beSAndroid Build Coastguard Worker		exit $ksft_skip
1295*053f45beSAndroid Build Coastguard Worker	fi
1296*053f45beSAndroid Build Coastguard Workerdone
1297*053f45beSAndroid Build Coastguard Worker
1298*053f45beSAndroid Build Coastguard Workerkci_test_rtnl
1299*053f45beSAndroid Build Coastguard Worker
1300*053f45beSAndroid Build Coastguard Workerexit $?
1301