mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 22:40:53 +07:00
net: ipv6: Do not consider link state for nexthop validation
Similar to IPv4, do not consider link state when validating next hops.
Currently, if the link is down default routes can fail to insert:
$ ip -6 ro add vrf blue default via 2100:2::64 dev eth2
RTNETLINK answers: No route to host
With this patch the command succeeds.
Fixes: 8c14586fc3
("net: ipv6: Use passed in table for nexthop lookups")
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
830218c1ad
commit
d5d32e4b76
@ -32,6 +32,7 @@ struct route_info {
|
||||
#define RT6_LOOKUP_F_SRCPREF_TMP 0x00000008
|
||||
#define RT6_LOOKUP_F_SRCPREF_PUBLIC 0x00000010
|
||||
#define RT6_LOOKUP_F_SRCPREF_COA 0x00000020
|
||||
#define RT6_LOOKUP_F_IGNORE_LINKSTATE 0x00000040
|
||||
|
||||
/* We do not (yet ?) support IPv6 jumbograms (RFC 2675)
|
||||
* Unlike IPv4, hdr->seg_len doesn't include the IPv6 header
|
||||
|
@ -658,7 +658,8 @@ static struct rt6_info *find_match(struct rt6_info *rt, int oif, int strict,
|
||||
struct net_device *dev = rt->dst.dev;
|
||||
|
||||
if (dev && !netif_carrier_ok(dev) &&
|
||||
idev->cnf.ignore_routes_with_linkdown)
|
||||
idev->cnf.ignore_routes_with_linkdown &&
|
||||
!(strict & RT6_LOOKUP_F_IGNORE_LINKSTATE))
|
||||
goto out;
|
||||
|
||||
if (rt6_check_expired(rt))
|
||||
@ -1052,6 +1053,7 @@ struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table,
|
||||
int strict = 0;
|
||||
|
||||
strict |= flags & RT6_LOOKUP_F_IFACE;
|
||||
strict |= flags & RT6_LOOKUP_F_IGNORE_LINKSTATE;
|
||||
if (net->ipv6.devconf_all->forwarding == 0)
|
||||
strict |= RT6_LOOKUP_F_REACHABLE;
|
||||
|
||||
@ -1791,7 +1793,7 @@ static struct rt6_info *ip6_nh_lookup_table(struct net *net,
|
||||
};
|
||||
struct fib6_table *table;
|
||||
struct rt6_info *rt;
|
||||
int flags = RT6_LOOKUP_F_IFACE;
|
||||
int flags = RT6_LOOKUP_F_IFACE | RT6_LOOKUP_F_IGNORE_LINKSTATE;
|
||||
|
||||
table = fib6_get_table(net, cfg->fc_table);
|
||||
if (!table)
|
||||
|
Loading…
Reference in New Issue
Block a user