1058 lines · 26.4 KB · Shell
RawDownload
#!/bin/bash# SPDX-License-Identifier: GPL-2.0## This test is for checking the nexthop offload API. It makes use of netdevsim# which registers a listener to the nexthop notification chain. lib_dir=$(dirname $0)/../../../net/forwarding ALL_TESTS="	nexthop_single_add_test	nexthop_single_add_err_test	nexthop_group_add_test	nexthop_group_add_err_test	nexthop_res_group_add_test	nexthop_res_group_add_err_test	nexthop_group_replace_test	nexthop_group_replace_err_test	nexthop_res_group_replace_test	nexthop_res_group_replace_err_test	nexthop_res_group_idle_timer_test	nexthop_res_group_idle_timer_del_test	nexthop_res_group_increase_idle_timer_test	nexthop_res_group_decrease_idle_timer_test	nexthop_res_group_unbalanced_timer_test	nexthop_res_group_unbalanced_timer_del_test	nexthop_res_group_no_unbalanced_timer_test	nexthop_res_group_short_unbalanced_timer_test	nexthop_res_group_increase_unbalanced_timer_test	nexthop_res_group_decrease_unbalanced_timer_test	nexthop_res_group_force_migrate_busy_test	nexthop_single_replace_test	nexthop_single_replace_err_test	nexthop_single_in_group_replace_test	nexthop_single_in_group_replace_err_test	nexthop_single_in_res_group_replace_test	nexthop_single_in_res_group_replace_err_test	nexthop_single_in_group_delete_test	nexthop_single_in_group_delete_err_test	nexthop_single_in_res_group_delete_test	nexthop_single_in_res_group_delete_err_test	nexthop_replay_test	nexthop_replay_err_test"NETDEVSIM_PATH=/sys/bus/netdevsim/DEV_ADDR=1337DEV=netdevsim${DEV_ADDR}SYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/DEBUGFS_NET_DIR=/sys/kernel/debug/netdevsim/$DEV/NUM_NETIFS=0source $lib_dir/lib.sh DEVLINK_DEV=source $lib_dir/devlink_lib.shDEVLINK_DEV=netdevsim/${DEV} nexthop_check(){	local nharg="$1"; shift	local expected="$1"; shift 	out=$($IP nexthop show ${nharg} | sed -e 's/ *$//')	if [[ "$out" != "$expected" ]]; then		return 1	fi 	return 0} nexthop_bucket_nhid_count_check(){	local group_id=$1; shift	local expected	local count	local nhid	local ret 	while (($# > 0)); do		nhid=$1; shift		expected=$1; shift 		count=$($IP nexthop bucket show id $group_id nhid $nhid |			grep "trap" | wc -l)		if ((expected != count)); then			return 1		fi	done 	return 0} nexthop_resource_check(){	local expected_occ=$1; shift 	occ=$($DEVLINK -jp resource show $DEVLINK_DEV \		| jq '.[][][] | select(.name=="nexthops") | .["occ"]') 	if [ $expected_occ -ne $occ ]; then		return 1	fi 	return 0} nexthop_resource_set(){	local size=$1; shift 	$DEVLINK resource set $DEVLINK_DEV path nexthops size $size	$DEVLINK dev reload $DEVLINK_DEV} nexthop_single_add_test(){	RET=0 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	nexthop_check "id 1" "id 1 via 192.0.2.2 dev dummy1 scope link trap"	check_err $? "Unexpected nexthop entry" 	nexthop_resource_check 1	check_err $? "Wrong nexthop occupancy" 	$IP nexthop del id 1	nexthop_resource_check 0	check_err $? "Wrong nexthop occupancy after delete" 	log_test "Single nexthop add and delete"} nexthop_single_add_err_test(){	RET=0 	nexthop_resource_set 1 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1 	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 &> /dev/null	check_fail $? "Nexthop addition succeeded when should fail" 	nexthop_resource_check 1	check_err $? "Wrong nexthop occupancy" 	log_test "Single nexthop add failure" 	$IP nexthop flush &> /dev/null	nexthop_resource_set 9999} nexthop_group_add_test(){	RET=0 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 	$IP nexthop add id 10 group 1/2	nexthop_check "id 10" "id 10 group 1/2 trap"	check_err $? "Unexpected nexthop group entry" 	nexthop_resource_check 4	check_err $? "Wrong nexthop occupancy" 	$IP nexthop del id 10	nexthop_resource_check 2	check_err $? "Wrong nexthop occupancy after delete" 	$IP nexthop add id 10 group 1,20/2,39	nexthop_check "id 10" "id 10 group 1,20/2,39 trap"	check_err $? "Unexpected weighted nexthop group entry" 	nexthop_resource_check 61	check_err $? "Wrong weighted nexthop occupancy" 	$IP nexthop del id 10	nexthop_resource_check 2	check_err $? "Wrong nexthop occupancy after delete" 	log_test "Nexthop group add and delete" 	$IP nexthop flush &> /dev/null} nexthop_group_add_err_test(){	RET=0 	nexthop_resource_set 2 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 	$IP nexthop add id 10 group 1/2 &> /dev/null	check_fail $? "Nexthop group addition succeeded when should fail" 	nexthop_resource_check 2	check_err $? "Wrong nexthop occupancy" 	log_test "Nexthop group add failure" 	$IP nexthop flush &> /dev/null	nexthop_resource_set 9999} nexthop_res_group_add_test(){	RET=0 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 	$IP nexthop add id 10 group 1/2 type resilient buckets 4	nexthop_check "id 10" "id 10 group 1/2 type resilient buckets 4 idle_timer 120 unbalanced_timer 0 unbalanced_time 0 trap"	check_err $? "Unexpected nexthop group entry" 	nexthop_bucket_nhid_count_check 10 1 2	check_err $? "Wrong nexthop buckets count"	nexthop_bucket_nhid_count_check 10 2 2	check_err $? "Wrong nexthop buckets count" 	nexthop_resource_check 6	check_err $? "Wrong nexthop occupancy" 	$IP nexthop del id 10	nexthop_resource_check 2	check_err $? "Wrong nexthop occupancy after delete" 	$IP nexthop add id 10 group 1,3/2,2 type resilient buckets 5	nexthop_check "id 10" "id 10 group 1,3/2,2 type resilient buckets 5 idle_timer 120 unbalanced_timer 0 unbalanced_time 0 trap"	check_err $? "Unexpected weighted nexthop group entry" 	nexthop_bucket_nhid_count_check 10 1 3	check_err $? "Wrong nexthop buckets count"	nexthop_bucket_nhid_count_check 10 2 2	check_err $? "Wrong nexthop buckets count" 	nexthop_resource_check 7	check_err $? "Wrong weighted nexthop occupancy" 	$IP nexthop del id 10	nexthop_resource_check 2	check_err $? "Wrong nexthop occupancy after delete" 	log_test "Resilient nexthop group add and delete" 	$IP nexthop flush &> /dev/null} nexthop_res_group_add_err_test(){	RET=0 	nexthop_resource_set 2 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 	$IP nexthop add id 10 group 1/2 type resilient buckets 4 &> /dev/null	check_fail $? "Nexthop group addition succeeded when should fail" 	nexthop_resource_check 2	check_err $? "Wrong nexthop occupancy" 	log_test "Resilient nexthop group add failure" 	$IP nexthop flush &> /dev/null	nexthop_resource_set 9999} nexthop_group_replace_test(){	RET=0 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1	$IP nexthop add id 3 via 192.0.2.4 dev dummy1	$IP nexthop add id 10 group 1/2 	$IP nexthop replace id 10 group 1/2/3	nexthop_check "id 10" "id 10 group 1/2/3 trap"	check_err $? "Unexpected nexthop group entry" 	nexthop_resource_check 6	check_err $? "Wrong nexthop occupancy" 	log_test "Nexthop group replace" 	$IP nexthop flush &> /dev/null} nexthop_group_replace_err_test(){	RET=0 	nexthop_resource_set 5 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1	$IP nexthop add id 3 via 192.0.2.4 dev dummy1	$IP nexthop add id 10 group 1/2 	$IP nexthop replace id 10 group 1/2/3 &> /dev/null	check_fail $? "Nexthop group replacement succeeded when should fail" 	nexthop_check "id 10" "id 10 group 1/2 trap"	check_err $? "Unexpected nexthop group entry after failure" 	nexthop_resource_check 5	check_err $? "Wrong nexthop occupancy after failure" 	log_test "Nexthop group replace failure" 	$IP nexthop flush &> /dev/null	nexthop_resource_set 9999} nexthop_res_group_replace_test(){	RET=0 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1	$IP nexthop add id 3 via 192.0.2.4 dev dummy1	$IP nexthop add id 10 group 1/2 type resilient buckets 6 	$IP nexthop replace id 10 group 1/2/3 type resilient	nexthop_check "id 10" "id 10 group 1/2/3 type resilient buckets 6 idle_timer 120 unbalanced_timer 0 unbalanced_time 0 trap"	check_err $? "Unexpected nexthop group entry" 	nexthop_bucket_nhid_count_check 10 1 2	check_err $? "Wrong nexthop buckets count"	nexthop_bucket_nhid_count_check 10 2 2	check_err $? "Wrong nexthop buckets count"	nexthop_bucket_nhid_count_check 10 3 2	check_err $? "Wrong nexthop buckets count" 	nexthop_resource_check 9	check_err $? "Wrong nexthop occupancy" 	log_test "Resilient nexthop group replace" 	$IP nexthop flush &> /dev/null} nexthop_res_group_replace_err_test(){	RET=0 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1	$IP nexthop add id 3 via 192.0.2.4 dev dummy1	$IP nexthop add id 10 group 1/2 type resilient buckets 6 	ip netns exec testns1 \		echo 1 > $DEBUGFS_NET_DIR/fib/fail_res_nexthop_group_replace	$IP nexthop replace id 10 group 1/2/3 type resilient &> /dev/null	check_fail $? "Nexthop group replacement succeeded when should fail" 	nexthop_check "id 10" "id 10 group 1/2 type resilient buckets 6 idle_timer 120 unbalanced_timer 0 unbalanced_time 0 trap"	check_err $? "Unexpected nexthop group entry after failure" 	nexthop_bucket_nhid_count_check 10 1 3	check_err $? "Wrong nexthop buckets count"	nexthop_bucket_nhid_count_check 10 2 3	check_err $? "Wrong nexthop buckets count" 	nexthop_resource_check 9	check_err $? "Wrong nexthop occupancy after failure" 	log_test "Resilient nexthop group replace failure" 	$IP nexthop flush &> /dev/null	ip netns exec testns1 \		echo 0 > $DEBUGFS_NET_DIR/fib/fail_res_nexthop_group_replace} nexthop_res_mark_buckets_busy(){	local group_id=$1; shift	local nhid=$1; shift	local count=$1; shift	local index 	for index in $($IP -j nexthop bucket show id $group_id nhid $nhid |		       jq '.[].bucket.index' | head -n ${count:--0})	do		echo $group_id $index \			> $DEBUGFS_NET_DIR/fib/nexthop_bucket_activity	done} nexthop_res_num_nhid_buckets(){	local group_id=$1; shift	local nhid=$1; shift 	$IP -j nexthop bucket show id $group_id nhid $nhid | jq length} nexthop_res_group_idle_timer_test(){	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 	RET=0 	$IP nexthop add id 10 group 1/2 type resilient buckets 8 idle_timer 4	nexthop_res_mark_buckets_busy 10 1	$IP nexthop replace id 10 group 1/2,3 type resilient 	nexthop_bucket_nhid_count_check 10  1 4  2 4	check_err $? "Group expected to be unbalanced" 	sleep 6 	nexthop_bucket_nhid_count_check 10  1 2  2 6	check_err $? "Group expected to be balanced" 	log_test "Bucket migration after idle timer" 	$IP nexthop flush &> /dev/null} nexthop_res_group_idle_timer_del_test(){	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1	$IP nexthop add id 3 via 192.0.2.3 dev dummy1 	RET=0 	$IP nexthop add id 10 group 1,50/2,50/3,1 \	    type resilient buckets 8 idle_timer 6	nexthop_res_mark_buckets_busy 10 1	$IP nexthop replace id 10 group 1,50/2,150/3,1 type resilient 	nexthop_bucket_nhid_count_check 10  1 4  2 4  3 0	check_err $? "Group expected to be unbalanced" 	sleep 4 	# Deletion prompts group replacement. Check that the bucket timers	# are kept.	$IP nexthop delete id 3 	nexthop_bucket_nhid_count_check 10  1 4  2 4	check_err $? "Group expected to still be unbalanced" 	sleep 4 	nexthop_bucket_nhid_count_check 10  1 2  2 6	check_err $? "Group expected to be balanced" 	log_test "Bucket migration after idle timer (with delete)" 	$IP nexthop flush &> /dev/null} __nexthop_res_group_increase_timer_test(){	local timer=$1; shift 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1 	RET=0 	$IP nexthop add id 10 group 1/2 type resilient buckets 8 $timer 4	nexthop_res_mark_buckets_busy 10 1	$IP nexthop replace id 10 group 1/2,3 type resilient 	nexthop_bucket_nhid_count_check 10 2 6	check_fail $? "Group expected to be unbalanced" 	sleep 2	$IP nexthop replace id 10 group 1/2,3 type resilient $timer 8	sleep 4 	# 6 seconds, past the original timer.	nexthop_bucket_nhid_count_check 10 2 6	check_fail $? "Group still expected to be unbalanced" 	sleep 4 	# 10 seconds, past the new timer.	nexthop_bucket_nhid_count_check 10 2 6	check_err $? "Group expected to be balanced" 	log_test "Bucket migration after $timer increase" 	$IP nexthop flush &> /dev/null} __nexthop_res_group_decrease_timer_test(){	local timer=$1; shift 	$IP nexthop add id 1 via 192.0.2.2 dev dummy1	$IP nexthop add id 2 via 192.0.2.3 dev dummy1

Lines 1–500 of 1058.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t