ip6_del_rt(rt, NULL, NULL); 
ip6_del_rt(rt, NULL, NULL, NULL); 
static void ndisc_recv_na(struct sk_buff *skb){	struct nd_msg *msg = (struct nd_msg *)skb->h.raw;	struct in6_addr *saddr = &skb->nh.ipv6h->saddr;	struct in6_addr *daddr = &skb->nh.ipv6h->daddr;	u8 *lladdr = NULL;	u32 ndoptlen = skb->tail - msg->opt;	struct ndisc_options ndopts;	struct net_device *dev = skb->dev;	struct inet6_ifaddr *ifp;	struct neighbour *neigh;	if (skb->len < sizeof(struct nd_msg)) {		ND_PRINTK2(KERN_WARNING			   "ICMPv6 NA: packet too short\n");		return;	}	if (ipv6_addr_is_multicast(&msg->target)) {		ND_PRINTK2(KERN_WARNING			   "ICMPv6 NA: target address is multicast.\n");		return;	}	if (ipv6_addr_is_multicast(daddr) &&	    msg->icmph.icmp6_solicited) {		ND_PRINTK2(KERN_WARNING			   "ICMPv6 NA: solicited NA is multicasted.\n");		return;	}			if (!ndisc_parse_options(msg->opt, ndoptlen, &ndopts)) {		ND_PRINTK2(KERN_WARNING			   "ICMPv6 NS: invalid ND option\n");		return;	}	if (ndopts.nd_opts_tgt_lladdr) {		lladdr = ndisc_opt_addr_data(ndopts.nd_opts_tgt_lladdr, dev);		if (!lladdr) {			ND_PRINTK2(KERN_WARNING				   "ICMPv6 NA: invalid link-layer address length\n");			return;		}	}	if ((ifp = ipv6_get_ifaddr(&msg->target, dev, 1))) {		if (ifp->flags & IFA_F_TENTATIVE) {			addrconf_dad_failure(ifp);			return;		}		/* What should we make now? The advertisement		   is invalid, but ndisc specs say nothing		   about it. It could be misconfiguration, or		   an smart proxy agent tries to help us :-)		 */		ND_PRINTK1(KERN_WARNING			   "ICMPv6 NA: someone advertises our address on %s!\n",			   ifp->idev->dev->name);		in6_ifa_put(ifp);		return;	}	neigh = neigh_lookup(&nd_tbl, &msg->target, dev);	if (neigh) {		u8 old_flags = neigh->flags;		if (neigh->nud_state & NUD_FAILED)			goto out;		neigh_update(neigh, lladdr,			     msg->icmph.icmp6_solicited ? NUD_REACHABLE : NUD_STALE,			     NEIGH_UPDATE_F_WEAK_OVERRIDE|			     (msg->icmph.icmp6_override ? NEIGH_UPDATE_F_OVERRIDE : 0)|			     NEIGH_UPDATE_F_OVERRIDE_ISROUTER|			     (msg->icmph.icmp6_router ? NEIGH_UPDATE_F_ISROUTER : 0));		if ((old_flags & ~neigh->flags) & NTF_ROUTER) {			/*			 * Change: router to host			 */			struct rt6_info *rt;			rt = rt6_get_dflt_router(saddr, dev);			if (rt)				ip6_del_rt(rt, NULL, NULL);		}out:		neigh_release(neigh);	}}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/ndisc.c/buggy/net/ipv6/ndisc.c