summaryrefslogtreecommitdiffstats
path: root/net/ipv6
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6')
-rw-r--r--net/ipv6/route.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 0d1784b0d65d..bc75b705f54b 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -5619,6 +5619,8 @@ static int rt6_fill_node(struct net *net, struct sk_buff *skb,
rtm->rtm_flags |= RTM_F_OFFLOAD;
if (rt->trap)
rtm->rtm_flags |= RTM_F_TRAP;
+ if (rt->offload_failed)
+ rtm->rtm_flags |= RTM_F_OFFLOAD_FAILED;
}
if (rtnl_put_cacheinfo(skb, dst, 0, expires, dst ? dst->error : 0) < 0)
@@ -6070,16 +6072,18 @@ errout:
}
void fib6_info_hw_flags_set(struct net *net, struct fib6_info *f6i,
- bool offload, bool trap)
+ bool offload, bool trap, bool offload_failed)
{
struct sk_buff *skb;
int err;
- if (f6i->offload == offload && f6i->trap == trap)
+ if (f6i->offload == offload && f6i->trap == trap &&
+ f6i->offload_failed == offload_failed)
return;
f6i->offload = offload;
f6i->trap = trap;
+ f6i->offload_failed = offload_failed;
if (!rcu_access_pointer(f6i->fib6_node))
/* The route was removed from the tree, do not send