*/
if (rt.rt_dest.sa_family == AF_INET6 &&
rt.rt_flags & RTF_HOST &&
- (rtm->rtm_type == RTM_DELETE || rt.rt_dflags & RTDF_GATELINK))
- ipv6nd_neighbour(ctx, &rt.rt_ss_dest.sin6.sin6_addr,
- rtm->rtm_type != RTM_DELETE ? IPV6ND_REACHABLE : 0);
+ !(rtm->rtm_type == RTM_ADD && !(rt.rt_dflags & RTDF_GATELINK)))
+ {
+ int flags = 0;
+
+ if (rt.rt_dflags & RTDF_GATELINK)
+ flags |= IPV6ND_ROUTER;
+ if (rtm->rtm_type != RTM_DELETE)
+ flags |= IPV6ND_REACHABLE;
+
+ ipv6nd_neighbour(ctx, &rt.rt_ss_dest.sin6.sin6_addr, flags);
+ }
#endif
rt_recvrt(rtm->rtm_type, &rt, rtm->rtm_pid);