cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ipip_lib.sh (8557B)


      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# +---------------------------+
    144source lib.sh
    145
    146h1_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
    152h1_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
    158h2_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
    164h2_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
    170sw1_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
    191sw1_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
    207sw2_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
    225sw2_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
    241sw1_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
    261sw1_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
    279sw2_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
    300sw2_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
    318topo_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
    334test_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}