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