| From 77588b6ecc641068053020368f20231bc2524989 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Fri, 23 Nov 2018 12:42:42 +0100 |
| Subject: Revert "ipv6: set rt6i_protocol properly in the route when it is installed" |
| |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| This reverts commit 23e983e27aaff6357bb851d91b593d83a9a6552c which is |
| commit b91d532928dff2141ea9c107c3e73104d9843767 upstream. |
| |
| It breaks the Android networking test suite, which works fine with the |
| backported patch in 4.14. So something must be off for 4.9 for this |
| patch, so just revert it. |
| |
| Cc: Jianlin Shi <jishi@redhat.com> |
| Cc: David Ahern <dsahern@gmail.com> |
| Cc: Xin Long <lucien.xin@gmail.com> |
| Cc: David S. Miller <davem@davemloft.net> |
| Cc: Sasha Levin <sashal@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/ipv6/route.c | 11 ++++++++--- |
| 1 file changed, 8 insertions(+), 3 deletions(-) |
| |
| --- a/net/ipv6/route.c |
| +++ b/net/ipv6/route.c |
| @@ -2292,7 +2292,6 @@ static void rt6_do_redirect(struct dst_e |
| if (on_link) |
| nrt->rt6i_flags &= ~RTF_GATEWAY; |
| |
| - nrt->rt6i_protocol = RTPROT_REDIRECT; |
| nrt->rt6i_gateway = *(struct in6_addr *)neigh->primary_key; |
| |
| if (ip6_ins_rt(nrt)) |
| @@ -2397,7 +2396,6 @@ static struct rt6_info *rt6_add_route_in |
| .fc_dst_len = prefixlen, |
| .fc_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_ROUTEINFO | |
| RTF_UP | RTF_PREF(pref), |
| - .fc_protocol = RTPROT_RA, |
| .fc_nlinfo.portid = 0, |
| .fc_nlinfo.nlh = NULL, |
| .fc_nlinfo.nl_net = net, |
| @@ -2450,7 +2448,6 @@ struct rt6_info *rt6_add_dflt_router(con |
| .fc_ifindex = dev->ifindex, |
| .fc_flags = RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT | |
| RTF_UP | RTF_EXPIRES | RTF_PREF(pref), |
| - .fc_protocol = RTPROT_RA, |
| .fc_nlinfo.portid = 0, |
| .fc_nlinfo.nlh = NULL, |
| .fc_nlinfo.nl_net = dev_net(dev), |
| @@ -3247,6 +3244,14 @@ static int rt6_fill_node(struct net *net |
| } |
| rtm->rtm_scope = RT_SCOPE_UNIVERSE; |
| rtm->rtm_protocol = rt->rt6i_protocol; |
| + if (rt->rt6i_flags & RTF_DYNAMIC) |
| + rtm->rtm_protocol = RTPROT_REDIRECT; |
| + else if (rt->rt6i_flags & RTF_ADDRCONF) { |
| + if (rt->rt6i_flags & (RTF_DEFAULT | RTF_ROUTEINFO)) |
| + rtm->rtm_protocol = RTPROT_RA; |
| + else |
| + rtm->rtm_protocol = RTPROT_KERNEL; |
| + } |
| |
| if (rt->rt6i_flags & RTF_CACHE) |
| rtm->rtm_flags |= RTM_F_CLONED; |