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

skbedit_priority.sh (3901B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3
      4# This test sends traffic from H1 to H2. Either on ingress of $swp1, or on
      5# egress of $swp2, the traffic is acted upon by an action skbedit priority. The
      6# new priority should be taken into account when classifying traffic on the PRIO
      7# qdisc at $swp2. The test verifies that for different priority values, the
      8# traffic ends up in expected PRIO band.
      9#
     10# +----------------------+                             +----------------------+
     11# | H1                   |                             |                   H2 |
     12# |    + $h1             |                             |            $h2 +     |
     13# |    | 192.0.2.1/28    |                             |   192.0.2.2/28 |     |
     14# +----|-----------------+                             +----------------|-----+
     15#      |                                                                |
     16# +----|----------------------------------------------------------------|-----+
     17# | SW |                                                                |     |
     18# |  +-|----------------------------------------------------------------|-+   |
     19# |  | + $swp1                       BR                           $swp2 + |   |
     20# |  |                                                             PRIO   |   |
     21# |  +--------------------------------------------------------------------+   |
     22# +---------------------------------------------------------------------------+
     23
     24ALL_TESTS="
     25	ping_ipv4
     26	test_ingress
     27	test_egress
     28"
     29
     30NUM_NETIFS=4
     31source lib.sh
     32
     33: ${HIT_TIMEOUT:=2000} # ms
     34
     35h1_create()
     36{
     37	simple_if_init $h1 192.0.2.1/28
     38}
     39
     40h1_destroy()
     41{
     42	simple_if_fini $h1 192.0.2.1/28
     43}
     44
     45h2_create()
     46{
     47	simple_if_init $h2 192.0.2.2/28
     48}
     49
     50h2_destroy()
     51{
     52	simple_if_fini $h2 192.0.2.2/28
     53}
     54
     55switch_create()
     56{
     57	ip link add name br1 up type bridge vlan_filtering 1
     58	ip link set dev $swp1 master br1
     59	ip link set dev $swp1 up
     60	ip link set dev $swp2 master br1
     61	ip link set dev $swp2 up
     62
     63	tc qdisc add dev $swp1 clsact
     64	tc qdisc add dev $swp2 clsact
     65	tc qdisc add dev $swp2 root handle 10: \
     66	   prio bands 8 priomap 7 6 5 4 3 2 1 0
     67}
     68
     69switch_destroy()
     70{
     71	tc qdisc del dev $swp2 root
     72	tc qdisc del dev $swp2 clsact
     73	tc qdisc del dev $swp1 clsact
     74
     75	ip link set dev $swp2 down
     76	ip link set dev $swp2 nomaster
     77	ip link set dev $swp1 down
     78	ip link set dev $swp1 nomaster
     79	ip link del dev br1
     80}
     81
     82setup_prepare()
     83{
     84	h1=${NETIFS[p1]}
     85	swp1=${NETIFS[p2]}
     86
     87	swp2=${NETIFS[p3]}
     88	h2=${NETIFS[p4]}
     89
     90	h2mac=$(mac_get $h2)
     91
     92	vrf_prepare
     93	h1_create
     94	h2_create
     95	switch_create
     96}
     97
     98cleanup()
     99{
    100	pre_cleanup
    101
    102	switch_destroy
    103	h2_destroy
    104	h1_destroy
    105	vrf_cleanup
    106}
    107
    108ping_ipv4()
    109{
    110	ping_test $h1 192.0.2.2
    111}
    112
    113test_skbedit_priority_one()
    114{
    115	local locus=$1; shift
    116	local prio=$1; shift
    117	local classid=$1; shift
    118
    119	RET=0
    120
    121	tc filter add $locus handle 101 pref 1 \
    122	   flower action skbedit priority $prio
    123
    124	local pkt0=$(qdisc_parent_stats_get $swp2 $classid .packets)
    125	local pkt2=$(tc_rule_handle_stats_get "$locus" 101)
    126	$MZ $h1 -t udp "sp=54321,dp=12345" -c 10 -d 20msec -p 100 \
    127	    -a own -b $h2mac -A 192.0.2.1 -B 192.0.2.2 -q
    128
    129	local pkt1
    130	pkt1=$(busywait "$HIT_TIMEOUT" until_counter_is ">= $((pkt0 + 10))" \
    131			qdisc_parent_stats_get $swp2 $classid .packets)
    132	check_err $? "Expected to get 10 packets on class $classid, but got $((pkt1 - pkt0))."
    133
    134	local pkt3=$(tc_rule_handle_stats_get "$locus" 101)
    135	((pkt3 >= pkt2 + 10))
    136	check_err $? "Expected to get 10 packets on skbedit rule but got $((pkt3 - pkt2))."
    137
    138	log_test "$locus skbedit priority $prio -> classid $classid"
    139
    140	tc filter del $locus pref 1
    141}
    142
    143test_ingress()
    144{
    145	local prio
    146
    147	for prio in {0..7}; do
    148		test_skbedit_priority_one "dev $swp1 ingress" \
    149					  $prio 10:$((8 - prio))
    150	done
    151}
    152
    153test_egress()
    154{
    155	local prio
    156
    157	for prio in {0..7}; do
    158		test_skbedit_priority_one "dev $swp2 egress" \
    159					  $prio 10:$((8 - prio))
    160	done
    161}
    162
    163trap cleanup EXIT
    164
    165setup_prepare
    166setup_wait
    167
    168tests_run
    169
    170exit $EXIT_STATUS