Message ID | 20220331154615.108214-3-razor@blackwall.org (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: ipv4: fix nexthop route delete warning | expand |
On 3/31/22 9:46 AM, Nikolay Aleksandrov wrote: > Add a test which causes a WARNING on kernels which treat a > nexthop route like a normal route when comparing for deletion and a > device is specified. That is, a route is found but we hit a warning while > matching it. The warning is from fib_info_nh() in include/net/nexthop.h > because we run it on a fib_info with nexthop object. The call chain is: > inet_rtm_delroute -> fib_table_delete -> fib_nh_match (called with a > nexthop fib_info and also with fc_oif set thus calling fib_info_nh on > the fib_info and triggering the warning). > > Repro steps: > $ ip nexthop add id 12 via 172.16.1.3 dev veth1 > $ ip route add 172.16.101.1/32 nhid 12 > $ ip route delete 172.16.101.1/32 dev veth1 > > Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org> > --- > tools/testing/selftests/net/fib_nexthops.sh | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh > index d444ee6aa3cb..371e3e0c91b7 100755 > --- a/tools/testing/selftests/net/fib_nexthops.sh > +++ b/tools/testing/selftests/net/fib_nexthops.sh > @@ -1208,6 +1208,19 @@ ipv4_fcnal() > set +e > check_nexthop "dev veth1" "" > log_test $? 0 "Nexthops removed on admin down" > + > + # nexthop route delete warning > + run_cmd "$IP li set dev veth1 up" > + run_cmd "$IP nexthop add id 12 via 172.16.1.3 dev veth1" > + out1=`dmesg | grep "WARNING:.*fib_nh_match.*" | wc -l` > + run_cmd "$IP route add 172.16.101.1/32 nhid 12" > + run_cmd "$IP route delete 172.16.101.1/32 dev veth1" > + out2=`dmesg | grep "WARNING:.*fib_nh_match.*" | wc -l` > + [ $out1 -eq $out2 ] > + rc=$? > + log_test $rc 0 "Delete nexthop route warning" > + run_cmd "$IP ip route delete 172.16.101.1/32 nhid 12" > + run_cmd "$IP ip nexthop del id 12" > } > > ipv4_grp_fcnal() Reviewed-by: David Ahern <dsahern@kernel.org>
diff --git a/tools/testing/selftests/net/fib_nexthops.sh b/tools/testing/selftests/net/fib_nexthops.sh index d444ee6aa3cb..371e3e0c91b7 100755 --- a/tools/testing/selftests/net/fib_nexthops.sh +++ b/tools/testing/selftests/net/fib_nexthops.sh @@ -1208,6 +1208,19 @@ ipv4_fcnal() set +e check_nexthop "dev veth1" "" log_test $? 0 "Nexthops removed on admin down" + + # nexthop route delete warning + run_cmd "$IP li set dev veth1 up" + run_cmd "$IP nexthop add id 12 via 172.16.1.3 dev veth1" + out1=`dmesg | grep "WARNING:.*fib_nh_match.*" | wc -l` + run_cmd "$IP route add 172.16.101.1/32 nhid 12" + run_cmd "$IP route delete 172.16.101.1/32 dev veth1" + out2=`dmesg | grep "WARNING:.*fib_nh_match.*" | wc -l` + [ $out1 -eq $out2 ] + rc=$? + log_test $rc 0 "Delete nexthop route warning" + run_cmd "$IP ip route delete 172.16.101.1/32 nhid 12" + run_cmd "$IP ip nexthop del id 12" } ipv4_grp_fcnal()
Add a test which causes a WARNING on kernels which treat a nexthop route like a normal route when comparing for deletion and a device is specified. That is, a route is found but we hit a warning while matching it. The warning is from fib_info_nh() in include/net/nexthop.h because we run it on a fib_info with nexthop object. The call chain is: inet_rtm_delroute -> fib_table_delete -> fib_nh_match (called with a nexthop fib_info and also with fc_oif set thus calling fib_info_nh on the fib_info and triggering the warning). Repro steps: $ ip nexthop add id 12 via 172.16.1.3 dev veth1 $ ip route add 172.16.101.1/32 nhid 12 $ ip route delete 172.16.101.1/32 dev veth1 Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org> --- tools/testing/selftests/net/fib_nexthops.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+)