summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorIdo Schimmel <idosch@nvidia.com>2026-10-19 17:03:37 +0300
committerJakub Kicinski <kuba@kernel.org>2026-10-20 14:17:15 -0700
commitb5dc3fde8b92286a0cb06bf08e2ec0141cf867bb (patch)
tree5c561cede48cd2cb79ba1cb4816ba1206724a6a3 /tools
parent7c9cb1edaf8fd8e1af25e39741e603500986ef66 (diff)
selftests: netdevsim: Add FIB notification tests for nexthop objects
Add IPv4 and IPv6 test cases that program a route that uses a nexthop object and check that two notifications are emitted for it, with the second one carrying the RTM_F_TRAP flag. The new route_nexthop_check() helper follows the same pattern as the existing route_{addition,deletion,replacement}_check() helpers. Without "ipv6: Hold RCU when emitting route hardware flags notification", the IPv6 test case passes, but triggers suspicious RCU usage splats. The IPv4 test case is added for completeness. Signed-off-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Eric Dumazet <edumazet@kernel.org> Reviewed-by: David Ahern <dsahern@kernel.org> Link: https://patch.msgid.link/20261019140337.2886875-3-idosch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'tools')
-rwxr-xr-xtools/testing/selftests/drivers/net/netdevsim/fib_notifications.sh66
1 files changed, 66 insertions, 0 deletions
diff --git a/tools/testing/selftests/drivers/net/netdevsim/fib_notifications.sh b/tools/testing/selftests/drivers/net/netdevsim/fib_notifications.sh
index 9896580c3d85..c49d6deb621a 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/fib_notifications.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/fib_notifications.sh
@@ -8,10 +8,12 @@ ALL_TESTS="
ipv4_route_deletion_test
ipv4_route_replacement_test
ipv4_route_offload_failed_test
+ ipv4_route_nexthop_test
ipv6_route_addition_test
ipv6_route_deletion_test
ipv6_route_replacement_test
ipv6_route_offload_failed_test
+ ipv6_route_nexthop_test
"
NETDEVSIM_PATH=/sys/bus/netdevsim/
@@ -269,6 +271,50 @@ ipv4_route_offload_failed_test()
log_test "IPv4 route offload failed"
}
+route_nexthop_check()
+{
+ local ip=$1; shift
+ local route=$1; shift
+ local nhid=$1; shift
+ local expected_num_notifications=$1; shift
+ local outfile
+
+ ip netns exec testns1 sysctl -qw net.$ip.fib_notify_on_flag_change=1
+
+ outfile=$(mktemp)
+
+ $IP monitor route &> $outfile &
+ sleep 1
+ $IP route add $route nhid $nhid
+ sleep 1
+ kill_process %%
+
+ route_notify_check $outfile $expected_num_notifications
+ rm -f $outfile
+
+ $IP route del $route nhid $nhid
+}
+
+ipv4_route_nexthop_test()
+{
+ RET=0
+
+ local ip="ipv4"
+ local route=192.0.2.0/24
+ local nhid=1
+
+ $IP -4 nexthop add id $nhid dev dummy1
+
+ # Make sure two notifications will be emitted for a programmed route
+ # that uses a nexthop object.
+ local expected_num_notifications=2
+ route_nexthop_check $ip $route $nhid $expected_num_notifications
+
+ $IP nexthop del id $nhid
+
+ log_test "IPv4 route with nexthop object"
+}
+
ipv6_route_addition_test()
{
RET=0
@@ -385,6 +431,26 @@ ipv6_route_offload_failed_test()
log_test "IPv6 route offload failed"
}
+ipv6_route_nexthop_test()
+{
+ RET=0
+
+ local ip="ipv6"
+ local route=2001:db8:1::/64
+ local nhid=1
+
+ $IP -6 nexthop add id $nhid dev dummy1
+
+ # Make sure two notifications will be emitted for a programmed route
+ # that uses a nexthop object.
+ local expected_num_notifications=2
+ route_nexthop_check $ip $route $nhid $expected_num_notifications
+
+ $IP nexthop del id $nhid
+
+ log_test "IPv6 route with nexthop object"
+}
+
setup_prepare()
{
modprobe netdevsim &> /dev/null