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

mirror_lib.sh (2997B)


      1# SPDX-License-Identifier: GPL-2.0
      2
      3mirror_install()
      4{
      5	local from_dev=$1; shift
      6	local direction=$1; shift
      7	local to_dev=$1; shift
      8	local filter=$1; shift
      9
     10	tc filter add dev $from_dev $direction \
     11	   pref 1000 $filter \
     12	   action mirred egress mirror dev $to_dev
     13}
     14
     15mirror_uninstall()
     16{
     17	local from_dev=$1; shift
     18	local direction=$1; shift
     19
     20	tc filter del dev $swp1 $direction pref 1000
     21}
     22
     23is_ipv6()
     24{
     25	local addr=$1; shift
     26
     27	[[ -z ${addr//[0-9a-fA-F:]/} ]]
     28}
     29
     30mirror_test()
     31{
     32	local vrf_name=$1; shift
     33	local sip=$1; shift
     34	local dip=$1; shift
     35	local dev=$1; shift
     36	local pref=$1; shift
     37	local expect=$1; shift
     38
     39	if is_ipv6 $dip; then
     40		local proto=-6
     41		local type="icmp6 type=128" # Echo request.
     42	else
     43		local proto=
     44		local type="icmp echoreq"
     45	fi
     46
     47	local t0=$(tc_rule_stats_get $dev $pref)
     48	$MZ $proto $vrf_name ${sip:+-A $sip} -B $dip -a own -b bc -q \
     49	    -c 10 -d 100msec -t $type
     50	sleep 0.5
     51	local t1=$(tc_rule_stats_get $dev $pref)
     52	local delta=$((t1 - t0))
     53	# Tolerate a couple stray extra packets.
     54	((expect <= delta && delta <= expect + 2))
     55	check_err $? "Expected to capture $expect packets, got $delta."
     56}
     57
     58do_test_span_dir_ips()
     59{
     60	local expect=$1; shift
     61	local dev=$1; shift
     62	local direction=$1; shift
     63	local ip1=$1; shift
     64	local ip2=$1; shift
     65
     66	icmp_capture_install $dev
     67	mirror_test v$h1 $ip1 $ip2 $dev 100 $expect
     68	mirror_test v$h2 $ip2 $ip1 $dev 100 $expect
     69	icmp_capture_uninstall $dev
     70}
     71
     72quick_test_span_dir_ips()
     73{
     74	do_test_span_dir_ips 10 "$@"
     75}
     76
     77fail_test_span_dir_ips()
     78{
     79	do_test_span_dir_ips 0 "$@"
     80}
     81
     82test_span_dir_ips()
     83{
     84	local dev=$1; shift
     85	local direction=$1; shift
     86	local forward_type=$1; shift
     87	local backward_type=$1; shift
     88	local ip1=$1; shift
     89	local ip2=$1; shift
     90
     91	quick_test_span_dir_ips "$dev" "$direction" "$ip1" "$ip2"
     92
     93	icmp_capture_install $dev "type $forward_type"
     94	mirror_test v$h1 $ip1 $ip2 $dev 100 10
     95	icmp_capture_uninstall $dev
     96
     97	icmp_capture_install $dev "type $backward_type"
     98	mirror_test v$h2 $ip2 $ip1 $dev 100 10
     99	icmp_capture_uninstall $dev
    100}
    101
    102fail_test_span_dir()
    103{
    104	fail_test_span_dir_ips "$@" 192.0.2.1 192.0.2.2
    105}
    106
    107test_span_dir()
    108{
    109	test_span_dir_ips "$@" 192.0.2.1 192.0.2.2
    110}
    111
    112do_test_span_vlan_dir_ips()
    113{
    114	local expect=$1; shift
    115	local dev=$1; shift
    116	local vid=$1; shift
    117	local direction=$1; shift
    118	local ul_proto=$1; shift
    119	local ip1=$1; shift
    120	local ip2=$1; shift
    121
    122	# Install the capture as skip_hw to avoid double-counting of packets.
    123	# The traffic is meant for local box anyway, so will be trapped to
    124	# kernel.
    125	vlan_capture_install $dev "skip_hw vlan_id $vid vlan_ethtype $ul_proto"
    126	mirror_test v$h1 $ip1 $ip2 $dev 100 $expect
    127	mirror_test v$h2 $ip2 $ip1 $dev 100 $expect
    128	vlan_capture_uninstall $dev
    129}
    130
    131quick_test_span_vlan_dir_ips()
    132{
    133	do_test_span_vlan_dir_ips 10 "$@"
    134}
    135
    136fail_test_span_vlan_dir_ips()
    137{
    138	do_test_span_vlan_dir_ips 0 "$@"
    139}
    140
    141quick_test_span_vlan_dir()
    142{
    143	quick_test_span_vlan_dir_ips "$@" 192.0.2.1 192.0.2.2
    144}
    145
    146fail_test_span_vlan_dir()
    147{
    148	fail_test_span_vlan_dir_ips "$@" 192.0.2.1 192.0.2.2
    149}