162306a36Sopenharmony_ci#!/bin/bash
262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
362306a36Sopenharmony_ci#
462306a36Sopenharmony_ci# This test is for checking the FIB offload API. It makes use of netdevsim
562306a36Sopenharmony_ci# which registers a listener to the FIB notification chain.
662306a36Sopenharmony_ci
762306a36Sopenharmony_cilib_dir=$(dirname $0)/../../../net/forwarding
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciALL_TESTS="
1062306a36Sopenharmony_ci	ipv4_identical_routes
1162306a36Sopenharmony_ci	ipv4_tos
1262306a36Sopenharmony_ci	ipv4_metric
1362306a36Sopenharmony_ci	ipv4_replace
1462306a36Sopenharmony_ci	ipv4_delete
1562306a36Sopenharmony_ci	ipv4_plen
1662306a36Sopenharmony_ci	ipv4_replay
1762306a36Sopenharmony_ci	ipv4_flush
1862306a36Sopenharmony_ci	ipv4_error_path
1962306a36Sopenharmony_ci	ipv4_delete_fail
2062306a36Sopenharmony_ci	ipv6_add
2162306a36Sopenharmony_ci	ipv6_metric
2262306a36Sopenharmony_ci	ipv6_append_single
2362306a36Sopenharmony_ci	ipv6_replace_single
2462306a36Sopenharmony_ci	ipv6_metric_multipath
2562306a36Sopenharmony_ci	ipv6_append_multipath
2662306a36Sopenharmony_ci	ipv6_replace_multipath
2762306a36Sopenharmony_ci	ipv6_append_multipath_to_single
2862306a36Sopenharmony_ci	ipv6_delete_single
2962306a36Sopenharmony_ci	ipv6_delete_multipath
3062306a36Sopenharmony_ci	ipv6_replay_single
3162306a36Sopenharmony_ci	ipv6_replay_multipath
3262306a36Sopenharmony_ci	ipv6_error_path
3362306a36Sopenharmony_ci	ipv6_delete_fail
3462306a36Sopenharmony_ci"
3562306a36Sopenharmony_ciNETDEVSIM_PATH=/sys/bus/netdevsim/
3662306a36Sopenharmony_ciDEV_ADDR=1337
3762306a36Sopenharmony_ciDEV=netdevsim${DEV_ADDR}
3862306a36Sopenharmony_ciSYSFS_NET_DIR=/sys/bus/netdevsim/devices/$DEV/net/
3962306a36Sopenharmony_ciDEBUGFS_DIR=/sys/kernel/debug/netdevsim/$DEV/
4062306a36Sopenharmony_ciNUM_NETIFS=0
4162306a36Sopenharmony_cisource $lib_dir/lib.sh
4262306a36Sopenharmony_cisource $lib_dir/fib_offload_lib.sh
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciDEVLINK_DEV=
4562306a36Sopenharmony_cisource $lib_dir/devlink_lib.sh
4662306a36Sopenharmony_ciDEVLINK_DEV=netdevsim/${DEV}
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ciipv4_identical_routes()
4962306a36Sopenharmony_ci{
5062306a36Sopenharmony_ci	fib_ipv4_identical_routes_test "testns1"
5162306a36Sopenharmony_ci}
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ciipv4_tos()
5462306a36Sopenharmony_ci{
5562306a36Sopenharmony_ci	fib_ipv4_tos_test "testns1"
5662306a36Sopenharmony_ci}
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciipv4_metric()
5962306a36Sopenharmony_ci{
6062306a36Sopenharmony_ci	fib_ipv4_metric_test "testns1"
6162306a36Sopenharmony_ci}
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciipv4_replace()
6462306a36Sopenharmony_ci{
6562306a36Sopenharmony_ci	fib_ipv4_replace_test "testns1"
6662306a36Sopenharmony_ci}
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciipv4_delete()
6962306a36Sopenharmony_ci{
7062306a36Sopenharmony_ci	fib_ipv4_delete_test "testns1"
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ciipv4_plen()
7462306a36Sopenharmony_ci{
7562306a36Sopenharmony_ci	fib_ipv4_plen_test "testns1"
7662306a36Sopenharmony_ci}
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ciipv4_replay_metric()
7962306a36Sopenharmony_ci{
8062306a36Sopenharmony_ci	fib_ipv4_replay_metric_test "testns1" "$DEVLINK_DEV"
8162306a36Sopenharmony_ci}
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciipv4_replay_tos()
8462306a36Sopenharmony_ci{
8562306a36Sopenharmony_ci	fib_ipv4_replay_tos_test "testns1" "$DEVLINK_DEV"
8662306a36Sopenharmony_ci}
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciipv4_replay_plen()
8962306a36Sopenharmony_ci{
9062306a36Sopenharmony_ci	fib_ipv4_replay_plen_test "testns1" "$DEVLINK_DEV"
9162306a36Sopenharmony_ci}
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_ciipv4_replay()
9462306a36Sopenharmony_ci{
9562306a36Sopenharmony_ci	ipv4_replay_metric
9662306a36Sopenharmony_ci	ipv4_replay_tos
9762306a36Sopenharmony_ci	ipv4_replay_plen
9862306a36Sopenharmony_ci}
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciipv4_flush()
10162306a36Sopenharmony_ci{
10262306a36Sopenharmony_ci	fib_ipv4_flush_test "testns1"
10362306a36Sopenharmony_ci}
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ciipv4_error_path_add()
10662306a36Sopenharmony_ci{
10762306a36Sopenharmony_ci	local lsb
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci	RET=0
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci	ip -n testns1 link add name dummy1 type dummy
11262306a36Sopenharmony_ci	ip -n testns1 link set dev dummy1 up
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
11562306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci	for lsb in $(seq 1 20); do
11862306a36Sopenharmony_ci		ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1 \
11962306a36Sopenharmony_ci			&> /dev/null
12062306a36Sopenharmony_ci	done
12162306a36Sopenharmony_ci
12262306a36Sopenharmony_ci	log_test "IPv4 error path - add"
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci	ip -n testns1 link del dev dummy1
12562306a36Sopenharmony_ci}
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ciipv4_error_path_replay()
12862306a36Sopenharmony_ci{
12962306a36Sopenharmony_ci	local lsb
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci	RET=0
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci	ip -n testns1 link add name dummy1 type dummy
13462306a36Sopenharmony_ci	ip -n testns1 link set dev dummy1 up
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
13762306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci	for lsb in $(seq 1 20); do
14062306a36Sopenharmony_ci		ip -n testns1 route add 192.0.2.${lsb}/32 dev dummy1
14162306a36Sopenharmony_ci	done
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 10
14462306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci	log_test "IPv4 error path - replay"
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ci	ip -n testns1 link del dev dummy1
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci	# Successfully reload after deleting all the routes.
15162306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv4/fib size 100
15262306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
15362306a36Sopenharmony_ci}
15462306a36Sopenharmony_ci
15562306a36Sopenharmony_ciipv4_error_path()
15662306a36Sopenharmony_ci{
15762306a36Sopenharmony_ci	# Test the different error paths of the notifiers by limiting the size
15862306a36Sopenharmony_ci	# of the "IPv4/fib" resource.
15962306a36Sopenharmony_ci	ipv4_error_path_add
16062306a36Sopenharmony_ci	ipv4_error_path_replay
16162306a36Sopenharmony_ci}
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ciipv4_delete_fail()
16462306a36Sopenharmony_ci{
16562306a36Sopenharmony_ci	RET=0
16662306a36Sopenharmony_ci
16762306a36Sopenharmony_ci	echo "y" > $DEBUGFS_DIR/fib/fail_route_delete
16862306a36Sopenharmony_ci
16962306a36Sopenharmony_ci	ip -n testns1 link add name dummy1 type dummy
17062306a36Sopenharmony_ci	ip -n testns1 link set dev dummy1 up
17162306a36Sopenharmony_ci
17262306a36Sopenharmony_ci	ip -n testns1 route add 192.0.2.0/24 dev dummy1
17362306a36Sopenharmony_ci	ip -n testns1 route del 192.0.2.0/24 dev dummy1 &> /dev/null
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_ci	# We should not be able to delete the netdev if we are leaking a
17662306a36Sopenharmony_ci	# reference.
17762306a36Sopenharmony_ci	ip -n testns1 link del dev dummy1
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci	log_test "IPv4 route delete failure"
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci	echo "n" > $DEBUGFS_DIR/fib/fail_route_delete
18262306a36Sopenharmony_ci}
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ciipv6_add()
18562306a36Sopenharmony_ci{
18662306a36Sopenharmony_ci	fib_ipv6_add_test "testns1"
18762306a36Sopenharmony_ci}
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ciipv6_metric()
19062306a36Sopenharmony_ci{
19162306a36Sopenharmony_ci	fib_ipv6_metric_test "testns1"
19262306a36Sopenharmony_ci}
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ciipv6_append_single()
19562306a36Sopenharmony_ci{
19662306a36Sopenharmony_ci	fib_ipv6_append_single_test "testns1"
19762306a36Sopenharmony_ci}
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ciipv6_replace_single()
20062306a36Sopenharmony_ci{
20162306a36Sopenharmony_ci	fib_ipv6_replace_single_test "testns1"
20262306a36Sopenharmony_ci}
20362306a36Sopenharmony_ci
20462306a36Sopenharmony_ciipv6_metric_multipath()
20562306a36Sopenharmony_ci{
20662306a36Sopenharmony_ci	fib_ipv6_metric_multipath_test "testns1"
20762306a36Sopenharmony_ci}
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ciipv6_append_multipath()
21062306a36Sopenharmony_ci{
21162306a36Sopenharmony_ci	fib_ipv6_append_multipath_test "testns1"
21262306a36Sopenharmony_ci}
21362306a36Sopenharmony_ci
21462306a36Sopenharmony_ciipv6_replace_multipath()
21562306a36Sopenharmony_ci{
21662306a36Sopenharmony_ci	fib_ipv6_replace_multipath_test "testns1"
21762306a36Sopenharmony_ci}
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ciipv6_append_multipath_to_single()
22062306a36Sopenharmony_ci{
22162306a36Sopenharmony_ci	fib_ipv6_append_multipath_to_single_test "testns1"
22262306a36Sopenharmony_ci}
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ciipv6_delete_single()
22562306a36Sopenharmony_ci{
22662306a36Sopenharmony_ci	fib_ipv6_delete_single_test "testns1"
22762306a36Sopenharmony_ci}
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_ciipv6_delete_multipath()
23062306a36Sopenharmony_ci{
23162306a36Sopenharmony_ci	fib_ipv6_delete_multipath_test "testns1"
23262306a36Sopenharmony_ci}
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_ciipv6_replay_single()
23562306a36Sopenharmony_ci{
23662306a36Sopenharmony_ci	fib_ipv6_replay_single_test "testns1" "$DEVLINK_DEV"
23762306a36Sopenharmony_ci}
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ciipv6_replay_multipath()
24062306a36Sopenharmony_ci{
24162306a36Sopenharmony_ci	fib_ipv6_replay_multipath_test "testns1" "$DEVLINK_DEV"
24262306a36Sopenharmony_ci}
24362306a36Sopenharmony_ci
24462306a36Sopenharmony_ciipv6_error_path_add_single()
24562306a36Sopenharmony_ci{
24662306a36Sopenharmony_ci	local lsb
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ci	RET=0
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_ci	ip -n testns1 link add name dummy1 type dummy
25162306a36Sopenharmony_ci	ip -n testns1 link set dev dummy1 up
25262306a36Sopenharmony_ci
25362306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
25462306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
25562306a36Sopenharmony_ci
25662306a36Sopenharmony_ci	for lsb in $(seq 1 20); do
25762306a36Sopenharmony_ci		ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1 \
25862306a36Sopenharmony_ci			&> /dev/null
25962306a36Sopenharmony_ci	done
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_ci	log_test "IPv6 error path - add single"
26262306a36Sopenharmony_ci
26362306a36Sopenharmony_ci	ip -n testns1 link del dev dummy1
26462306a36Sopenharmony_ci}
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ciipv6_error_path_add_multipath()
26762306a36Sopenharmony_ci{
26862306a36Sopenharmony_ci	local lsb
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ci	RET=0
27162306a36Sopenharmony_ci
27262306a36Sopenharmony_ci	for i in $(seq 1 2); do
27362306a36Sopenharmony_ci		ip -n testns1 link add name dummy$i type dummy
27462306a36Sopenharmony_ci		ip -n testns1 link set dev dummy$i up
27562306a36Sopenharmony_ci		ip -n testns1 address add 2001:db8:$i::1/64 dev dummy$i
27662306a36Sopenharmony_ci	done
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
27962306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_ci	for lsb in $(seq 1 20); do
28262306a36Sopenharmony_ci		ip -n testns1 route add 2001:db8:10::${lsb}/128 \
28362306a36Sopenharmony_ci			nexthop via 2001:db8:1::2 dev dummy1 \
28462306a36Sopenharmony_ci			nexthop via 2001:db8:2::2 dev dummy2 &> /dev/null
28562306a36Sopenharmony_ci	done
28662306a36Sopenharmony_ci
28762306a36Sopenharmony_ci	log_test "IPv6 error path - add multipath"
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci	for i in $(seq 1 2); do
29062306a36Sopenharmony_ci		ip -n testns1 link del dev dummy$i
29162306a36Sopenharmony_ci	done
29262306a36Sopenharmony_ci}
29362306a36Sopenharmony_ci
29462306a36Sopenharmony_ciipv6_error_path_replay()
29562306a36Sopenharmony_ci{
29662306a36Sopenharmony_ci	local lsb
29762306a36Sopenharmony_ci
29862306a36Sopenharmony_ci	RET=0
29962306a36Sopenharmony_ci
30062306a36Sopenharmony_ci	ip -n testns1 link add name dummy1 type dummy
30162306a36Sopenharmony_ci	ip -n testns1 link set dev dummy1 up
30262306a36Sopenharmony_ci
30362306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
30462306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci	for lsb in $(seq 1 20); do
30762306a36Sopenharmony_ci		ip -n testns1 route add 2001:db8:1::${lsb}/128 dev dummy1
30862306a36Sopenharmony_ci	done
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 10
31162306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV &> /dev/null
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci	log_test "IPv6 error path - replay"
31462306a36Sopenharmony_ci
31562306a36Sopenharmony_ci	ip -n testns1 link del dev dummy1
31662306a36Sopenharmony_ci
31762306a36Sopenharmony_ci	# Successfully reload after deleting all the routes.
31862306a36Sopenharmony_ci	devlink -N testns1 resource set $DEVLINK_DEV path IPv6/fib size 100
31962306a36Sopenharmony_ci	devlink -N testns1 dev reload $DEVLINK_DEV
32062306a36Sopenharmony_ci}
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ciipv6_error_path()
32362306a36Sopenharmony_ci{
32462306a36Sopenharmony_ci	# Test the different error paths of the notifiers by limiting the size
32562306a36Sopenharmony_ci	# of the "IPv6/fib" resource.
32662306a36Sopenharmony_ci	ipv6_error_path_add_single
32762306a36Sopenharmony_ci	ipv6_error_path_add_multipath
32862306a36Sopenharmony_ci	ipv6_error_path_replay
32962306a36Sopenharmony_ci}
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ciipv6_delete_fail()
33262306a36Sopenharmony_ci{
33362306a36Sopenharmony_ci	RET=0
33462306a36Sopenharmony_ci
33562306a36Sopenharmony_ci	echo "y" > $DEBUGFS_DIR/fib/fail_route_delete
33662306a36Sopenharmony_ci
33762306a36Sopenharmony_ci	ip -n testns1 link add name dummy1 type dummy
33862306a36Sopenharmony_ci	ip -n testns1 link set dev dummy1 up
33962306a36Sopenharmony_ci
34062306a36Sopenharmony_ci	ip -n testns1 route add 2001:db8:1::/64 dev dummy1
34162306a36Sopenharmony_ci	ip -n testns1 route del 2001:db8:1::/64 dev dummy1 &> /dev/null
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci	# We should not be able to delete the netdev if we are leaking a
34462306a36Sopenharmony_ci	# reference.
34562306a36Sopenharmony_ci	ip -n testns1 link del dev dummy1
34662306a36Sopenharmony_ci
34762306a36Sopenharmony_ci	log_test "IPv6 route delete failure"
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ci	echo "n" > $DEBUGFS_DIR/fib/fail_route_delete
35062306a36Sopenharmony_ci}
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cifib_notify_on_flag_change_set()
35362306a36Sopenharmony_ci{
35462306a36Sopenharmony_ci	local notify=$1; shift
35562306a36Sopenharmony_ci
35662306a36Sopenharmony_ci	ip netns exec testns1 sysctl -qw net.ipv4.fib_notify_on_flag_change=$notify
35762306a36Sopenharmony_ci	ip netns exec testns1 sysctl -qw net.ipv6.fib_notify_on_flag_change=$notify
35862306a36Sopenharmony_ci
35962306a36Sopenharmony_ci	log_info "Set fib_notify_on_flag_change to $notify"
36062306a36Sopenharmony_ci}
36162306a36Sopenharmony_ci
36262306a36Sopenharmony_cisetup_prepare()
36362306a36Sopenharmony_ci{
36462306a36Sopenharmony_ci	local netdev
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci	modprobe netdevsim &> /dev/null
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_ci	echo "$DEV_ADDR 1" > ${NETDEVSIM_PATH}/new_device
36962306a36Sopenharmony_ci	while [ ! -d $SYSFS_NET_DIR ] ; do :; done
37062306a36Sopenharmony_ci
37162306a36Sopenharmony_ci	ip netns add testns1
37262306a36Sopenharmony_ci	if [ $? -ne 0 ]; then
37362306a36Sopenharmony_ci		echo "Failed to add netns \"testns1\""
37462306a36Sopenharmony_ci		exit 1
37562306a36Sopenharmony_ci	fi
37662306a36Sopenharmony_ci
37762306a36Sopenharmony_ci	devlink dev reload $DEVLINK_DEV netns testns1
37862306a36Sopenharmony_ci	if [ $? -ne 0 ]; then
37962306a36Sopenharmony_ci		echo "Failed to reload into netns \"testns1\""
38062306a36Sopenharmony_ci		exit 1
38162306a36Sopenharmony_ci	fi
38262306a36Sopenharmony_ci}
38362306a36Sopenharmony_ci
38462306a36Sopenharmony_cicleanup()
38562306a36Sopenharmony_ci{
38662306a36Sopenharmony_ci	pre_cleanup
38762306a36Sopenharmony_ci	ip netns del testns1
38862306a36Sopenharmony_ci	echo "$DEV_ADDR" > ${NETDEVSIM_PATH}/del_device
38962306a36Sopenharmony_ci	modprobe -r netdevsim &> /dev/null
39062306a36Sopenharmony_ci}
39162306a36Sopenharmony_ci
39262306a36Sopenharmony_citrap cleanup EXIT
39362306a36Sopenharmony_ci
39462306a36Sopenharmony_cisetup_prepare
39562306a36Sopenharmony_ci
39662306a36Sopenharmony_cifib_notify_on_flag_change_set 1
39762306a36Sopenharmony_citests_run
39862306a36Sopenharmony_ci
39962306a36Sopenharmony_cifib_notify_on_flag_change_set 0
40062306a36Sopenharmony_citests_run
40162306a36Sopenharmony_ci
40262306a36Sopenharmony_ciexit $EXIT_STATUS
403