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

fib.sh (6671B)


      1#!/bin/bash
      2# SPDX-License-Identifier: GPL-2.0
      3#
      4# This test is for checking the FIB offload API. It makes use of netdevsim
      5# which registers a listener to the FIB notification chain.
      6
      7lib_dir=$(dirname $0)/../../../net/forwarding
      8
      9ALL_TESTS="
     10	ipv4_identical_routes
     11	ipv4_tos
     12	ipv4_metric
     13	ipv4_replace
     14	ipv4_delete
     15	ipv4_plen
     16	ipv4_replay
     17	ipv4_flush
     18	ipv4_error_path
     19	ipv6_add
     20	ipv6_metric
     21	ipv6_append_single
     22	ipv6_replace_single
     23	ipv6_metric_multipath
     24	ipv6_append_multipath
     25	ipv6_replace_multipath
     26	ipv6_append_multipath_to_single
     27	ipv6_delete_single
     28	ipv6_delete_multipath
     29	ipv6_replay_single
     30	ipv6_replay_multipath
     31	ipv6_error_path
     32"
     33NETDEVSIM_PATH=/sys/bus/netdevsim/
     34DEV_ADDR=1337
     35DEV=netdevsim${DEV_ADDR}
     36SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/
     37NUM_NETIFS=0
     38source $lib_dir/lib.sh
     39source $lib_dir/fib_offload_lib.sh
     40
     41DEVLINK_DEV=
     42source $lib_dir/devlink_lib.sh
     43DEVLINK_DEV=netdevsim/${DEV}
     44
     45ipv4_identical_routes()
     46{
     47	fib_ipv4_identical_routes_test "testns1"
     48}
     49
     50ipv4_tos()
     51{
     52	fib_ipv4_tos_test "testns1"
     53}
     54
     55ipv4_metric()
     56{
     57	fib_ipv4_metric_test "testns1"
     58}
     59
     60ipv4_replace()
     61{
     62	fib_ipv4_replace_test "testns1"
     63}
     64
     65ipv4_delete()
     66{
     67	fib_ipv4_delete_test "testns1"
     68}
     69
     70ipv4_plen()
     71{
     72	fib_ipv4_plen_test "testns1"
     73}
     74
     75ipv4_replay_metric()
     76{
     77	fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV"
     78}
     79
     80ipv4_replay_tos()
     81{
     82	fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV"
     83}
     84
     85ipv4_replay_plen()
     86{
     87	fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV"
     88}
     89
     90ipv4_replay()
     91{
     92	ipv4_replay_metric
     93	ipv4_replay_tos
     94	ipv4_replay_plen
     95}
     96
     97ipv4_flush()
     98{
     99	fib_ipv4_flush_test "testns1"
    100}
    101
    102ipv4_error_path_add()
    103{
    104	local lsb
    105
    106	RET=0
    107
    108	ip -n testns1 link add name dummy1 type dummy
    109	ip -n testns1 link set dev dummy1 up
    110
    111	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
    112	devlink -N testns1 dev reload $DEVLINK_DEV
    113
    114	for lsb in $(seq 1 20); do
    115		ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1 \
    116			&> /dev/null
    117	done
    118
    119	log_test "IPv4 error path - add"
    120
    121	ip -n testns1 link del dev dummy1
    122}
    123
    124ipv4_error_path_replay()
    125{
    126	local lsb
    127
    128	RET=0
    129
    130	ip -n testns1 link add name dummy1 type dummy
    131	ip -n testns1 link set dev dummy1 up
    132
    133	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
    134	devlink -N testns1 dev reload $DEVLINK_DEV
    135
    136	for lsb in $(seq 1 20); do
    137		ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1
    138	done
    139
    140	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
    141	devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
    142
    143	log_test "IPv4 error path - replay"
    144
    145	ip -n testns1 link del dev dummy1
    146
    147	# Successfully reload after deleting all the routes.
    148	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
    149	devlink -N testns1 dev reload $DEVLINK_DEV
    150}
    151
    152ipv4_error_path()
    153{
    154	# Test the different error paths of the notifiers by limiting the size
    155	# of the "IPv4/fib" resource.
    156	ipv4_error_path_add
    157	ipv4_error_path_replay
    158}
    159
    160ipv6_add()
    161{
    162	fib_ipv6_add_test "testns1"
    163}
    164
    165ipv6_metric()
    166{
    167	fib_ipv6_metric_test "testns1"
    168}
    169
    170ipv6_append_single()
    171{
    172	fib_ipv6_append_single_test "testns1"
    173}
    174
    175ipv6_replace_single()
    176{
    177	fib_ipv6_replace_single_test "testns1"
    178}
    179
    180ipv6_metric_multipath()
    181{
    182	fib_ipv6_metric_multipath_test "testns1"
    183}
    184
    185ipv6_append_multipath()
    186{
    187	fib_ipv6_append_multipath_test "testns1"
    188}
    189
    190ipv6_replace_multipath()
    191{
    192	fib_ipv6_replace_multipath_test "testns1"
    193}
    194
    195ipv6_append_multipath_to_single()
    196{
    197	fib_ipv6_append_multipath_to_single_test "testns1"
    198}
    199
    200ipv6_delete_single()
    201{
    202	fib_ipv6_delete_single_test "testns1"
    203}
    204
    205ipv6_delete_multipath()
    206{
    207	fib_ipv6_delete_multipath_test "testns1"
    208}
    209
    210ipv6_replay_single()
    211{
    212	fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV"
    213}
    214
    215ipv6_replay_multipath()
    216{
    217	fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV"
    218}
    219
    220ipv6_error_path_add_single()
    221{
    222	local lsb
    223
    224	RET=0
    225
    226	ip -n testns1 link add name dummy1 type dummy
    227	ip -n testns1 link set dev dummy1 up
    228
    229	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
    230	devlink -N testns1 dev reload $DEVLINK_DEV
    231
    232	for lsb in $(seq 1 20); do
    233		ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1 \
    234			&> /dev/null
    235	done
    236
    237	log_test "IPv6 error path - add single"
    238
    239	ip -n testns1 link del dev dummy1
    240}
    241
    242ipv6_error_path_add_multipath()
    243{
    244	local lsb
    245
    246	RET=0
    247
    248	for i in $(seq 1 2); do
    249		ip -n testns1 link add name dummy$i type dummy
    250		ip -n testns1 link set dev dummy$i up
    251		ip -n testns1 address add 2001:db8:$i::1/64 dev dummy$i
    252	done
    253
    254	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
    255	devlink -N testns1 dev reload $DEVLINK_DEV
    256
    257	for lsb in $(seq 1 20); do
    258		ip -n testns1 route add 2001:db8:10::${lsb}/128 \
    259			nexthop via 2001:db8:1::2 dev dummy1 \
    260			nexthop via 2001:db8:2::2 dev dummy2 &> /dev/null
    261	done
    262
    263	log_test "IPv6 error path - add multipath"
    264
    265	for i in $(seq 1 2); do
    266		ip -n testns1 link del dev dummy$i
    267	done
    268}
    269
    270ipv6_error_path_replay()
    271{
    272	local lsb
    273
    274	RET=0
    275
    276	ip -n testns1 link add name dummy1 type dummy
    277	ip -n testns1 link set dev dummy1 up
    278
    279	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
    280	devlink -N testns1 dev reload $DEVLINK_DEV
    281
    282	for lsb in $(seq 1 20); do
    283		ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1
    284	done
    285
    286	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
    287	devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
    288
    289	log_test "IPv6 error path - replay"
    290
    291	ip -n testns1 link del dev dummy1
    292
    293	# Successfully reload after deleting all the routes.
    294	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
    295	devlink -N testns1 dev reload $DEVLINK_DEV
    296}
    297
    298ipv6_error_path()
    299{
    300	# Test the different error paths of the notifiers by limiting the size
    301	# of the "IPv6/fib" resource.
    302	ipv6_error_path_add_single
    303	ipv6_error_path_add_multipath
    304	ipv6_error_path_replay
    305}
    306
    307fib_notify_on_flag_change_set()
    308{
    309	local notify=$1; shift
    310
    311	ip netns exec testns1 sysctl -qw net.ipv4.fib_notify_on_flag_change=$notify
    312	ip netns exec testns1 sysctl -qw net.ipv6.fib_notify_on_flag_change=$notify
    313
    314	log_info "Set fib_notify_on_flag_change to $notify"
    315}
    316
    317setup_prepare()
    318{
    319	local netdev
    320
    321	modprobe netdevsim &> /dev/null
    322
    323	echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device
    324	while [ ! -d $SYSFS_NET_DIR ] ; do :; done
    325
    326	ip netns add testns1
    327	if [ $? -ne 0 ]; then
    328		echo "Failed to add netns \"testns1\""
    329		exit 1
    330	fi
    331
    332	devlink dev reload $DEVLINK_DEV netns testns1
    333	if [ $? -ne 0 ]; then
    334		echo "Failed to reload into netns \"testns1\""
    335		exit 1
    336	fi
    337}
    338
    339cleanup()
    340{
    341	pre_cleanup
    342	ip netns del testns1
    343	echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device
    344	modprobe -r netdevsim &> /dev/null
    345}
    346
    347trap cleanup EXIT
    348
    349setup_prepare
    350
    351fib_notify_on_flag_change_set 1
    352tests_run
    353
    354fib_notify_on_flag_change_set 0
    355tests_run
    356
    357exit $EXIT_STATUS