1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3 4# +---------------------+ +---------------------+ 5# | H1 | | H2 | 6# | + $h1 | | $h2 + | 7# | | 192.0.2.1/28 | | 192.0.2.2/28 | | 8# +-----|---------------+ +---------------|-----+ 9# | | 10# +-----|-------------------------------------------------------------|-----+ 11# | SW o--> mirror | | 12# | +---|-------------------------------------------------------------|---+ | 13# | | + $swp1 BR $swp2 + | | 14# | +---------------------------------------------------------------------+ | 15# | | 16# | +---------------------------------------------------------------------+ | 17# | | OL + gt6 (ip6gretap) + gt4 (gretap) | | 18# | | : loc=2001:db8:2::1 : loc=192.0.2.129 | | 19# | | : rem=2001:db8:2::2 : rem=192.0.2.130 | | 20# | | : ttl=100 : ttl=100 | | 21# | | : tos=inherit : tos=inherit | | 22# | +-------------------------:--|-------------------:--|-----------------+ | 23# | : | : | | 24# | +-------------------------:--|-------------------:--|-----------------+ | 25# | | UL : |,---------------------' | | 26# | | + $swp3 : || : | | 27# | | | 192.0.2.129/28 : vv : | | 28# | | | 2001:db8:2::1/64 : + ul (dummy) : | | 29# | +---|---------------------:----------------------:--------------------+ | 30# +-----|---------------------:----------------------:----------------------+ 31# | : : 32# +-----|---------------------:----------------------:----------------------+ 33# | H3 + $h3 + h3-gt6 (ip6gretap) + h3-gt4 (gretap) | 34# | 192.0.2.130/28 loc=2001:db8:2::2 loc=192.0.2.130 | 35# | 2001:db8:2::2/64 rem=2001:db8:2::1 rem=192.0.2.129 | 36# | ttl=100 ttl=100 | 37# | tos=inherit tos=inherit | 38# | | 39# +-------------------------------------------------------------------------+ 40# 41# This tests mirroring to gretap and ip6gretap configured in an overlay / 42# underlay manner, i.e. with a bound dummy device that marks underlay VRF where 43# the encapsulated packed should be routed. 44 45ALL_TESTS=" 46 test_gretap 47 test_ip6gretap 48" 49 50NUM_NETIFS=6 51source lib.sh 52source mirror_lib.sh 53source mirror_gre_lib.sh 54 55h1_create() 56{ 57 simple_if_init $h1 192.0.2.1/28 58} 59 60h1_destroy() 61{ 62 simple_if_fini $h1 192.0.2.1/28 63} 64 65h2_create() 66{ 67 simple_if_init $h2 192.0.2.2/28 68} 69 70h2_destroy() 71{ 72 simple_if_fini $h2 192.0.2.2/28 73} 74 75h3_create() 76{ 77 simple_if_init $h3 192.0.2.130/28 2001:db8:2::2/64 78 79 tunnel_create h3-gt4 gretap 192.0.2.130 192.0.2.129 80 ip link set h3-gt4 vrf v$h3 81 matchall_sink_create h3-gt4 82 83 tunnel_create h3-gt6 ip6gretap 2001:db8:2::2 2001:db8:2::1 84 ip link set h3-gt6 vrf v$h3 85 matchall_sink_create h3-gt6 86} 87 88h3_destroy() 89{ 90 tunnel_destroy h3-gt6 91 tunnel_destroy h3-gt4 92 93 simple_if_fini $h3 192.0.2.130/28 2001:db8:2::2/64 94} 95 96switch_create() 97{ 98 # Bridge between H1 and H2. 99 100 ip link add name br1 type bridge vlan_filtering 1 101 ip link set dev br1 up 102 103 ip link set dev $swp1 master br1 104 ip link set dev $swp1 up 105 106 ip link set dev $swp2 master br1 107 ip link set dev $swp2 up 108 109 tc qdisc add dev $swp1 clsact 110 111 # Underlay. 112 113 simple_if_init $swp3 192.0.2.129/28 2001:db8:2::1/64 114 115 ip link add name ul type dummy 116 ip link set dev ul master v$swp3 117 ip link set dev ul up 118 119 # Overlay. 120 121 vrf_create vrf-ol 122 ip link set dev vrf-ol up 123 124 tunnel_create gt4 gretap 192.0.2.129 192.0.2.130 \ 125 ttl 100 tos inherit dev ul 126 ip link set dev gt4 master vrf-ol 127 ip link set dev gt4 up 128 129 tunnel_create gt6 ip6gretap 2001:db8:2::1 2001:db8:2::2 \ 130 ttl 100 tos inherit dev ul allow-localremote 131 ip link set dev gt6 master vrf-ol 132 ip link set dev gt6 up 133} 134 135switch_destroy() 136{ 137 vrf_destroy vrf-ol 138 139 tunnel_destroy gt6 140 tunnel_destroy gt4 141 142 simple_if_fini $swp3 192.0.2.129/28 2001:db8:2::1/64 143 144 ip link del dev ul 145 146 tc qdisc del dev $swp1 clsact 147 148 ip link set dev $swp1 down 149 ip link set dev $swp2 down 150 ip link del dev br1 151} 152 153setup_prepare() 154{ 155 h1=${NETIFS[p1]} 156 swp1=${NETIFS[p2]} 157 158 swp2=${NETIFS[p3]} 159 h2=${NETIFS[p4]} 160 161 swp3=${NETIFS[p5]} 162 h3=${NETIFS[p6]} 163 164 vrf_prepare 165 166 h1_create 167 h2_create 168 h3_create 169 170 switch_create 171} 172 173cleanup() 174{ 175 pre_cleanup 176 177 switch_destroy 178 179 h3_destroy 180 h2_destroy 181 h1_destroy 182 183 vrf_cleanup 184} 185 186test_gretap() 187{ 188 full_test_span_gre_dir gt4 ingress 8 0 "mirror to gretap w/ UL" 189 full_test_span_gre_dir gt4 egress 0 8 "mirror to gretap w/ UL" 190} 191 192test_ip6gretap() 193{ 194 full_test_span_gre_dir gt6 ingress 8 0 "mirror to ip6gretap w/ UL" 195 full_test_span_gre_dir gt6 egress 0 8 "mirror to ip6gretap w/ UL" 196} 197 198test_all() 199{ 200 RET=0 201 202 slow_path_trap_install $swp1 ingress 203 slow_path_trap_install $swp1 egress 204 205 tests_run 206 207 slow_path_trap_uninstall $swp1 egress 208 slow_path_trap_uninstall $swp1 ingress 209} 210 211trap cleanup EXIT 212 213setup_prepare 214setup_wait 215 216tcflags="skip_hw" 217test_all 218 219if ! tc_offload_check; then 220 echo "WARN: Could not test offloaded functionality" 221else 222 tcflags="skip_sw" 223 test_all 224fi 225 226exit $EXIT_STATUS 227