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>
This commit is contained in:
parent
a5040a9059
commit
fed926d4f6
|
@ -0,0 +1,349 @@
|
|||
#!/bin/bash
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
# Handles creation and destruction of IP-in-IP or GRE tunnels over the given
|
||||
# topology. Supports both flat and hierarchical models.
|
||||
#
|
||||
# Flat Model:
|
||||
# Overlay and underlay share the same VRF.
|
||||
# SW1 uses default VRF so tunnel has no bound dev.
|
||||
# SW2 uses non-default VRF tunnel has a bound dev.
|
||||
# +-------------------------+
|
||||
# | H1 |
|
||||
# | $h1 + |
|
||||
# | 192.0.2.1/28 | |
|
||||
# +-------------------|-----+
|
||||
# |
|
||||
# +-------------------|-----+
|
||||
# | SW1 | |
|
||||
# | $ol1 + |
|
||||
# | 192.0.2.2/28 |
|
||||
# | |
|
||||
# | + g1a (gre) |
|
||||
# | loc=192.0.2.65 |
|
||||
# | rem=192.0.2.66 --. |
|
||||
# | tos=inherit | |
|
||||
# | .------------------' |
|
||||
# | | |
|
||||
# | v |
|
||||
# | + $ul1.111 (vlan) |
|
||||
# | | 192.0.2.129/28 |
|
||||
# | \ |
|
||||
# | \_______ |
|
||||
# | | |
|
||||
# |VRF default + $ul1 |
|
||||
# +------------|------------+
|
||||
# |
|
||||
# +------------|------------+
|
||||
# | SW2 + $ul2 |
|
||||
# | _______| |
|
||||
# | / |
|
||||
# | / |
|
||||
# | + $ul2.111 (vlan) |
|
||||
# | ^ 192.0.2.130/28 |
|
||||
# | | |
|
||||
# | | |
|
||||
# | '------------------. |
|
||||
# | + g2a (gre) | |
|
||||
# | loc=192.0.2.66 | |
|
||||
# | rem=192.0.2.65 --' |
|
||||
# | tos=inherit |
|
||||
# | |
|
||||
# | $ol2 + |
|
||||
# | 192.0.2.17/28 | |
|
||||
# | VRF v$ol2 | |
|
||||
# +-------------------|-----+
|
||||
# |
|
||||
# +-------------------|-----+
|
||||
# | H2 | |
|
||||
# | $h2 + |
|
||||
# | 192.0.2.18/28 |
|
||||
# +-------------------------+
|
||||
#
|
||||
# Hierarchical model:
|
||||
# The tunnel is bound to a device in a different VRF
|
||||
#
|
||||
# +---------------------------+
|
||||
# | H1 |
|
||||
# | $h1 + |
|
||||
# | 192.0.2.1/28 | |
|
||||
# +-------------------|-------+
|
||||
# |
|
||||
# +-------------------|-------+
|
||||
# | SW1 | |
|
||||
# | +-----------------|-----+ |
|
||||
# | | $ol1 + | |
|
||||
# | | 192.0.2.2/28 | |
|
||||
# | | | |
|
||||
# | | + g1a (gre) | |
|
||||
# | | rem=192.0.2.66 | |
|
||||
# | | tos=inherit | |
|
||||
# | | loc=192.0.2.65 | |
|
||||
# | | ^ | |
|
||||
# | | VRF v$ol1 | | |
|
||||
# | +-----------|-----------+ |
|
||||
# | | |
|
||||
# | +-----------|-----------+ |
|
||||
# | | VRF v$ul1 | | |
|
||||
# | | | | |
|
||||
# | | | | |
|
||||
# | | v | |
|
||||
# | | dummy1 + | |
|
||||
# | | 192.0.2.65 | |
|
||||
# | | .-------' | |
|
||||
# | | | | |
|
||||
# | | v | |
|
||||
# | | + $ul1.111 (vlan) | |
|
||||
# | | | 192.0.2.129/28 | |
|
||||
# | | \ | |
|
||||
# | | \_____ | |
|
||||
# | | | | |
|
||||
# | | + $ul1 | |
|
||||
# | +----------|------------+ |
|
||||
# +------------|--------------+
|
||||
# |
|
||||
# +------------|--------------+
|
||||
# | SW2 | |
|
||||
# | +----------|------------+ |
|
||||
# | | + $ul2 | |
|
||||
# | | _____| | |
|
||||
# | | / | |
|
||||
# | | / | |
|
||||
# | | | $ul2.111 (vlan) | |
|
||||
# | | + 192.0.2.130/28 | |
|
||||
# | | ^ | |
|
||||
# | | | | |
|
||||
# | | '-------. | |
|
||||
# | | dummy2 + | |
|
||||
# | | 192.0.2.66 | |
|
||||
# | | ^ | |
|
||||
# | | | | |
|
||||
# | | | | |
|
||||
# | | VRF v$ul2 | | |
|
||||
# | +-----------|-----------+ |
|
||||
# | | |
|
||||
# | +-----------|-----------+ |
|
||||
# | | VRF v$ol2 | | |
|
||||
# | | | | |
|
||||
# | | v | |
|
||||
# | | g2a (gre)+ | |
|
||||
# | | loc=192.0.2.66 | |
|
||||
# | | rem=192.0.2.65 | |
|
||||
# | | tos=inherit | |
|
||||
# | | | |
|
||||
# | | $ol2 + | |
|
||||
# | | 192.0.2.17/28 | | |
|
||||
# | +-----------------|-----+ |
|
||||
# +-------------------|-------+
|
||||
# |
|
||||
# +-------------------|-------+
|
||||
# | H2 | |
|
||||
# | $h2 + |
|
||||
# | 192.0.2.18/28 |
|
||||
# +---------------------------+
|
||||
source lib.sh
|
||||
|
||||
h1_create()
|
||||
{
|
||||
simple_if_init $h1 192.0.2.1/28 2001:db8:1::1/64
|
||||
ip route add vrf v$h1 192.0.2.16/28 via 192.0.2.2
|
||||
}
|
||||
|
||||
h1_destroy()
|
||||
{
|
||||
ip route del vrf v$h1 192.0.2.16/28 via 192.0.2.2
|
||||
simple_if_fini $h1 192.0.2.1/28
|
||||
}
|
||||
|
||||
h2_create()
|
||||
{
|
||||
simple_if_init $h2 192.0.2.18/28
|
||||
ip route add vrf v$h2 192.0.2.0/28 via 192.0.2.17
|
||||
}
|
||||
|
||||
h2_destroy()
|
||||
{
|
||||
ip route del vrf v$h2 192.0.2.0/28 via 192.0.2.17
|
||||
simple_if_fini $h2 192.0.2.18/28
|
||||
}
|
||||
|
||||
sw1_flat_create()
|
||||
{
|
||||
local type=$1; shift
|
||||
local ol1=$1; shift
|
||||
local ul1=$1; shift
|
||||
|
||||
ip link set dev $ol1 up
|
||||
__addr_add_del $ol1 add "192.0.2.2/28"
|
||||
|
||||
ip link set dev $ul1 up
|
||||
vlan_create $ul1 111 "" 192.0.2.129/28
|
||||
|
||||
tunnel_create g1a $type 192.0.2.65 192.0.2.66 tos inherit "$@"
|
||||
ip link set dev g1a up
|
||||
__addr_add_del g1a add "192.0.2.65/32"
|
||||
|
||||
ip route add 192.0.2.66/32 via 192.0.2.130
|
||||
|
||||
ip route add 192.0.2.16/28 nexthop dev g1a
|
||||
}
|
||||
|
||||
sw1_flat_destroy()
|
||||
{
|
||||
local ol1=$1; shift
|
||||
local ul1=$1; shift
|
||||
|
||||
ip route del 192.0.2.16/28
|
||||
|
||||
ip route del 192.0.2.66/32 via 192.0.2.130
|
||||
__simple_if_fini g1a 192.0.2.65/32
|
||||
tunnel_destroy g1a
|
||||
|
||||
vlan_destroy $ul1 111
|
||||
__simple_if_fini $ul1
|
||||
__simple_if_fini $ol1 192.0.2.2/28
|
||||
}
|
||||
|
||||
sw2_flat_create()
|
||||
{
|
||||
local type=$1; shift
|
||||
local ol2=$1; shift
|
||||
local ul2=$1; shift
|
||||
|
||||
simple_if_init $ol2 192.0.2.17/28
|
||||
__simple_if_init $ul2 v$ol2
|
||||
vlan_create $ul2 111 v$ol2 192.0.2.130/28
|
||||
|
||||
tunnel_create g2a $type 192.0.2.66 192.0.2.65 tos inherit dev v$ol2 \
|
||||
"$@"
|
||||
__simple_if_init g2a v$ol2 192.0.2.66/32
|
||||
|
||||
ip route add vrf v$ol2 192.0.2.65/32 via 192.0.2.129
|
||||
ip route add vrf v$ol2 192.0.2.0/28 nexthop dev g2a
|
||||
}
|
||||
|
||||
sw2_flat_destroy()
|
||||
{
|
||||
local ol2=$1; shift
|
||||
local ul2=$1; shift
|
||||
|
||||
ip route del vrf v$ol2 192.0.2.0/28
|
||||
|
||||
ip route del vrf v$ol2 192.0.2.65/32 via 192.0.2.129
|
||||
__simple_if_fini g2a 192.0.2.66/32
|
||||
tunnel_destroy g2a
|
||||
|
||||
vlan_destroy $ul2 111
|
||||
__simple_if_fini $ul2
|
||||
simple_if_fini $ol2 192.0.2.17/28
|
||||
}
|
||||
|
||||
sw1_hierarchical_create()
|
||||
{
|
||||
local type=$1; shift
|
||||
local ol1=$1; shift
|
||||
local ul1=$1; shift
|
||||
|
||||
simple_if_init $ol1 192.0.2.2/28
|
||||
simple_if_init $ul1
|
||||
ip link add name dummy1 type dummy
|
||||
__simple_if_init dummy1 v$ul1 192.0.2.65/32
|
||||
|
||||
vlan_create $ul1 111 v$ul1 192.0.2.129/28
|
||||
tunnel_create g1a $type 192.0.2.65 192.0.2.66 tos inherit dev dummy1 \
|
||||
"$@"
|
||||
ip link set dev g1a master v$ol1
|
||||
|
||||
ip route add vrf v$ul1 192.0.2.66/32 via 192.0.2.130
|
||||
ip route add vrf v$ol1 192.0.2.16/28 nexthop dev g1a
|
||||
}
|
||||
|
||||
sw1_hierarchical_destroy()
|
||||
{
|
||||
local ol1=$1; shift
|
||||
local ul1=$1; shift
|
||||
|
||||
ip route del vrf v$ol1 192.0.2.16/28
|
||||
ip route del vrf v$ul1 192.0.2.66/32
|
||||
|
||||
tunnel_destroy g1a
|
||||
vlan_destroy $ul1 111
|
||||
|
||||
__simple_if_fini dummy1 192.0.2.65/32
|
||||
ip link del dev dummy1
|
||||
|
||||
simple_if_fini $ul1
|
||||
simple_if_fini $ol1 192.0.2.2/28
|
||||
}
|
||||
|
||||
sw2_hierarchical_create()
|
||||
{
|
||||
local type=$1; shift
|
||||
local ol2=$1; shift
|
||||
local ul2=$1; shift
|
||||
|
||||
simple_if_init $ol2 192.0.2.17/28
|
||||
simple_if_init $ul2
|
||||
|
||||
ip link add name dummy2 type dummy
|
||||
__simple_if_init dummy2 v$ul2 192.0.2.66/32
|
||||
|
||||
vlan_create $ul2 111 v$ul2 192.0.2.130/28
|
||||
tunnel_create g2a $type 192.0.2.66 192.0.2.65 tos inherit dev dummy2 \
|
||||
"$@"
|
||||
ip link set dev g2a master v$ol2
|
||||
|
||||
ip route add vrf v$ul2 192.0.2.65/32 via 192.0.2.129
|
||||
ip route add vrf v$ol2 192.0.2.0/28 nexthop dev g2a
|
||||
}
|
||||
|
||||
sw2_hierarchical_destroy()
|
||||
{
|
||||
local ol2=$1; shift
|
||||
local ul2=$1; shift
|
||||
|
||||
ip route del vrf v$ol2 192.0.2.0/28
|
||||
ip route del vrf v$ul2 192.0.2.65/32
|
||||
|
||||
tunnel_destroy g2a
|
||||
vlan_destroy $ul2 111
|
||||
|
||||
__simple_if_fini dummy2 192.0.2.66/32
|
||||
ip link del dev dummy2
|
||||
|
||||
simple_if_fini $ul2
|
||||
simple_if_fini $ol2 192.0.2.17/28
|
||||
}
|
||||
|
||||
topo_mtu_change()
|
||||
{
|
||||
local mtu=$1
|
||||
|
||||
ip link set mtu $mtu dev $h1
|
||||
ip link set mtu $mtu dev $ol1
|
||||
ip link set mtu $mtu dev g1a
|
||||
ip link set mtu $mtu dev $ul1
|
||||
ip link set mtu $mtu dev $ul1.111
|
||||
ip link set mtu $mtu dev $h2
|
||||
ip link set mtu $mtu dev $ol2
|
||||
ip link set mtu $mtu dev g2a
|
||||
ip link set mtu $mtu dev $ul2
|
||||
ip link set mtu $mtu dev $ul2.111
|
||||
}
|
||||
|
||||
test_mtu_change()
|
||||
{
|
||||
local encap=$1; shift
|
||||
|
||||
RET=0
|
||||
|
||||
ping_do $h1 192.0.2.18 "-s 1800 -w 3"
|
||||
check_fail $? "ping $encap should not pass with size 1800"
|
||||
|
||||
RET=0
|
||||
|
||||
topo_mtu_change 2000
|
||||
ping_do $h1 192.0.2.18 "-s 1800 -w 3"
|
||||
check_err $?
|
||||
log_test "ping $encap packet size 1800 after MTU change"
|
||||
}
|
Loading…
Reference in New Issue