xref: /OK3568_Linux_fs/kernel/tools/testing/selftests/net/ip6_gre_headroom.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
3*4882a593Smuzhiyun#
4*4882a593Smuzhiyun# Test that enough headroom is reserved for the first packet passing through an
5*4882a593Smuzhiyun# IPv6 GRE-like netdevice.
6*4882a593Smuzhiyun
7*4882a593Smuzhiyunsetup_prepare()
8*4882a593Smuzhiyun{
9*4882a593Smuzhiyun	ip link add h1 type veth peer name swp1
10*4882a593Smuzhiyun	ip link add h3 type veth peer name swp3
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun	ip link set dev h1 up
13*4882a593Smuzhiyun	ip address add 192.0.2.1/28 dev h1
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun	ip link add dev vh3 type vrf table 20
16*4882a593Smuzhiyun	ip link set dev h3 master vh3
17*4882a593Smuzhiyun	ip link set dev vh3 up
18*4882a593Smuzhiyun	ip link set dev h3 up
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun	ip link set dev swp3 up
21*4882a593Smuzhiyun	ip address add dev swp3 2001:db8:2::1/64
22*4882a593Smuzhiyun	ip address add dev swp3 2001:db8:2::3/64
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun	ip link set dev swp1 up
25*4882a593Smuzhiyun	tc qdisc add dev swp1 clsact
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun	ip link add name er6 type ip6erspan \
28*4882a593Smuzhiyun	   local 2001:db8:2::1 remote 2001:db8:2::2 oseq okey 123
29*4882a593Smuzhiyun	ip link set dev er6 up
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun	ip link add name gt6 type ip6gretap \
32*4882a593Smuzhiyun	   local 2001:db8:2::3 remote 2001:db8:2::4
33*4882a593Smuzhiyun	ip link set dev gt6 up
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun	sleep 1
36*4882a593Smuzhiyun}
37*4882a593Smuzhiyun
38*4882a593Smuzhiyuncleanup()
39*4882a593Smuzhiyun{
40*4882a593Smuzhiyun	ip link del dev gt6
41*4882a593Smuzhiyun	ip link del dev er6
42*4882a593Smuzhiyun	ip link del dev swp1
43*4882a593Smuzhiyun	ip link del dev swp3
44*4882a593Smuzhiyun	ip link del dev vh3
45*4882a593Smuzhiyun}
46*4882a593Smuzhiyun
47*4882a593Smuzhiyuntest_headroom()
48*4882a593Smuzhiyun{
49*4882a593Smuzhiyun	local type=$1; shift
50*4882a593Smuzhiyun	local tundev=$1; shift
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun	tc filter add dev swp1 ingress pref 1000 matchall skip_hw \
53*4882a593Smuzhiyun		action mirred egress mirror dev $tundev
54*4882a593Smuzhiyun	ping -I h1 192.0.2.2 -c 1 -w 2 &> /dev/null
55*4882a593Smuzhiyun	tc filter del dev swp1 ingress pref 1000
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun	# If it doesn't panic, it passes.
58*4882a593Smuzhiyun	printf "TEST: %-60s  [PASS]\n" "$type headroom"
59*4882a593Smuzhiyun}
60*4882a593Smuzhiyun
61*4882a593Smuzhiyuntrap cleanup EXIT
62*4882a593Smuzhiyun
63*4882a593Smuzhiyunsetup_prepare
64*4882a593Smuzhiyuntest_headroom ip6gretap gt6
65*4882a593Smuzhiyuntest_headroom ip6erspan er6
66