36 lines
1.4 KiB
Diff
36 lines
1.4 KiB
Diff
commit 24f5b855e17df7e355eacd6c4a12cc4d6a6c9ff0
|
|
Author: Li RongQing <roy.qing.li@gmail.com>
|
|
Date: Thu Dec 19 12:40:26 2013 +0800
|
|
|
|
ipv6: always set the new created dst's from in ip6_rt_copy
|
|
|
|
ip6_rt_copy only sets dst.from if ort has flag RTF_ADDRCONF and RTF_DEFAULT.
|
|
but the prefix routes which did get installed by hand locally can have an
|
|
expiration, and no any flag combination which can ensure a potential from
|
|
does never expire, so we should always set the new created dst's from.
|
|
|
|
This also fixes the new created dst is always expired since the ort, which
|
|
is created by RA, maybe has RTF_EXPIRES and RTF_ADDRCONF, but no RTF_DEFAULT.
|
|
|
|
Suggested-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
|
CC: Gao feng <gaofeng@cn.fujitsu.com>
|
|
Signed-off-by: Li RongQing <roy.qing.li@gmail.com>
|
|
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
|
|
|
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
|
|
index a0a48ac..4b4944c 100644
|
|
--- a/net/ipv6/route.c
|
|
+++ b/net/ipv6/route.c
|
|
@@ -1905,9 +1905,7 @@ static struct rt6_info *ip6_rt_copy(struct rt6_info *ort,
|
|
else
|
|
rt->rt6i_gateway = *dest;
|
|
rt->rt6i_flags = ort->rt6i_flags;
|
|
- if ((ort->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ==
|
|
- (RTF_DEFAULT | RTF_ADDRCONF))
|
|
- rt6_set_from(rt, ort);
|
|
+ rt6_set_from(rt, ort);
|
|
rt->rt6i_metric = 0;
|
|
|
|
#ifdef CONFIG_IPV6_SUBTREES
|