diff options
Diffstat (limited to 'net/ipv6/route.c')
| -rw-r--r-- | net/ipv6/route.c | 39 | 
1 files changed, 20 insertions, 19 deletions
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index c1515a3c130..2998cb5be90 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -356,7 +356,7 @@ out:  #ifdef CONFIG_IPV6_ROUTER_PREF  static void rt6_probe(struct rt6_info *rt)  { -	struct neighbour *neigh = rt ? rt->dst.neighbour : NULL; +	struct neighbour *neigh = rt ? dst_get_neighbour(&rt->dst) : NULL;  	/*  	 * Okay, this does not seem to be appropriate  	 * for now, however, we need to check if it @@ -404,7 +404,7 @@ static inline int rt6_check_dev(struct rt6_info *rt, int oif)  static inline int rt6_check_neigh(struct rt6_info *rt)  { -	struct neighbour *neigh = rt->dst.neighbour; +	struct neighbour *neigh = dst_get_neighbour(&rt->dst);  	int m;  	if (rt->rt6i_flags & RTF_NONEXTHOP ||  	    !(rt->rt6i_flags & RTF_GATEWAY)) @@ -745,7 +745,7 @@ static struct rt6_info *rt6_alloc_cow(struct rt6_info *ort, const struct in6_add  			dst_free(&rt->dst);  			return NULL;  		} -		rt->dst.neighbour = neigh; +		dst_set_neighbour(&rt->dst, neigh);  	} @@ -760,7 +760,7 @@ static struct rt6_info *rt6_alloc_clone(struct rt6_info *ort, const struct in6_a  		rt->rt6i_dst.plen = 128;  		rt->rt6i_flags |= RTF_CACHE;  		rt->dst.flags |= DST_HOST; -		rt->dst.neighbour = neigh_clone(ort->dst.neighbour); +		dst_set_neighbour(&rt->dst, neigh_clone(dst_get_neighbour(&ort->dst)));  	}  	return rt;  } @@ -794,7 +794,7 @@ restart:  	dst_hold(&rt->dst);  	read_unlock_bh(&table->tb6_lock); -	if (!rt->dst.neighbour && !(rt->rt6i_flags & RTF_NONEXTHOP)) +	if (!dst_get_neighbour(&rt->dst) && !(rt->rt6i_flags & RTF_NONEXTHOP))  		nrt = rt6_alloc_cow(rt, &fl6->daddr, &fl6->saddr);  	else if (!(rt->dst.flags & DST_HOST))  		nrt = rt6_alloc_clone(rt, &fl6->daddr); @@ -1058,7 +1058,7 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev,  	}  	rt->rt6i_idev     = idev; -	rt->dst.neighbour  = neigh; +	dst_set_neighbour(&rt->dst, neigh);  	atomic_set(&rt->dst.__refcnt, 1);  	dst_metric_set(&rt->dst, RTAX_HOPLIMIT, 255);  	rt->dst.output  = ip6_output; @@ -1338,12 +1338,12 @@ int ip6_route_add(struct fib6_config *cfg)  		rt->rt6i_prefsrc.plen = 0;  	if (cfg->fc_flags & (RTF_GATEWAY | RTF_NONEXTHOP)) { -		rt->dst.neighbour = __neigh_lookup_errno(&nd_tbl, &rt->rt6i_gateway, dev); -		if (IS_ERR(rt->dst.neighbour)) { -			err = PTR_ERR(rt->dst.neighbour); -			rt->dst.neighbour = NULL; +		struct neighbour *n = __neigh_lookup_errno(&nd_tbl, &rt->rt6i_gateway, dev); +		if (IS_ERR(n)) { +			err = PTR_ERR(n);  			goto out;  		} +		dst_set_neighbour(&rt->dst, n);  	}  	rt->rt6i_flags = cfg->fc_flags; @@ -1574,7 +1574,7 @@ void rt6_redirect(const struct in6_addr *dest, const struct in6_addr *src,  	dst_confirm(&rt->dst);  	/* Duplicate redirect: silently ignore. */ -	if (neigh == rt->dst.neighbour) +	if (neigh == dst_get_neighbour(&rt->dst))  		goto out;  	nrt = ip6_rt_copy(rt); @@ -1590,7 +1590,7 @@ void rt6_redirect(const struct in6_addr *dest, const struct in6_addr *src,  	nrt->dst.flags |= DST_HOST;  	ipv6_addr_copy(&nrt->rt6i_gateway, (struct in6_addr*)neigh->primary_key); -	nrt->dst.neighbour = neigh_clone(neigh); +	dst_set_neighbour(&nrt->dst, neigh_clone(neigh));  	if (ip6_ins_rt(nrt))  		goto out; @@ -1670,7 +1670,7 @@ again:  	   1. It is connected route. Action: COW  	   2. It is gatewayed route or NONEXTHOP route. Action: clone it.  	 */ -	if (!rt->dst.neighbour && !(rt->rt6i_flags & RTF_NONEXTHOP)) +	if (!dst_get_neighbour(&rt->dst) && !(rt->rt6i_flags & RTF_NONEXTHOP))  		nrt = rt6_alloc_cow(rt, daddr, saddr);  	else  		nrt = rt6_alloc_clone(rt, daddr); @@ -2035,7 +2035,7 @@ struct rt6_info *addrconf_dst_alloc(struct inet6_dev *idev,  		return ERR_CAST(neigh);  	} -	rt->dst.neighbour = neigh; +	dst_set_neighbour(&rt->dst, neigh);  	ipv6_addr_copy(&rt->rt6i_dst.addr, addr);  	rt->rt6i_dst.plen = 128; @@ -2400,8 +2400,8 @@ static int rt6_fill_node(struct net *net,  	if (rtnetlink_put_metrics(skb, dst_metrics_ptr(&rt->dst)) < 0)  		goto nla_put_failure; -	if (rt->dst.neighbour) -		NLA_PUT(skb, RTA_GATEWAY, 16, &rt->dst.neighbour->primary_key); +	if (dst_get_neighbour(&rt->dst)) +		NLA_PUT(skb, RTA_GATEWAY, 16, &dst_get_neighbour(&rt->dst)->primary_key);  	if (rt->dst.dev)  		NLA_PUT_U32(skb, RTA_OIF, rt->rt6i_dev->ifindex); @@ -2585,6 +2585,7 @@ struct rt6_proc_arg  static int rt6_info_route(struct rt6_info *rt, void *p_arg)  {  	struct seq_file *m = p_arg; +	struct neighbour *n;  	seq_printf(m, "%pi6 %02x ", &rt->rt6i_dst.addr, rt->rt6i_dst.plen); @@ -2593,9 +2594,9 @@ static int rt6_info_route(struct rt6_info *rt, void *p_arg)  #else  	seq_puts(m, "00000000000000000000000000000000 00 ");  #endif - -	if (rt->dst.neighbour) { -		seq_printf(m, "%pi6", rt->dst.neighbour->primary_key); +	n = dst_get_neighbour(&rt->dst); +	if (n) { +		seq_printf(m, "%pi6", n->primary_key);  	} else {  		seq_puts(m, "00000000000000000000000000000000");  	}  |