mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
Merge branch 'ipv6-allow-for-nexthop-device-mismatch-with-onlink'
Ido Schimmel says: ==================== ipv6: Allow for nexthop device mismatch with "onlink" This patchset aligns IPv6 with IPv4 with respect to the "onlink" keyword and allows IPv6 routes to be configured with a gateway address that is resolved out of a different interface than the one specified. Patches #1-#3 are small preparations in the existing "onlink" selftest. Patch #4 is the actual change. See the commit message for detailed description and motivation. Patch #5 adds test cases for both address families, to make sure that this use case does not regress. ==================== Link: https://patch.msgid.link/20260111120813.159799-1-idosch@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
8619e429d6
|
|
@ -3419,11 +3419,8 @@ static int ip6_route_check_nh_onlink(struct net *net,
|
|||
|
||||
err = ip6_nh_lookup_table(net, cfg, gw_addr, tbid, 0, &res);
|
||||
if (!err && !(res.fib6_flags & RTF_REJECT) &&
|
||||
/* ignore match if it is the default route */
|
||||
!ipv6_addr_any(&res.f6i->fib6_dst.addr) &&
|
||||
(res.fib6_type != RTN_UNICAST || dev != res.nh->fib_nh_dev)) {
|
||||
NL_SET_ERR_MSG(extack,
|
||||
"Nexthop has invalid gateway or device mismatch");
|
||||
res.fib6_type != RTN_UNICAST) {
|
||||
NL_SET_ERR_MSG(extack, "Nexthop has invalid gateway");
|
||||
err = -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ declare -A TEST_NET4IN6IN6
|
|||
TEST_NET4IN6[1]=10.1.1.254
|
||||
TEST_NET4IN6[2]=10.2.1.254
|
||||
|
||||
# mcast address
|
||||
# mcast addresses
|
||||
MCAST4=233.252.0.1
|
||||
MCAST6=ff02::1
|
||||
|
||||
VRF=lisa
|
||||
|
|
@ -270,11 +271,15 @@ valid_onlink_ipv4()
|
|||
|
||||
run_ip 254 ${TEST_NET4[1]}.1 ${CONGW[1]} ${NETIFS[p1]} 0 "unicast connected"
|
||||
run_ip 254 ${TEST_NET4[1]}.2 ${RECGW4[1]} ${NETIFS[p1]} 0 "unicast recursive"
|
||||
run_ip 254 ${TEST_NET4[1]}.9 ${CONGW[1]} ${NETIFS[p3]} 0 \
|
||||
"nexthop device mismatch"
|
||||
|
||||
log_subsection "VRF ${VRF}"
|
||||
|
||||
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.1 ${CONGW[3]} ${NETIFS[p5]} 0 "unicast connected"
|
||||
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.2 ${RECGW4[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
||||
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.10 ${CONGW[3]} ${NETIFS[p7]} 0 \
|
||||
"nexthop device mismatch"
|
||||
|
||||
log_subsection "VRF device, PBR table"
|
||||
|
||||
|
|
@ -310,17 +315,15 @@ invalid_onlink_ipv4()
|
|||
{
|
||||
run_ip 254 ${TEST_NET4[1]}.11 ${V4ADDRS[p1]} ${NETIFS[p1]} 2 \
|
||||
"Invalid gw - local unicast address"
|
||||
run_ip 254 ${TEST_NET4[1]}.12 ${MCAST4} ${NETIFS[p1]} 2 \
|
||||
"Invalid gw - multicast address"
|
||||
|
||||
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.11 ${V4ADDRS[p5]} ${NETIFS[p5]} 2 \
|
||||
"Invalid gw - local unicast address, VRF"
|
||||
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.12 ${MCAST4} ${NETIFS[p5]} 2 \
|
||||
"Invalid gw - multicast address, VRF"
|
||||
|
||||
run_ip 254 ${TEST_NET4[1]}.101 ${V4ADDRS[p1]} "" 2 "No nexthop device given"
|
||||
|
||||
run_ip 254 ${TEST_NET4[1]}.102 ${V4ADDRS[p3]} ${NETIFS[p1]} 2 \
|
||||
"Gateway resolves to wrong nexthop device"
|
||||
|
||||
run_ip ${VRF_TABLE} ${TEST_NET4[2]}.103 ${V4ADDRS[p7]} ${NETIFS[p5]} 2 \
|
||||
"Gateway resolves to wrong nexthop device - VRF"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
|
@ -367,12 +370,16 @@ valid_onlink_ipv6()
|
|||
run_ip6 254 ${TEST_NET6[1]}::1 ${V6ADDRS[p1]/::*}::64 ${NETIFS[p1]} 0 "unicast connected"
|
||||
run_ip6 254 ${TEST_NET6[1]}::2 ${RECGW6[1]} ${NETIFS[p1]} 0 "unicast recursive"
|
||||
run_ip6 254 ${TEST_NET6[1]}::3 ::ffff:${TEST_NET4IN6[1]} ${NETIFS[p1]} 0 "v4-mapped"
|
||||
run_ip6 254 ${TEST_NET6[1]}::a ${V6ADDRS[p1]/::*}::64 ${NETIFS[p3]} 0 \
|
||||
"nexthop device mismatch"
|
||||
|
||||
log_subsection "VRF ${VRF}"
|
||||
|
||||
run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::1 ${V6ADDRS[p5]/::*}::64 ${NETIFS[p5]} 0 "unicast connected"
|
||||
run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::2 ${RECGW6[2]} ${NETIFS[p5]} 0 "unicast recursive"
|
||||
run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::3 ::ffff:${TEST_NET4IN6[2]} ${NETIFS[p5]} 0 "v4-mapped"
|
||||
run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::b ${V6ADDRS[p5]/::*}::64 \
|
||||
${NETIFS[p7]} 0 "nexthop device mismatch"
|
||||
|
||||
log_subsection "VRF device, PBR table"
|
||||
|
||||
|
|
@ -438,13 +445,6 @@ invalid_onlink_ipv6()
|
|||
|
||||
run_ip6 254 ${TEST_NET6[1]}::101 ${V6ADDRS[p1]} "" 2 \
|
||||
"No nexthop device given"
|
||||
|
||||
# default VRF validation is done against LOCAL table
|
||||
# run_ip6 254 ${TEST_NET6[1]}::102 ${V6ADDRS[p3]/::[0-9]/::64} ${NETIFS[p1]} 2 \
|
||||
# "Gateway resolves to wrong nexthop device"
|
||||
|
||||
run_ip6 ${VRF_TABLE} ${TEST_NET6[2]}::103 ${V6ADDRS[p7]/::[0-9]/::64} ${NETIFS[p5]} 2 \
|
||||
"Gateway resolves to wrong nexthop device - VRF"
|
||||
}
|
||||
|
||||
run_onlink_tests()
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user