|
|
@@ -2351,6 +2351,7 @@ static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_bu
|
|
|
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))
|
|
|
@@ -2461,6 +2462,7 @@ static struct rt6_info *rt6_add_route_info(struct net *net,
|
|
|
.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,
|
|
|
@@ -2513,6 +2515,7 @@ struct rt6_info *rt6_add_dflt_router(const struct in6_addr *gwaddr,
|
|
|
.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),
|
|
|
@@ -3424,14 +3427,6 @@ static int rt6_fill_node(struct net *net,
|
|
|
rtm->rtm_flags = 0;
|
|
|
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;
|