mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
selftests: fib_tests: Add test cases for route lookup with oif
Test that both address families respect the oif parameter when a
matching multipath route is found, regardless of the presence of a
source address.
Output without "ipv6: Select best matching nexthop object in
fib6_table_lookup()" and "ipv6: Honor oif when choosing nexthop for
locally generated traffic":
# ./fib_tests.sh -t "ipv4_mpath_oif ipv4_mpath_oif_nh ipv4_mpath_oif_vrf ipv6_mpath_oif ipv6_mpath_oif_nh ipv6_mpath_oif_vrf"
IPv4 multipath oif test
TEST: IPv4 multipath via first nexthop [ OK ]
TEST: IPv4 multipath via second nexthop [ OK ]
TEST: IPv4 multipath via first nexthop with source address [ OK ]
TEST: IPv4 multipath via second nexthop with source address [ OK ]
IPv4 multipath oif with nexthop object test
TEST: IPv4 multipath via first nexthop [ OK ]
TEST: IPv4 multipath via second nexthop [ OK ]
TEST: IPv4 multipath via first nexthop with source address [ OK ]
TEST: IPv4 multipath via second nexthop with source address [ OK ]
IPv4 multipath oif with VRF test
TEST: IPv4 multipath via first nexthop [ OK ]
TEST: IPv4 multipath via second nexthop [ OK ]
TEST: IPv4 multipath via first nexthop with source address [ OK ]
TEST: IPv4 multipath via second nexthop with source address [ OK ]
IPv6 multipath oif test
TEST: IPv6 multipath via first nexthop [ OK ]
TEST: IPv6 multipath via second nexthop [ OK ]
TEST: IPv6 multipath via first nexthop with source address [FAIL]
TEST: IPv6 multipath via second nexthop with source address [FAIL]
IPv6 multipath oif with nexthop object test
TEST: IPv6 multipath via first nexthop [FAIL]
TEST: IPv6 multipath via second nexthop [FAIL]
TEST: IPv6 multipath via first nexthop with source address [FAIL]
TEST: IPv6 multipath via second nexthop with source address [FAIL]
IPv6 multipath oif with VRF test
TEST: IPv6 multipath via first nexthop [ OK ]
TEST: IPv6 multipath via second nexthop [ OK ]
TEST: IPv6 multipath via first nexthop with source address [FAIL]
TEST: IPv6 multipath via second nexthop with source address [FAIL]
Tests passed: 16
Tests failed: 8
Output with the patches:
# ./fib_tests.sh -t "ipv4_mpath_oif ipv4_mpath_oif_nh ipv4_mpath_oif_vrf ipv6_mpath_oif ipv6_mpath_oif_nh ipv6_mpath_oif_vrf"
IPv4 multipath oif test
TEST: IPv4 multipath via first nexthop [ OK ]
TEST: IPv4 multipath via second nexthop [ OK ]
TEST: IPv4 multipath via first nexthop with source address [ OK ]
TEST: IPv4 multipath via second nexthop with source address [ OK ]
IPv4 multipath oif with nexthop object test
TEST: IPv4 multipath via first nexthop [ OK ]
TEST: IPv4 multipath via second nexthop [ OK ]
TEST: IPv4 multipath via first nexthop with source address [ OK ]
TEST: IPv4 multipath via second nexthop with source address [ OK ]
IPv4 multipath oif with VRF test
TEST: IPv4 multipath via first nexthop [ OK ]
TEST: IPv4 multipath via second nexthop [ OK ]
TEST: IPv4 multipath via first nexthop with source address [ OK ]
TEST: IPv4 multipath via second nexthop with source address [ OK ]
IPv6 multipath oif test
TEST: IPv6 multipath via first nexthop [ OK ]
TEST: IPv6 multipath via second nexthop [ OK ]
TEST: IPv6 multipath via first nexthop with source address [ OK ]
TEST: IPv6 multipath via second nexthop with source address [ OK ]
IPv6 multipath oif with nexthop object test
TEST: IPv6 multipath via first nexthop [ OK ]
TEST: IPv6 multipath via second nexthop [ OK ]
TEST: IPv6 multipath via first nexthop with source address [ OK ]
TEST: IPv6 multipath via second nexthop with source address [ OK ]
IPv6 multipath oif with VRF test
TEST: IPv6 multipath via first nexthop [ OK ]
TEST: IPv6 multipath via second nexthop [ OK ]
TEST: IPv6 multipath via first nexthop with source address [ OK ]
TEST: IPv6 multipath via second nexthop with source address [ OK ]
Tests passed: 24
Tests failed: 0
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20260611154605.992528-4-idosch@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
d25e7e9d8a
commit
707c1f866c
|
|
@ -12,7 +12,9 @@ TESTS="unregister down carrier nexthop suppress ipv6_notify ipv4_notify \
|
|||
ipv4_route_metrics ipv4_route_v6_gw rp_filter ipv4_del_addr \
|
||||
ipv6_del_addr ipv4_mangle ipv6_mangle ipv4_bcast_neigh fib6_gc_test \
|
||||
ipv4_mpath_list ipv6_mpath_list ipv4_mpath_balance ipv6_mpath_balance \
|
||||
ipv4_mpath_balance_preferred fib6_ra_to_static fib6_temp_addr_renewal"
|
||||
ipv4_mpath_balance_preferred ipv4_mpath_oif ipv4_mpath_oif_nh \
|
||||
ipv4_mpath_oif_vrf ipv6_mpath_oif ipv6_mpath_oif_nh ipv6_mpath_oif_vrf \
|
||||
fib6_ra_to_static fib6_temp_addr_renewal"
|
||||
|
||||
VERBOSE=0
|
||||
PAUSE_ON_FAIL=no
|
||||
|
|
@ -2971,6 +2973,247 @@ ipv6_mpath_balance_test()
|
|||
forwarding_cleanup
|
||||
}
|
||||
|
||||
ipv4_mpath_oif_test_common()
|
||||
{
|
||||
local get_param=$1; shift
|
||||
local expected_oif=$1; shift
|
||||
local test_name=$1; shift
|
||||
local tmp_file
|
||||
|
||||
tmp_file=$(mktemp)
|
||||
|
||||
for i in {1..100}; do
|
||||
$IP route get 203.0.113.${i} $get_param >> "$tmp_file"
|
||||
done
|
||||
|
||||
[[ $(grep "$expected_oif" "$tmp_file" | wc -l) -eq 100 ]]
|
||||
log_test $? 0 "$test_name"
|
||||
|
||||
rm "$tmp_file"
|
||||
}
|
||||
|
||||
ipv4_mpath_oif_test()
|
||||
{
|
||||
echo
|
||||
echo "IPv4 multipath oif test"
|
||||
|
||||
setup
|
||||
|
||||
set -e
|
||||
$IP link add dummy1 up type dummy
|
||||
$IP address add 192.0.2.1/28 dev dummy1
|
||||
$IP address add 192.0.2.17/32 dev lo
|
||||
|
||||
$IP route add 203.0.113.0/24 \
|
||||
nexthop via 198.51.100.2 dev dummy0 \
|
||||
nexthop via 192.0.2.2 dev dummy1
|
||||
set +e
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy0" "dummy0" \
|
||||
"IPv4 multipath via first nexthop"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy1" "dummy1" \
|
||||
"IPv4 multipath via second nexthop"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy0 from 192.0.2.17" "dummy0" \
|
||||
"IPv4 multipath via first nexthop with source address"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy1 from 192.0.2.17" "dummy1" \
|
||||
"IPv4 multipath via second nexthop with source address"
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
ipv4_mpath_oif_nh_test()
|
||||
{
|
||||
echo
|
||||
echo "IPv4 multipath oif with nexthop object test"
|
||||
|
||||
setup
|
||||
|
||||
set -e
|
||||
$IP link add dummy1 up type dummy
|
||||
$IP address add 192.0.2.1/28 dev dummy1
|
||||
$IP address add 192.0.2.17/32 dev lo
|
||||
|
||||
$IP nexthop add id 1 via 198.51.100.2 dev dummy0
|
||||
$IP nexthop add id 2 via 192.0.2.2 dev dummy1
|
||||
$IP nexthop add id 3 group 1/2
|
||||
$IP route add 203.0.113.0/24 nhid 3
|
||||
set +e
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy0" "dummy0" \
|
||||
"IPv4 multipath via first nexthop"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy1" "dummy1" \
|
||||
"IPv4 multipath via second nexthop"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy0 from 192.0.2.17" "dummy0" \
|
||||
"IPv4 multipath via first nexthop with source address"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy1 from 192.0.2.17" "dummy1" \
|
||||
"IPv4 multipath via second nexthop with source address"
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
ipv4_mpath_oif_vrf_test()
|
||||
{
|
||||
echo
|
||||
echo "IPv4 multipath oif with VRF test"
|
||||
|
||||
setup
|
||||
|
||||
set -e
|
||||
$IP -4 rule add pref 32765 table local
|
||||
$IP -4 rule del pref 0
|
||||
$IP link add name vrf-123 up type vrf table 123
|
||||
$IP link set dev dummy0 master vrf-123
|
||||
$IP link add dummy1 up master vrf-123 type dummy
|
||||
$IP address add 192.0.2.1/28 dev dummy1
|
||||
$IP address add 192.0.2.17/32 dev vrf-123
|
||||
|
||||
$IP route add 203.0.113.0/24 vrf vrf-123 \
|
||||
nexthop via 198.51.100.2 dev dummy0 \
|
||||
nexthop via 192.0.2.2 dev dummy1
|
||||
set +e
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy0" "dummy0" \
|
||||
"IPv4 multipath via first nexthop"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy1" "dummy1" \
|
||||
"IPv4 multipath via second nexthop"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy0 from 192.0.2.17" "dummy0" \
|
||||
"IPv4 multipath via first nexthop with source address"
|
||||
|
||||
ipv4_mpath_oif_test_common "oif dummy1 from 192.0.2.17" "dummy1" \
|
||||
"IPv4 multipath via second nexthop with source address"
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
ipv6_mpath_oif_test_common()
|
||||
{
|
||||
local get_param=$1; shift
|
||||
local expected_oif=$1; shift
|
||||
local test_name=$1; shift
|
||||
local tmp_file
|
||||
|
||||
tmp_file=$(mktemp)
|
||||
|
||||
for i in {1..100}; do
|
||||
$IP route get 2001:db8:10::${i} $get_param >> "$tmp_file"
|
||||
done
|
||||
|
||||
[[ $(grep "$expected_oif" "$tmp_file" | wc -l) -eq 100 ]]
|
||||
log_test $? 0 "$test_name"
|
||||
|
||||
rm "$tmp_file"
|
||||
}
|
||||
|
||||
ipv6_mpath_oif_test()
|
||||
{
|
||||
echo
|
||||
echo "IPv6 multipath oif test"
|
||||
|
||||
setup
|
||||
|
||||
set -e
|
||||
$IP link add dummy1 up type dummy
|
||||
$IP address add 2001:db8:2::1/64 dev dummy1
|
||||
$IP address add 2001:db8:100::1/128 dev lo
|
||||
|
||||
$IP route add 2001:db8:10::/64 \
|
||||
nexthop via 2001:db8:1::2 dev dummy0 \
|
||||
nexthop via 2001:db8:2::2 dev dummy1
|
||||
set +e
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy0" "dummy0" \
|
||||
"IPv6 multipath via first nexthop"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy1" "dummy1" \
|
||||
"IPv6 multipath via second nexthop"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy0 from 2001:db8:100::1" "dummy0" \
|
||||
"IPv6 multipath via first nexthop with source address"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy1 from 2001:db8:100::1" "dummy1" \
|
||||
"IPv6 multipath via second nexthop with source address"
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
ipv6_mpath_oif_nh_test()
|
||||
{
|
||||
echo
|
||||
echo "IPv6 multipath oif with nexthop object test"
|
||||
|
||||
setup
|
||||
|
||||
set -e
|
||||
$IP link add dummy1 up type dummy
|
||||
$IP address add 2001:db8:2::1/64 dev dummy1
|
||||
$IP address add 2001:db8:100::1/128 dev lo
|
||||
|
||||
$IP nexthop add id 1 via 2001:db8:1::2 dev dummy0
|
||||
$IP nexthop add id 2 via 2001:db8:2::2 dev dummy1
|
||||
$IP nexthop add id 3 group 1/2
|
||||
$IP route add 2001:db8:10::/64 nhid 3
|
||||
set +e
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy0" "dummy0" \
|
||||
"IPv6 multipath via first nexthop"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy1" "dummy1" \
|
||||
"IPv6 multipath via second nexthop"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy0 from 2001:db8:100::1" "dummy0" \
|
||||
"IPv6 multipath via first nexthop with source address"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy1 from 2001:db8:100::1" "dummy1" \
|
||||
"IPv6 multipath via second nexthop with source address"
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
ipv6_mpath_oif_vrf_test()
|
||||
{
|
||||
echo
|
||||
echo "IPv6 multipath oif with VRF test"
|
||||
|
||||
setup
|
||||
|
||||
set -e
|
||||
$NS_EXEC sysctl -qw net.ipv6.conf.all.keep_addr_on_down=1
|
||||
$IP -6 rule add pref 32765 table local
|
||||
$IP -6 rule del pref 0
|
||||
$IP link add name vrf-123 up type vrf table 123
|
||||
$IP link set dev dummy0 master vrf-123
|
||||
$IP link add dummy1 up master vrf-123 type dummy
|
||||
$IP address add 2001:db8:2::1/64 dev dummy1
|
||||
$IP address add 2001:db8:100::1/128 dev vrf-123
|
||||
|
||||
$IP route add 2001:db8:10::/64 vrf vrf-123 \
|
||||
nexthop via 2001:db8:1::2 dev dummy0 \
|
||||
nexthop via 2001:db8:2::2 dev dummy1
|
||||
set +e
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy0" "dummy0" \
|
||||
"IPv6 multipath via first nexthop"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy1" "dummy1" \
|
||||
"IPv6 multipath via second nexthop"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy0 from 2001:db8:100::1" "dummy0" \
|
||||
"IPv6 multipath via first nexthop with source address"
|
||||
|
||||
ipv6_mpath_oif_test_common "oif dummy1 from 2001:db8:100::1" "dummy1" \
|
||||
"IPv6 multipath via second nexthop with source address"
|
||||
|
||||
cleanup
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# usage
|
||||
|
||||
|
|
@ -3057,6 +3300,12 @@ do
|
|||
ipv4_mpath_balance) ipv4_mpath_balance_test;;
|
||||
ipv6_mpath_balance) ipv6_mpath_balance_test;;
|
||||
ipv4_mpath_balance_preferred) ipv4_mpath_balance_preferred_test;;
|
||||
ipv4_mpath_oif) ipv4_mpath_oif_test;;
|
||||
ipv4_mpath_oif_nh) ipv4_mpath_oif_nh_test;;
|
||||
ipv4_mpath_oif_vrf) ipv4_mpath_oif_vrf_test;;
|
||||
ipv6_mpath_oif) ipv6_mpath_oif_test;;
|
||||
ipv6_mpath_oif_nh) ipv6_mpath_oif_nh_test;;
|
||||
ipv6_mpath_oif_vrf) ipv6_mpath_oif_vrf_test;;
|
||||
fib6_ra_to_static) fib6_ra_to_static;;
|
||||
fib6_temp_addr_renewal) fib6_temp_addr_renewal;;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user