Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: forwarding: Add IP tunneling lib

Add a library with helper functions, to be used in testing IP-in-IP and GRE
tunnels, both in flat and in hierarchical topologies.
The topologies used in this library cover the three scenarios of tunnels -
a tunel with no bound device, a tunnel with bound device in the same VRF
and a tunnel with a bound device in a different VRF.

Signed-off-by: Nir Dotan <nird@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Nir Dotan and committed by
David S. Miller
fed926d4 a5040a90

+349
+349
tools/testing/selftests/net/forwarding/ipip_lib.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + # Handles creation and destruction of IP-in-IP or GRE tunnels over the given 5 + # topology. Supports both flat and hierarchical models. 6 + # 7 + # Flat Model: 8 + # Overlay and underlay share the same VRF. 9 + # SW1 uses default VRF so tunnel has no bound dev. 10 + # SW2 uses non-default VRF tunnel has a bound dev. 11 + # +-------------------------+ 12 + # | H1 | 13 + # | $h1 + | 14 + # | 192.0.2.1/28 | | 15 + # +-------------------|-----+ 16 + # | 17 + # +-------------------|-----+ 18 + # | SW1 | | 19 + # | $ol1 + | 20 + # | 192.0.2.2/28 | 21 + # | | 22 + # | + g1a (gre) | 23 + # | loc=192.0.2.65 | 24 + # | rem=192.0.2.66 --. | 25 + # | tos=inherit | | 26 + # | .------------------' | 27 + # | | | 28 + # | v | 29 + # | + $ul1.111 (vlan) | 30 + # | | 192.0.2.129/28 | 31 + # | \ | 32 + # | \_______ | 33 + # | | | 34 + # |VRF default + $ul1 | 35 + # +------------|------------+ 36 + # | 37 + # +------------|------------+ 38 + # | SW2 + $ul2 | 39 + # | _______| | 40 + # | / | 41 + # | / | 42 + # | + $ul2.111 (vlan) | 43 + # | ^ 192.0.2.130/28 | 44 + # | | | 45 + # | | | 46 + # | '------------------. | 47 + # | + g2a (gre) | | 48 + # | loc=192.0.2.66 | | 49 + # | rem=192.0.2.65 --' | 50 + # | tos=inherit | 51 + # | | 52 + # | $ol2 + | 53 + # | 192.0.2.17/28 | | 54 + # | VRF v$ol2 | | 55 + # +-------------------|-----+ 56 + # | 57 + # +-------------------|-----+ 58 + # | H2 | | 59 + # | $h2 + | 60 + # | 192.0.2.18/28 | 61 + # +-------------------------+ 62 + # 63 + # Hierarchical model: 64 + # The tunnel is bound to a device in a different VRF 65 + # 66 + # +---------------------------+ 67 + # | H1 | 68 + # | $h1 + | 69 + # | 192.0.2.1/28 | | 70 + # +-------------------|-------+ 71 + # | 72 + # +-------------------|-------+ 73 + # | SW1 | | 74 + # | +-----------------|-----+ | 75 + # | | $ol1 + | | 76 + # | | 192.0.2.2/28 | | 77 + # | | | | 78 + # | | + g1a (gre) | | 79 + # | | rem=192.0.2.66 | | 80 + # | | tos=inherit | | 81 + # | | loc=192.0.2.65 | | 82 + # | | ^ | | 83 + # | | VRF v$ol1 | | | 84 + # | +-----------|-----------+ | 85 + # | | | 86 + # | +-----------|-----------+ | 87 + # | | VRF v$ul1 | | | 88 + # | | | | | 89 + # | | | | | 90 + # | | v | | 91 + # | | dummy1 + | | 92 + # | | 192.0.2.65 | | 93 + # | | .-------' | | 94 + # | | | | | 95 + # | | v | | 96 + # | | + $ul1.111 (vlan) | | 97 + # | | | 192.0.2.129/28 | | 98 + # | | \ | | 99 + # | | \_____ | | 100 + # | | | | | 101 + # | | + $ul1 | | 102 + # | +----------|------------+ | 103 + # +------------|--------------+ 104 + # | 105 + # +------------|--------------+ 106 + # | SW2 | | 107 + # | +----------|------------+ | 108 + # | | + $ul2 | | 109 + # | | _____| | | 110 + # | | / | | 111 + # | | / | | 112 + # | | | $ul2.111 (vlan) | | 113 + # | | + 192.0.2.130/28 | | 114 + # | | ^ | | 115 + # | | | | | 116 + # | | '-------. | | 117 + # | | dummy2 + | | 118 + # | | 192.0.2.66 | | 119 + # | | ^ | | 120 + # | | | | | 121 + # | | | | | 122 + # | | VRF v$ul2 | | | 123 + # | +-----------|-----------+ | 124 + # | | | 125 + # | +-----------|-----------+ | 126 + # | | VRF v$ol2 | | | 127 + # | | | | | 128 + # | | v | | 129 + # | | g2a (gre)+ | | 130 + # | | loc=192.0.2.66 | | 131 + # | | rem=192.0.2.65 | | 132 + # | | tos=inherit | | 133 + # | | | | 134 + # | | $ol2 + | | 135 + # | | 192.0.2.17/28 | | | 136 + # | +-----------------|-----+ | 137 + # +-------------------|-------+ 138 + # | 139 + # +-------------------|-------+ 140 + # | H2 | | 141 + # | $h2 + | 142 + # | 192.0.2.18/28 | 143 + # +---------------------------+ 144 + source lib.sh 145 + 146 + h1_create() 147 + { 148 + simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64 149 + ip route add vrf v$h1 192.0.2.16/28 via 192.0.2.2 150 + } 151 + 152 + h1_destroy() 153 + { 154 + ip route del vrf v$h1 192.0.2.16/28 via 192.0.2.2 155 + simple_if_fini $h1 192.0.2.1/28 156 + } 157 + 158 + h2_create() 159 + { 160 + simple_if_init $h2 192.0.2.18/28 161 + ip route add vrf v$h2 192.0.2.0/28 via 192.0.2.17 162 + } 163 + 164 + h2_destroy() 165 + { 166 + ip route del vrf v$h2 192.0.2.0/28 via 192.0.2.17 167 + simple_if_fini $h2 192.0.2.18/28 168 + } 169 + 170 + sw1_flat_create() 171 + { 172 + local type=$1; shift 173 + local ol1=$1; shift 174 + local ul1=$1; shift 175 + 176 + ip link set dev $ol1 up 177 + __addr_add_del $ol1 add "192.0.2.2/28" 178 + 179 + ip link set dev $ul1 up 180 + vlan_create $ul1 111 "" 192.0.2.129/28 181 + 182 + tunnel_create g1a $type 192.0.2.65 192.0.2.66 tos inherit "$@" 183 + ip link set dev g1a up 184 + __addr_add_del g1a add "192.0.2.65/32" 185 + 186 + ip route add 192.0.2.66/32 via 192.0.2.130 187 + 188 + ip route add 192.0.2.16/28 nexthop dev g1a 189 + } 190 + 191 + sw1_flat_destroy() 192 + { 193 + local ol1=$1; shift 194 + local ul1=$1; shift 195 + 196 + ip route del 192.0.2.16/28 197 + 198 + ip route del 192.0.2.66/32 via 192.0.2.130 199 + __simple_if_fini g1a 192.0.2.65/32 200 + tunnel_destroy g1a 201 + 202 + vlan_destroy $ul1 111 203 + __simple_if_fini $ul1 204 + __simple_if_fini $ol1 192.0.2.2/28 205 + } 206 + 207 + sw2_flat_create() 208 + { 209 + local type=$1; shift 210 + local ol2=$1; shift 211 + local ul2=$1; shift 212 + 213 + simple_if_init $ol2 192.0.2.17/28 214 + __simple_if_init $ul2 v$ol2 215 + vlan_create $ul2 111 v$ol2 192.0.2.130/28 216 + 217 + tunnel_create g2a $type 192.0.2.66 192.0.2.65 tos inherit dev v$ol2 \ 218 + "$@" 219 + __simple_if_init g2a v$ol2 192.0.2.66/32 220 + 221 + ip route add vrf v$ol2 192.0.2.65/32 via 192.0.2.129 222 + ip route add vrf v$ol2 192.0.2.0/28 nexthop dev g2a 223 + } 224 + 225 + sw2_flat_destroy() 226 + { 227 + local ol2=$1; shift 228 + local ul2=$1; shift 229 + 230 + ip route del vrf v$ol2 192.0.2.0/28 231 + 232 + ip route del vrf v$ol2 192.0.2.65/32 via 192.0.2.129 233 + __simple_if_fini g2a 192.0.2.66/32 234 + tunnel_destroy g2a 235 + 236 + vlan_destroy $ul2 111 237 + __simple_if_fini $ul2 238 + simple_if_fini $ol2 192.0.2.17/28 239 + } 240 + 241 + sw1_hierarchical_create() 242 + { 243 + local type=$1; shift 244 + local ol1=$1; shift 245 + local ul1=$1; shift 246 + 247 + simple_if_init $ol1 192.0.2.2/28 248 + simple_if_init $ul1 249 + ip link add name dummy1 type dummy 250 + __simple_if_init dummy1 v$ul1 192.0.2.65/32 251 + 252 + vlan_create $ul1 111 v$ul1 192.0.2.129/28 253 + tunnel_create g1a $type 192.0.2.65 192.0.2.66 tos inherit dev dummy1 \ 254 + "$@" 255 + ip link set dev g1a master v$ol1 256 + 257 + ip route add vrf v$ul1 192.0.2.66/32 via 192.0.2.130 258 + ip route add vrf v$ol1 192.0.2.16/28 nexthop dev g1a 259 + } 260 + 261 + sw1_hierarchical_destroy() 262 + { 263 + local ol1=$1; shift 264 + local ul1=$1; shift 265 + 266 + ip route del vrf v$ol1 192.0.2.16/28 267 + ip route del vrf v$ul1 192.0.2.66/32 268 + 269 + tunnel_destroy g1a 270 + vlan_destroy $ul1 111 271 + 272 + __simple_if_fini dummy1 192.0.2.65/32 273 + ip link del dev dummy1 274 + 275 + simple_if_fini $ul1 276 + simple_if_fini $ol1 192.0.2.2/28 277 + } 278 + 279 + sw2_hierarchical_create() 280 + { 281 + local type=$1; shift 282 + local ol2=$1; shift 283 + local ul2=$1; shift 284 + 285 + simple_if_init $ol2 192.0.2.17/28 286 + simple_if_init $ul2 287 + 288 + ip link add name dummy2 type dummy 289 + __simple_if_init dummy2 v$ul2 192.0.2.66/32 290 + 291 + vlan_create $ul2 111 v$ul2 192.0.2.130/28 292 + tunnel_create g2a $type 192.0.2.66 192.0.2.65 tos inherit dev dummy2 \ 293 + "$@" 294 + ip link set dev g2a master v$ol2 295 + 296 + ip route add vrf v$ul2 192.0.2.65/32 via 192.0.2.129 297 + ip route add vrf v$ol2 192.0.2.0/28 nexthop dev g2a 298 + } 299 + 300 + sw2_hierarchical_destroy() 301 + { 302 + local ol2=$1; shift 303 + local ul2=$1; shift 304 + 305 + ip route del vrf v$ol2 192.0.2.0/28 306 + ip route del vrf v$ul2 192.0.2.65/32 307 + 308 + tunnel_destroy g2a 309 + vlan_destroy $ul2 111 310 + 311 + __simple_if_fini dummy2 192.0.2.66/32 312 + ip link del dev dummy2 313 + 314 + simple_if_fini $ul2 315 + simple_if_fini $ol2 192.0.2.17/28 316 + } 317 + 318 + topo_mtu_change() 319 + { 320 + local mtu=$1 321 + 322 + ip link set mtu $mtu dev $h1 323 + ip link set mtu $mtu dev $ol1 324 + ip link set mtu $mtu dev g1a 325 + ip link set mtu $mtu dev $ul1 326 + ip link set mtu $mtu dev $ul1.111 327 + ip link set mtu $mtu dev $h2 328 + ip link set mtu $mtu dev $ol2 329 + ip link set mtu $mtu dev g2a 330 + ip link set mtu $mtu dev $ul2 331 + ip link set mtu $mtu dev $ul2.111 332 + } 333 + 334 + test_mtu_change() 335 + { 336 + local encap=$1; shift 337 + 338 + RET=0 339 + 340 + ping_do $h1 192.0.2.18 "-s 1800 -w 3" 341 + check_fail $? "ping $encap should not pass with size 1800" 342 + 343 + RET=0 344 + 345 + topo_mtu_change 2000 346 + ping_do $h1 192.0.2.18 "-s 1800 -w 3" 347 + check_err $? 348 + log_test "ping $encap packet size 1800 after MTU change" 349 + }