struct nlmsghdr *nlh) 
struct nlmsghdr *nlh,  struct netlink_skb_parms *req) 
static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt,    struct nlmsghdr *nlh){	struct rt6_info *iter = NULL;	struct rt6_info **ins;	ins = &fn->leaf;	if (fn->fn_flags&RTN_TL_ROOT &&	    fn->leaf == &ip6_null_entry &&	    !(rt->rt6i_flags & (RTF_DEFAULT | RTF_ADDRCONF)) ){		fn->leaf = rt;		rt->u.next = NULL;		goto out;	}	for (iter = fn->leaf; iter; iter=iter->u.next) {		/*		 *	Search for duplicates		 */		if (iter->rt6i_metric == rt->rt6i_metric) {			/*			 *	Same priority level			 */			if (iter->rt6i_dev == rt->rt6i_dev &&			    iter->rt6i_idev == rt->rt6i_idev &&			    ipv6_addr_equal(&iter->rt6i_gateway,					    &rt->rt6i_gateway)) {				if (!(iter->rt6i_flags&RTF_EXPIRES))					return -EEXIST;				iter->rt6i_expires = rt->rt6i_expires;				if (!(rt->rt6i_flags&RTF_EXPIRES)) {					iter->rt6i_flags &= ~RTF_EXPIRES;					iter->rt6i_expires = 0;				}				return -EEXIST;			}		}		if (iter->rt6i_metric > rt->rt6i_metric)			break;		ins = &iter->u.next;	}	/*	 *	insert node	 */out:	rt->u.next = iter;	*ins = rt;	rt->rt6i_node = fn;	atomic_inc(&rt->rt6i_ref);	inet6_rt_notify(RTM_NEWROUTE, rt, nlh);	rt6_stats.fib_rt_entries++;	if ((fn->fn_flags & RTN_RTINFO) == 0) {		rt6_stats.fib_route_nodes++;		fn->fn_flags |= RTN_RTINFO;	}	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0d51aa80a9b1db43920c0770c3bb842dd823c005/ip6_fib.c/buggy/net/ipv6/ip6_fib.c