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

vxlan_asymmetric.sh (17978B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3
      4# +---------------------------+                +------------------------------+
      5# |                    vrf-h1 |                |                       vrf-h2 |
      6# |    + $h1                  |                |    + $h2                     |
      7# |    | 10.1.1.101/24        |                |    | 10.1.2.101/24           |
      8# |    | default via 10.1.1.1 |                |    | default via 10.1.2.1    |
      9# +----|----------------------+                +----|-------------------------+
     10#      |                                            |
     11# +----|--------------------------------------------|-------------------------+
     12# | SW |                                            |                         |
     13# | +--|--------------------------------------------|-----------------------+ |
     14# | |  + $swp1                         br1          + $swp2                 | |
     15# | |     vid 10 pvid untagged                         vid 20 pvid untagged | |
     16# | |                                                                       | |
     17# | |  + vx10                                       + vx20                  | |
     18# | |    local 10.0.0.1                               local 10.0.0.1        | |
     19# | |    remote 10.0.0.2                              remote 10.0.0.2       | |
     20# | |    id 1000                                      id 2000               | |
     21# | |    dstport 4789                                 dstport 4789          | |
     22# | |    vid 10 pvid untagged                         vid 20 pvid untagged  | |
     23# | |                                                                       | |
     24# | +-----------------------------------+-----------------------------------+ |
     25# |                                     |                                     |
     26# | +-----------------------------------|-----------------------------------+ |
     27# | |                                   |                                   | |
     28# | |  +--------------------------------+--------------------------------+  | |
     29# | |  |                                                                 |  | |
     30# | |  + vlan10                                                   vlan20 +  | |
     31# | |  | 10.1.1.11/24                                       10.1.2.11/24 |  | |
     32# | |  |                                                                 |  | |
     33# | |  + vlan10-v (macvlan)                           vlan20-v (macvlan) +  | |
     34# | |    10.1.1.1/24                                         10.1.2.1/24    | |
     35# | |    00:00:5e:00:01:01                             00:00:5e:00:01:01    | |
     36# | |                               vrf-green                               | |
     37# | +-----------------------------------------------------------------------+ |
     38# |                                                                           |
     39# |    + $rp1                                       +lo                       |
     40# |    | 192.0.2.1/24                                10.0.0.1/32              |
     41# +----|----------------------------------------------------------------------+
     42#      |
     43# +----|--------------------------------------------------------+
     44# |    |                            vrf-spine                   |
     45# |    + $rp2                                                   |
     46# |      192.0.2.2/24                                           |
     47# |                                                             |   (maybe) HW
     48# =============================================================================
     49# |                                                             |  (likely) SW
     50# |                                                             |
     51# |    + v1 (veth)                                              |
     52# |    | 192.0.3.2/24                                           |
     53# +----|--------------------------------------------------------+
     54#      |
     55# +----|----------------------------------------------------------------------+
     56# |    + v2 (veth)                                  +lo           NS1 (netns) |
     57# |      192.0.3.1/24                                10.0.0.2/32              |
     58# |                                                                           |
     59# | +-----------------------------------------------------------------------+ |
     60# | |                               vrf-green                               | |
     61# | |  + vlan10-v (macvlan)                           vlan20-v (macvlan) +  | |
     62# | |  | 10.1.1.1/24                                         10.1.2.1/24 |  | |
     63# | |  | 00:00:5e:00:01:01                             00:00:5e:00:01:01 |  | |
     64# | |  |                                                                 |  | |
     65# | |  + vlan10                                                   vlan20 +  | |
     66# | |  | 10.1.1.12/24                                       10.1.2.12/24 |  | |
     67# | |  |                                                                 |  | |
     68# | |  +--------------------------------+--------------------------------+  | |
     69# | |                                   |                                   | |
     70# | +-----------------------------------|-----------------------------------+ |
     71# |                                     |                                     |
     72# | +-----------------------------------+-----------------------------------+ |
     73# | |                                                                       | |
     74# | |  + vx10                                     + vx20                    | |
     75# | |    local 10.0.0.2                             local 10.0.0.2          | |
     76# | |    remote 10.0.0.1                            remote 10.0.0.1         | |
     77# | |    id 1000                                    id 2000                 | |
     78# | |    dstport 4789                               dstport 4789            | |
     79# | |    vid 10 pvid untagged                       vid 20 pvid untagged    | |
     80# | |                                                                       | |
     81# | |  + w1 (veth)                                + w3 (veth)               | |
     82# | |  | vid 10 pvid untagged          br1        | vid 20 pvid untagged    | |
     83# | +--|------------------------------------------|-------------------------+ |
     84# |    |                                          |                           |
     85# |    |                                          |                           |
     86# | +--|----------------------+                +--|-------------------------+ |
     87# | |  |               vrf-h1 |                |  |                  vrf-h2 | |
     88# | |  + w2 (veth)            |                |  + w4 (veth)               | |
     89# | |    10.1.1.102/24        |                |    10.1.2.102/24           | |
     90# | |    default via 10.1.1.1 |                |    default via 10.1.2.1    | |
     91# | +-------------------------+                +----------------------------+ |
     92# +---------------------------------------------------------------------------+
     93
     94ALL_TESTS="
     95	ping_ipv4
     96	arp_decap
     97	arp_suppression
     98"
     99NUM_NETIFS=6
    100source lib.sh
    101
    102require_command $ARPING
    103
    104hx_create()
    105{
    106	local vrf_name=$1; shift
    107	local if_name=$1; shift
    108	local ip_addr=$1; shift
    109	local gw_ip=$1; shift
    110
    111	vrf_create $vrf_name
    112	ip link set dev $if_name master $vrf_name
    113	ip link set dev $vrf_name up
    114	ip link set dev $if_name up
    115
    116	ip address add $ip_addr/24 dev $if_name
    117	ip neigh replace $gw_ip lladdr 00:00:5e:00:01:01 nud permanent \
    118		dev $if_name
    119	ip route add default vrf $vrf_name nexthop via $gw_ip
    120}
    121export -f hx_create
    122
    123hx_destroy()
    124{
    125	local vrf_name=$1; shift
    126	local if_name=$1; shift
    127	local ip_addr=$1; shift
    128	local gw_ip=$1; shift
    129
    130	ip route del default vrf $vrf_name nexthop via $gw_ip
    131	ip neigh del $gw_ip dev $if_name
    132	ip address del $ip_addr/24 dev $if_name
    133
    134	ip link set dev $if_name down
    135	vrf_destroy $vrf_name
    136}
    137
    138h1_create()
    139{
    140	hx_create "vrf-h1" $h1 10.1.1.101 10.1.1.1
    141}
    142
    143h1_destroy()
    144{
    145	hx_destroy "vrf-h1" $h1 10.1.1.101 10.1.1.1
    146}
    147
    148h2_create()
    149{
    150	hx_create "vrf-h2" $h2 10.1.2.101 10.1.2.1
    151}
    152
    153h2_destroy()
    154{
    155	hx_destroy "vrf-h2" $h2 10.1.2.101 10.1.2.1
    156}
    157
    158switch_create()
    159{
    160	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \
    161		mcast_snooping 0
    162	# Make sure the bridge uses the MAC address of the local port and not
    163	# that of the VxLAN's device.
    164	ip link set dev br1 address $(mac_get $swp1)
    165	ip link set dev br1 up
    166
    167	ip link set dev $rp1 up
    168	ip address add dev $rp1 192.0.2.1/24
    169	ip route add 10.0.0.2/32 nexthop via 192.0.2.2
    170
    171	ip link add name vx10 type vxlan id 1000		\
    172		local 10.0.0.1 remote 10.0.0.2 dstport 4789	\
    173		nolearning noudpcsum tos inherit ttl 100
    174	ip link set dev vx10 up
    175
    176	ip link set dev vx10 master br1
    177	bridge vlan add vid 10 dev vx10 pvid untagged
    178
    179	ip link add name vx20 type vxlan id 2000		\
    180		local 10.0.0.1 remote 10.0.0.2 dstport 4789	\
    181		nolearning noudpcsum tos inherit ttl 100
    182	ip link set dev vx20 up
    183
    184	ip link set dev vx20 master br1
    185	bridge vlan add vid 20 dev vx20 pvid untagged
    186
    187	ip link set dev $swp1 master br1
    188	ip link set dev $swp1 up
    189	bridge vlan add vid 10 dev $swp1 pvid untagged
    190
    191	ip link set dev $swp2 master br1
    192	ip link set dev $swp2 up
    193	bridge vlan add vid 20 dev $swp2 pvid untagged
    194
    195	ip address add 10.0.0.1/32 dev lo
    196
    197	# Create SVIs
    198	vrf_create "vrf-green"
    199	ip link set dev vrf-green up
    200
    201	ip link add link br1 name vlan10 up master vrf-green type vlan id 10
    202	ip address add 10.1.1.11/24 dev vlan10
    203	ip link add link vlan10 name vlan10-v up master vrf-green \
    204		address 00:00:5e:00:01:01 type macvlan mode private
    205	ip address add 10.1.1.1/24 dev vlan10-v
    206
    207	ip link add link br1 name vlan20 up master vrf-green type vlan id 20
    208	ip address add 10.1.2.11/24 dev vlan20
    209	ip link add link vlan20 name vlan20-v up master vrf-green \
    210		address 00:00:5e:00:01:01 type macvlan mode private
    211	ip address add 10.1.2.1/24 dev vlan20-v
    212
    213	bridge vlan add vid 10 dev br1 self
    214	bridge vlan add vid 20 dev br1 self
    215
    216	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
    217	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
    218
    219	sysctl_set net.ipv4.conf.all.rp_filter 0
    220	sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
    221	sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
    222}
    223
    224switch_destroy()
    225{
    226	sysctl_restore net.ipv4.conf.all.rp_filter
    227
    228	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 20
    229	bridge fdb del 00:00:5e:00:01:01 dev br1 self local vlan 10
    230
    231	bridge vlan del vid 20 dev br1 self
    232	bridge vlan del vid 10 dev br1 self
    233
    234	ip link del dev vlan20
    235
    236	ip link del dev vlan10
    237
    238	vrf_destroy "vrf-green"
    239
    240	ip address del 10.0.0.1/32 dev lo
    241
    242	bridge vlan del vid 20 dev $swp2
    243	ip link set dev $swp2 down
    244	ip link set dev $swp2 nomaster
    245
    246	bridge vlan del vid 10 dev $swp1
    247	ip link set dev $swp1 down
    248	ip link set dev $swp1 nomaster
    249
    250	bridge vlan del vid 20 dev vx20
    251	ip link set dev vx20 nomaster
    252
    253	ip link set dev vx20 down
    254	ip link del dev vx20
    255
    256	bridge vlan del vid 10 dev vx10
    257	ip link set dev vx10 nomaster
    258
    259	ip link set dev vx10 down
    260	ip link del dev vx10
    261
    262	ip route del 10.0.0.2/32 nexthop via 192.0.2.2
    263	ip address del dev $rp1 192.0.2.1/24
    264	ip link set dev $rp1 down
    265
    266	ip link set dev br1 down
    267	ip link del dev br1
    268}
    269
    270spine_create()
    271{
    272	vrf_create "vrf-spine"
    273	ip link set dev $rp2 master vrf-spine
    274	ip link set dev v1 master vrf-spine
    275	ip link set dev vrf-spine up
    276	ip link set dev $rp2 up
    277	ip link set dev v1 up
    278
    279	ip address add 192.0.2.2/24 dev $rp2
    280	ip address add 192.0.3.2/24 dev v1
    281
    282	ip route add 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1
    283	ip route add 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1
    284}
    285
    286spine_destroy()
    287{
    288	ip route del 10.0.0.2/32 vrf vrf-spine nexthop via 192.0.3.1
    289	ip route del 10.0.0.1/32 vrf vrf-spine nexthop via 192.0.2.1
    290
    291	ip address del 192.0.3.2/24 dev v1
    292	ip address del 192.0.2.2/24 dev $rp2
    293
    294	ip link set dev v1 down
    295	ip link set dev $rp2 down
    296	vrf_destroy "vrf-spine"
    297}
    298
    299ns_h1_create()
    300{
    301	hx_create "vrf-h1" w2 10.1.1.102 10.1.1.1
    302}
    303export -f ns_h1_create
    304
    305ns_h2_create()
    306{
    307	hx_create "vrf-h2" w4 10.1.2.102 10.1.2.1
    308}
    309export -f ns_h2_create
    310
    311ns_switch_create()
    312{
    313	ip link add name br1 type bridge vlan_filtering 1 vlan_default_pvid 0 \
    314		mcast_snooping 0
    315	ip link set dev br1 up
    316
    317	ip link set dev v2 up
    318	ip address add dev v2 192.0.3.1/24
    319	ip route add 10.0.0.1/32 nexthop via 192.0.3.2
    320
    321	ip link add name vx10 type vxlan id 1000		\
    322		local 10.0.0.2 remote 10.0.0.1 dstport 4789	\
    323		nolearning noudpcsum tos inherit ttl 100
    324	ip link set dev vx10 up
    325
    326	ip link set dev vx10 master br1
    327	bridge vlan add vid 10 dev vx10 pvid untagged
    328
    329	ip link add name vx20 type vxlan id 2000		\
    330		local 10.0.0.2 remote 10.0.0.1 dstport 4789	\
    331		nolearning noudpcsum tos inherit ttl 100
    332	ip link set dev vx20 up
    333
    334	ip link set dev vx20 master br1
    335	bridge vlan add vid 20 dev vx20 pvid untagged
    336
    337	ip link set dev w1 master br1
    338	ip link set dev w1 up
    339	bridge vlan add vid 10 dev w1 pvid untagged
    340
    341	ip link set dev w3 master br1
    342	ip link set dev w3 up
    343	bridge vlan add vid 20 dev w3 pvid untagged
    344
    345	ip address add 10.0.0.2/32 dev lo
    346
    347	# Create SVIs
    348	vrf_create "vrf-green"
    349	ip link set dev vrf-green up
    350
    351	ip link add link br1 name vlan10 up master vrf-green type vlan id 10
    352	ip address add 10.1.1.12/24 dev vlan10
    353	ip link add link vlan10 name vlan10-v up master vrf-green \
    354		address 00:00:5e:00:01:01 type macvlan mode private
    355	ip address add 10.1.1.1/24 dev vlan10-v
    356
    357	ip link add link br1 name vlan20 up master vrf-green type vlan id 20
    358	ip address add 10.1.2.12/24 dev vlan20
    359	ip link add link vlan20 name vlan20-v up master vrf-green \
    360		address 00:00:5e:00:01:01 type macvlan mode private
    361	ip address add 10.1.2.1/24 dev vlan20-v
    362
    363	bridge vlan add vid 10 dev br1 self
    364	bridge vlan add vid 20 dev br1 self
    365
    366	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 10
    367	bridge fdb add 00:00:5e:00:01:01 dev br1 self local vlan 20
    368
    369	sysctl_set net.ipv4.conf.all.rp_filter 0
    370	sysctl_set net.ipv4.conf.vlan10-v.rp_filter 0
    371	sysctl_set net.ipv4.conf.vlan20-v.rp_filter 0
    372}
    373export -f ns_switch_create
    374
    375ns_init()
    376{
    377	ip link add name w1 type veth peer name w2
    378	ip link add name w3 type veth peer name w4
    379
    380	ip link set dev lo up
    381
    382	ns_h1_create
    383	ns_h2_create
    384	ns_switch_create
    385}
    386export -f ns_init
    387
    388ns1_create()
    389{
    390	ip netns add ns1
    391	ip link set dev v2 netns ns1
    392	in_ns ns1 ns_init
    393}
    394
    395ns1_destroy()
    396{
    397	ip netns exec ns1 ip link set dev v2 netns 1
    398	ip netns del ns1
    399}
    400
    401macs_populate()
    402{
    403	local mac1=$1; shift
    404	local mac2=$1; shift
    405	local ip1=$1; shift
    406	local ip2=$1; shift
    407	local dst=$1; shift
    408
    409	bridge fdb add $mac1 dev vx10 self master extern_learn static \
    410		dst $dst vlan 10
    411	bridge fdb add $mac2 dev vx20 self master extern_learn static \
    412		dst $dst vlan 20
    413
    414	ip neigh add $ip1 lladdr $mac1 nud noarp dev vlan10 \
    415		extern_learn
    416	ip neigh add $ip2 lladdr $mac2 nud noarp dev vlan20 \
    417		extern_learn
    418}
    419export -f macs_populate
    420
    421macs_initialize()
    422{
    423	local h1_ns_mac=$(in_ns ns1 mac_get w2)
    424	local h2_ns_mac=$(in_ns ns1 mac_get w4)
    425	local h1_mac=$(mac_get $h1)
    426	local h2_mac=$(mac_get $h2)
    427
    428	macs_populate $h1_ns_mac $h2_ns_mac 10.1.1.102 10.1.2.102 10.0.0.2
    429	in_ns ns1 macs_populate $h1_mac $h2_mac 10.1.1.101 10.1.2.101 10.0.0.1
    430}
    431
    432setup_prepare()
    433{
    434	h1=${NETIFS[p1]}
    435	swp1=${NETIFS[p2]}
    436
    437	swp2=${NETIFS[p3]}
    438	h2=${NETIFS[p4]}
    439
    440	rp1=${NETIFS[p5]}
    441	rp2=${NETIFS[p6]}
    442
    443	vrf_prepare
    444	forwarding_enable
    445
    446	h1_create
    447	h2_create
    448	switch_create
    449
    450	ip link add name v1 type veth peer name v2
    451	spine_create
    452	ns1_create
    453
    454	macs_initialize
    455}
    456
    457cleanup()
    458{
    459	pre_cleanup
    460
    461	ns1_destroy
    462	spine_destroy
    463	ip link del dev v1
    464
    465	switch_destroy
    466	h2_destroy
    467	h1_destroy
    468
    469	forwarding_restore
    470	vrf_cleanup
    471}
    472
    473ping_ipv4()
    474{
    475	ping_test $h1 10.1.2.101 ": local->local vid 10->vid 20"
    476	ping_test $h1 10.1.1.102 ": local->remote vid 10->vid 10"
    477	ping_test $h2 10.1.2.102 ": local->remote vid 20->vid 20"
    478	ping_test $h1 10.1.2.102 ": local->remote vid 10->vid 20"
    479	ping_test $h2 10.1.1.102 ": local->remote vid 20->vid 10"
    480}
    481
    482arp_decap()
    483{
    484	# Repeat the ping tests, but without populating the neighbours. This
    485	# makes sure we correctly decapsulate ARP packets
    486	log_info "deleting neighbours from vlan interfaces"
    487
    488	ip neigh del 10.1.1.102 dev vlan10
    489	ip neigh del 10.1.2.102 dev vlan20
    490
    491	ping_ipv4
    492
    493	ip neigh replace 10.1.1.102 lladdr $(in_ns ns1 mac_get w2) nud noarp \
    494		dev vlan10 extern_learn
    495	ip neigh replace 10.1.2.102 lladdr $(in_ns ns1 mac_get w4) nud noarp \
    496		dev vlan20 extern_learn
    497}
    498
    499arp_suppression_compare()
    500{
    501	local expect=$1; shift
    502	local actual=$(in_ns ns1 tc_rule_stats_get vx10 1 ingress)
    503
    504	(( expect == actual ))
    505	check_err $? "expected $expect arps got $actual"
    506}
    507
    508arp_suppression()
    509{
    510	ip link set dev vx10 type bridge_slave neigh_suppress on
    511
    512	in_ns ns1 tc qdisc add dev vx10 clsact
    513	in_ns ns1 tc filter add dev vx10 ingress proto arp pref 1 handle 101 \
    514		flower dst_mac ff:ff:ff:ff:ff:ff arp_tip 10.1.1.102 arp_op \
    515		request action pass
    516
    517	# The neighbour is configured on the SVI and ARP suppression is on, so
    518	# the ARP request should be suppressed
    519	RET=0
    520
    521	$ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102
    522	check_err $? "arping failed"
    523
    524	arp_suppression_compare 0
    525
    526	log_test "neigh_suppress: on / neigh exists: yes"
    527
    528	# Delete the neighbour from the the SVI. A single ARP request should be
    529	# received by the remote VTEP
    530	RET=0
    531
    532	ip neigh del 10.1.1.102 dev vlan10
    533
    534	$ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102
    535	check_err $? "arping failed"
    536
    537	arp_suppression_compare 1
    538
    539	log_test "neigh_suppress: on / neigh exists: no"
    540
    541	# Turn off ARP suppression and make sure ARP is not suppressed,
    542	# regardless of neighbour existence on the SVI
    543	RET=0
    544
    545	ip neigh del 10.1.1.102 dev vlan10 &> /dev/null
    546	ip link set dev vx10 type bridge_slave neigh_suppress off
    547
    548	$ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102
    549	check_err $? "arping failed"
    550
    551	arp_suppression_compare 2
    552
    553	log_test "neigh_suppress: off / neigh exists: no"
    554
    555	RET=0
    556
    557	ip neigh add 10.1.1.102 lladdr $(in_ns ns1 mac_get w2) nud noarp \
    558		dev vlan10 extern_learn
    559
    560	$ARPING -I $h1 -fqb -c 1 -w 1 10.1.1.102
    561	check_err $? "arping failed"
    562
    563	arp_suppression_compare 3
    564
    565	log_test "neigh_suppress: off / neigh exists: yes"
    566
    567	in_ns ns1 tc qdisc del dev vx10 clsact
    568}
    569
    570trap cleanup EXIT
    571
    572setup_prepare
    573setup_wait
    574
    575tests_run
    576
    577exit $EXIT_STATUS