[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <55219c8da12705fefa36ee5853b899ee88f730fb.1471622715.git.ayourtch@gmail.com>
Date: Fri, 19 Aug 2016 18:41:23 +0200
From: Andrew Yourtchenko <ayourtch@...il.com>
To: netdev@...r.kernel.org
Cc: Andrew Yourtchenko <ayourtch@...il.com>
Subject: [PATCH v2 2/2] ipv6: fixup RTF_* flags when restoring RTPROT_RA route from rtnetlink
Fix the flags for RA-derived routes that were saved
via "ip -6 route save" and and subsequently restored via
"ip -6 route restore", allowing the incoming router advertisements
to update them, rather than complain about inability to do so.
Upon the restore of RA-derived saved routes, set the RTF_ADDRCONF
to indicate that the source of the route was originally
a router advertisement, and set the RTF_DEFAULT or RTF_ROUTEINFO
flag depending on prefix length. This can be considered a
sister change of f0396f60d7c165018c9b203fb9b89fb224835578, in
the other direction.
Signed-off-by: Andrew Yourtchenko <ayourtch@...il.com>
---
Changes since v1 [1]:
* fixed the indentation of the basic blocks to be always a full TAB
as per David Miller's review
[1] v1: http://marc.info/?l=linux-netdev&m=147135599322285&w=2
net/ipv6/route.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index f5b987d..60d95cd 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -2769,6 +2769,16 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
cfg->fc_protocol = rtm->rtm_protocol;
cfg->fc_type = rtm->rtm_type;
+ if (rtm->rtm_protocol == RTPROT_RA) {
+ /* RA-derived route: set flags accordingly. */
+ cfg->fc_flags |= RTF_ADDRCONF;
+ if (rtm->rtm_dst_len == 0) {
+ cfg->fc_flags |= RTF_DEFAULT;
+ } else {
+ cfg->fc_flags |= RTF_ROUTEINFO;
+ }
+ }
+
if (rtm->rtm_type == RTN_UNREACHABLE ||
rtm->rtm_type == RTN_BLACKHOLE ||
rtm->rtm_type == RTN_PROHIBIT ||
--
2.7.4
Powered by blists - more mailing lists