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

ip6gre_lib.sh (14208B)


      1# SPDX-License-Identifier: GPL-2.0
      2#!/bin/bash
      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# |        198.51.100.1/24  |      |
     15# |        2001:db8:1::1/64 |      |
     16# +-------------------------|------+
     17#                           |
     18# +-------------------------|-------------------+
     19# | SW1                     |                   |
     20# |                    $ol1 +                   |
     21# |        198.51.100.2/24                      |
     22# |        2001:db8:1::2/64                     |
     23# |                                             |
     24# |      + g1a (ip6gre)                         |
     25# |        loc=2001:db8:3::1                    |
     26# |        rem=2001:db8:3::2 --.                |
     27# |        tos=inherit         |                |
     28# |                            .                |
     29# |      .---------------------                 |
     30# |      |                                      |
     31# |      v                                      |
     32# |      + $ul1.111 (vlan)                      |
     33# |      | 2001:db8:10::1/64                    |
     34# |       \                                     |
     35# |        \____________                        |
     36# |                     |                       |
     37# | VRF default         + $ul1                  |
     38# +---------------------|-----------------------+
     39#                       |
     40# +---------------------|-----------------------+
     41# | SW2                 |                       |
     42# |                $ul2 +                       |
     43# |          ___________|                       |
     44# |         /                                   |
     45# |        /                                    |
     46# |       + $ul2.111 (vlan)                     |
     47# |       ^ 2001:db8:10::2/64                   |
     48# |       |                                     |
     49# |       |                                     |
     50# |       '----------------------.              |
     51# |       + g2a (ip6gre)         |              |
     52# |         loc=2001:db8:3::2    |              |
     53# |         rem=2001:db8:3::1  --'              |
     54# |         tos=inherit                         |
     55# |                                             |
     56# |                     + $ol2                  |
     57# |                     | 203.0.113.2/24        |
     58# | VRF v$ol2           | 2001:db8:2::2/64      |
     59# +---------------------|-----------------------+
     60# +---------------------|----------+
     61# | H2                  |          |
     62# |                 $h2 +          |
     63# |    203.0.113.1/24              |
     64# |    2001:db8:2::1/64            |
     65# +--------------------------------+
     66#
     67# Hierarchical model:
     68# The tunnel is bound to a device in a different VRF
     69#
     70# +--------------------------------+
     71# | H1                             |
     72# |                     $h1 +      |
     73# |        198.51.100.1/24  |      |
     74# |        2001:db8:1::1/64 |      |
     75# +-------------------------|------+
     76#                           |
     77# +-------------------------|-------------------+
     78# | SW1                     |                   |
     79# | +-----------------------|-----------------+ |
     80# | |                  $ol1 +                 | |
     81# | |      198.51.100.2/24                    | |
     82# | |      2001:db8:1::2/64                   | |
     83# | |                                         | |
     84# | |              + g1a (ip6gre)             | |
     85# | |                loc=2001:db8:3::1        | |
     86# | |                rem=2001:db8:3::2        | |
     87# | |                tos=inherit              | |
     88# | |                    ^                    | |
     89# | |   VRF v$ol1        |                    | |
     90# | +--------------------|--------------------+ |
     91# |                      |                      |
     92# | +--------------------|--------------------+ |
     93# | |   VRF v$ul1        |                    | |
     94# | |                    |                    | |
     95# | |                    v                    | |
     96# | |             dummy1 +                    | |
     97# | |       2001:db8:3::1/64                  | |
     98# | |         .-----------'                   | |
     99# | |         |                               | |
    100# | |         v                               | |
    101# | |         + $ul1.111 (vlan)               | |
    102# | |         | 2001:db8:10::1/64             | |
    103# | |         \                               | |
    104# | |          \__________                    | |
    105# | |                     |                   | |
    106# | |                     + $ul1              | |
    107# | +---------------------|-------------------+ |
    108# +-----------------------|---------------------+
    109#                         |
    110# +-----------------------|---------------------+
    111# | SW2                   |                     |
    112# | +---------------------|-------------------+ |
    113# | |                     + $ul2              | |
    114# | |                _____|                   | |
    115# | |               /                         | |
    116# | |              /                          | |
    117# | |              | $ul2.111 (vlan)          | |
    118# | |              + 2001:db8:10::2/64        | |
    119# | |              ^                          | |
    120# | |              |                          | |
    121# | |              '------.                   | |
    122# | |              dummy2 +                   | |
    123# | |              2001:db8:3::2/64           | |
    124# | |                     ^                   | |
    125# | |                     |                   | |
    126# | |                     |                   | |
    127# | | VRF v$ul2           |                   | |
    128# | +---------------------|-------------------+ |
    129# |                       |                     |
    130# | +---------------------|-------------------+ |
    131# | | VRF v$ol2           |                   | |
    132# | |                     |                   | |
    133# | |                     v                   | |
    134# | |        g2a (ip6gre) +                   | |
    135# | |        loc=2001:db8:3::2                | |
    136# | |        rem=2001:db8:3::1                | |
    137# | |        tos=inherit                      | |
    138# | |                                         | |
    139# | |                $ol2 +                   | |
    140# | |    203.0.113.2/24   |                   | |
    141# | |    2001:db8:2::2/64 |                   | |
    142# | +---------------------|-------------------+ |
    143# +-----------------------|---------------------+
    144#                         |
    145# +-----------------------|--------+
    146# | H2                    |        |
    147# |                   $h2 +        |
    148# |      203.0.113.1/24            |
    149# |      2001:db8:2::1/64          |
    150# +--------------------------------+
    151
    152source lib.sh
    153source tc_common.sh
    154
    155h1_create()
    156{
    157	simple_if_init $h1 198.51.100.1/24 2001:db8:1::1/64
    158	ip route add vrf v$h1 203.0.113.0/24 via 198.51.100.2
    159	ip -6 route add vrf v$h1 2001:db8:2::/64 via 2001:db8:1::2
    160}
    161
    162h1_destroy()
    163{
    164	ip -6 route del vrf v$h1 2001:db8:2::/64 via 2001:db8:1::2
    165	ip route del vrf v$h1 203.0.113.0/24 via 198.51.100.2
    166	simple_if_fini $h1 198.51.100.1/24 2001:db8:1::1/64
    167}
    168
    169h2_create()
    170{
    171	simple_if_init $h2 203.0.113.1/24 2001:db8:2::1/64
    172	ip route add vrf v$h2 198.51.100.0/24 via 203.0.113.2
    173	ip -6 route add vrf v$h2 2001:db8:1::/64 via 2001:db8:2::2
    174}
    175
    176h2_destroy()
    177{
    178	ip -6 route del vrf v$h2 2001:db8:1::/64 via 2001:db8:2::2
    179	ip route del vrf v$h2 198.51.100.0/24 via 203.0.113.2
    180	simple_if_fini $h2 203.0.113.1/24 2001:db8:2::1/64
    181}
    182
    183sw1_flat_create()
    184{
    185	local ol1=$1; shift
    186	local ul1=$1; shift
    187
    188	ip link set dev $ol1 up
    189        __addr_add_del $ol1 add 198.51.100.2/24 2001:db8:1::2/64
    190
    191	ip link set dev $ul1 up
    192	vlan_create $ul1 111 "" 2001:db8:10::1/64
    193
    194	tunnel_create g1a ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \
    195		ttl inherit "$@"
    196	ip link set dev g1a up
    197        __addr_add_del g1a add "2001:db8:3::1/128"
    198
    199	ip -6 route add 2001:db8:3::2/128 via 2001:db8:10::2
    200	ip route add 203.0.113.0/24 dev g1a
    201	ip -6 route add 2001:db8:2::/64 dev g1a
    202}
    203
    204sw1_flat_destroy()
    205{
    206	local ol1=$1; shift
    207	local ul1=$1; shift
    208
    209	ip -6 route del 2001:db8:2::/64
    210	ip route del 203.0.113.0/24
    211	ip -6 route del 2001:db8:3::2/128 via 2001:db8:10::2
    212
    213	__simple_if_fini g1a 2001:db8:3::1/128
    214	tunnel_destroy g1a
    215
    216	vlan_destroy $ul1 111
    217	__simple_if_fini $ul1
    218	__simple_if_fini $ol1 198.51.100.2/24 2001:db8:1::2/64
    219}
    220
    221sw2_flat_create()
    222{
    223	local ol2=$1; shift
    224	local ul2=$1; shift
    225
    226	simple_if_init $ol2 203.0.113.2/24 2001:db8:2::2/64
    227	__simple_if_init $ul2 v$ol2
    228	vlan_create $ul2 111 v$ol2 2001:db8:10::2/64
    229
    230	tunnel_create g2a ip6gre 2001:db8:3::2 2001:db8:3::1 tos inherit \
    231		ttl inherit dev v$ol2 "$@"
    232	__simple_if_init g2a v$ol2 2001:db8:3::2/128
    233
    234	# Replace neighbor to avoid 1 dropped packet due to "unresolved neigh"
    235	ip neigh replace dev $ol2 203.0.113.1 lladdr $(mac_get $h2)
    236	ip -6 neigh replace dev $ol2 2001:db8:2::1 lladdr $(mac_get $h2)
    237
    238	ip -6 route add vrf v$ol2 2001:db8:3::1/128 via 2001:db8:10::1
    239	ip route add vrf v$ol2 198.51.100.0/24 dev g2a
    240	ip -6 route add vrf v$ol2 2001:db8:1::/64 dev g2a
    241}
    242
    243sw2_flat_destroy()
    244{
    245	local ol2=$1; shift
    246	local ul2=$1; shift
    247
    248	ip -6 route del vrf v$ol2 2001:db8:2::/64
    249	ip route del vrf v$ol2 198.51.100.0/24
    250	ip -6 route del vrf v$ol2 2001:db8:3::1/128 via 2001:db8:10::1
    251
    252	__simple_if_fini g2a 2001:db8:3::2/128
    253	tunnel_destroy g2a
    254
    255	vlan_destroy $ul2 111
    256	__simple_if_fini $ul2
    257	simple_if_fini $ol2 203.0.113.2/24 2001:db8:2::2/64
    258}
    259
    260sw1_hierarchical_create()
    261{
    262	local ol1=$1; shift
    263	local ul1=$1; shift
    264
    265	simple_if_init $ol1 198.51.100.2/24 2001:db8:1::2/64
    266	simple_if_init $ul1
    267	ip link add name dummy1 type dummy
    268	__simple_if_init dummy1 v$ul1 2001:db8:3::1/64
    269
    270	vlan_create $ul1 111 v$ul1 2001:db8:10::1/64
    271	tunnel_create g1a ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \
    272		ttl inherit dev dummy1 "$@"
    273	ip link set dev g1a master v$ol1
    274
    275	ip -6 route add vrf v$ul1 2001:db8:3::2/128 via 2001:db8:10::2
    276	ip route add vrf v$ol1 203.0.113.0/24 dev g1a
    277	ip -6 route add vrf v$ol1 2001:db8:2::/64 dev g1a
    278}
    279
    280sw1_hierarchical_destroy()
    281{
    282	local ol1=$1; shift
    283	local ul1=$1; shift
    284
    285	ip -6 route del vrf v$ol1 2001:db8:2::/64
    286	ip route del vrf v$ol1 203.0.113.0/24
    287	ip -6 route del vrf v$ul1 2001:db8:3::2/128
    288
    289	tunnel_destroy g1a
    290	vlan_destroy $ul1 111
    291
    292	__simple_if_fini dummy1 2001:db8:3::1/64
    293	ip link del dev dummy1
    294
    295	simple_if_fini $ul1
    296	simple_if_fini $ol1 198.51.100.2/24 2001:db8:1::2/64
    297}
    298
    299sw2_hierarchical_create()
    300{
    301	local ol2=$1; shift
    302	local ul2=$1; shift
    303
    304	simple_if_init $ol2 203.0.113.2/24 2001:db8:2::2/64
    305	simple_if_init $ul2
    306
    307	ip link add name dummy2 type dummy
    308	__simple_if_init dummy2 v$ul2 2001:db8:3::2/64
    309
    310	vlan_create $ul2 111 v$ul2 2001:db8:10::2/64
    311	tunnel_create g2a ip6gre 2001:db8:3::2 2001:db8:3::1 tos inherit \
    312		ttl inherit dev dummy2 "$@"
    313	ip link set dev g2a master v$ol2
    314
    315	# Replace neighbor to avoid 1 dropped packet due to "unresolved neigh"
    316	ip neigh replace dev $ol2 203.0.113.1 lladdr $(mac_get $h2)
    317	ip -6 neigh replace dev $ol2 2001:db8:2::1 lladdr $(mac_get $h2)
    318
    319	ip -6 route add vrf v$ul2 2001:db8:3::1/128 via 2001:db8:10::1
    320	ip route add vrf v$ol2 198.51.100.0/24 dev g2a
    321	ip -6 route add vrf v$ol2 2001:db8:1::/64 dev g2a
    322}
    323
    324sw2_hierarchical_destroy()
    325{
    326	local ol2=$1; shift
    327	local ul2=$1; shift
    328
    329	ip -6 route del vrf v$ol2 2001:db8:2::/64
    330	ip route del vrf v$ol2 198.51.100.0/24
    331	ip -6 route del vrf v$ul2 2001:db8:3::1/128
    332
    333	tunnel_destroy g2a
    334	vlan_destroy $ul2 111
    335
    336	__simple_if_fini dummy2 2001:db8:3::2/64
    337	ip link del dev dummy2
    338
    339	simple_if_fini $ul2
    340	simple_if_fini $ol2 203.0.113.2/24 2001:db8:2::2/64
    341}
    342
    343test_traffic_ip4ip6()
    344{
    345	RET=0
    346
    347	h1mac=$(mac_get $h1)
    348	ol1mac=$(mac_get $ol1)
    349
    350	tc qdisc add dev $ul1 clsact
    351	tc filter add dev $ul1 egress proto all pref 1 handle 101 \
    352		flower $TC_FLAG action pass
    353
    354	tc qdisc add dev $ol2 clsact
    355	tc filter add dev $ol2 egress protocol ipv4 pref 1 handle 101 \
    356		flower $TC_FLAG dst_ip 203.0.113.1 action pass
    357
    358	$MZ $h1 -c 1000 -p 64 -a $h1mac -b $ol1mac -A 198.51.100.1 \
    359		-B 203.0.113.1 -t ip -q -d 1msec
    360
    361	# Check ports after encap and after decap.
    362	tc_check_at_least_x_packets "dev $ul1 egress" 101 1000
    363	check_err $? "Packets did not go through $ul1, tc_flag = $TC_FLAG"
    364
    365	tc_check_at_least_x_packets "dev $ol2 egress" 101 1000
    366	check_err $? "Packets did not go through $ol2, tc_flag = $TC_FLAG"
    367
    368	log_test "$@"
    369
    370	tc filter del dev $ol2 egress protocol ipv4 pref 1 handle 101 flower
    371	tc qdisc del dev $ol2 clsact
    372	tc filter del dev $ul1 egress proto all pref 1 handle 101 flower
    373	tc qdisc del dev $ul1 clsact
    374}
    375
    376test_traffic_ip6ip6()
    377{
    378	RET=0
    379
    380	h1mac=$(mac_get $h1)
    381	ol1mac=$(mac_get $ol1)
    382
    383	tc qdisc add dev $ul1 clsact
    384	tc filter add dev $ul1 egress proto all pref 1 handle 101 \
    385		flower $TC_FLAG action pass
    386
    387	tc qdisc add dev $ol2 clsact
    388	tc filter add dev $ol2 egress protocol ipv6 pref 1 handle 101 \
    389		flower $TC_FLAG dst_ip 2001:db8:2::1 action pass
    390
    391	$MZ -6 $h1 -c 1000 -p 64 -a $h1mac -b $ol1mac -A 2001:db8:1::1 \
    392		-B 2001:db8:2::1 -t ip -q -d 1msec
    393
    394	# Check ports after encap and after decap.
    395	tc_check_at_least_x_packets "dev $ul1 egress" 101 1000
    396	check_err $? "Packets did not go through $ul1, tc_flag = $TC_FLAG"
    397
    398	tc_check_at_least_x_packets "dev $ol2 egress" 101 1000
    399	check_err $? "Packets did not go through $ol2, tc_flag = $TC_FLAG"
    400
    401	log_test "$@"
    402
    403	tc filter del dev $ol2 egress protocol ipv6 pref 1 handle 101 flower
    404	tc qdisc del dev $ol2 clsact
    405	tc filter del dev $ul1 egress proto all pref 1 handle 101 flower
    406	tc qdisc del dev $ul1 clsact
    407}
    408
    409topo_mtu_change()
    410{
    411	local mtu=$1
    412
    413	ip link set mtu $mtu dev $h1
    414	ip link set mtu $mtu dev $ol1
    415	ip link set mtu $mtu dev g1a
    416	ip link set mtu $mtu dev $ul1
    417	ip link set mtu $mtu dev $ul1.111
    418	ip link set mtu $mtu dev $h2
    419	ip link set mtu $mtu dev $ol2
    420	ip link set mtu $mtu dev g2a
    421	ip link set mtu $mtu dev $ul2
    422	ip link set mtu $mtu dev $ul2.111
    423}
    424
    425test_mtu_change()
    426{
    427	RET=0
    428
    429	ping6_do $h1 2001:db8:2::1 "-s 1800 -w 3"
    430	check_fail $? "ping GRE IPv6 should not pass with packet size 1800"
    431
    432	RET=0
    433
    434	topo_mtu_change	2000
    435	ping6_do $h1 2001:db8:2::1 "-s 1800 -w 3"
    436	check_err $?
    437	log_test "ping GRE IPv6, packet size 1800 after MTU change"
    438}