diff options
Diffstat (limited to 'net/ipv6')
| -rw-r--r-- | net/ipv6/addrconf_core.c | 11 | ||||
| -rw-r--r-- | net/ipv6/icmp.c | 6 | ||||
| -rw-r--r-- | net/ipv6/ip6_output.c | 12 | 
3 files changed, 19 insertions, 10 deletions
diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c index ca09bf49ac68..bfa941fc1165 100644 --- a/net/ipv6/addrconf_core.c +++ b/net/ipv6/addrconf_core.c @@ -107,7 +107,16 @@ int inet6addr_notifier_call_chain(unsigned long val, void *v)  }  EXPORT_SYMBOL(inet6addr_notifier_call_chain); -const struct ipv6_stub *ipv6_stub __read_mostly; +static int eafnosupport_ipv6_dst_lookup(struct net *net, struct sock *u1, +					struct dst_entry **u2, +					struct flowi6 *u3) +{ +	return -EAFNOSUPPORT; +} + +const struct ipv6_stub *ipv6_stub __read_mostly = &(struct ipv6_stub) { +	.ipv6_dst_lookup = eafnosupport_ipv6_dst_lookup, +};  EXPORT_SYMBOL_GPL(ipv6_stub);  /* IPv6 Wildcard Address and Loopback Address defined by RFC2553 */ diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index 713d7434c911..6c2b2132c8d3 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -329,7 +329,7 @@ static struct dst_entry *icmpv6_route_lookup(struct net *net,  	struct flowi6 fl2;  	int err; -	err = ip6_dst_lookup(sk, &dst, fl6); +	err = ip6_dst_lookup(net, sk, &dst, fl6);  	if (err)  		return ERR_PTR(err); @@ -361,7 +361,7 @@ static struct dst_entry *icmpv6_route_lookup(struct net *net,  	if (err)  		goto relookup_failed; -	err = ip6_dst_lookup(sk, &dst2, &fl2); +	err = ip6_dst_lookup(net, sk, &dst2, &fl2);  	if (err)  		goto relookup_failed; @@ -591,7 +591,7 @@ static void icmpv6_echo_reply(struct sk_buff *skb)  	else if (!fl6.flowi6_oif)  		fl6.flowi6_oif = np->ucast_oif; -	err = ip6_dst_lookup(sk, &dst, &fl6); +	err = ip6_dst_lookup(net, sk, &dst, &fl6);  	if (err)  		goto out;  	dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), sk, 0); diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index c5fc85286ef6..92b7cf0dc1f9 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -881,10 +881,9 @@ out:  	return dst;  } -static int ip6_dst_lookup_tail(struct sock *sk, +static int ip6_dst_lookup_tail(struct net *net, struct sock *sk,  			       struct dst_entry **dst, struct flowi6 *fl6)  { -	struct net *net = sock_net(sk);  #ifdef CONFIG_IPV6_OPTIMISTIC_DAD  	struct neighbour *n;  	struct rt6_info *rt; @@ -994,10 +993,11 @@ out_err_release:   *   *	It returns zero on success, or a standard errno code on error.   */ -int ip6_dst_lookup(struct sock *sk, struct dst_entry **dst, struct flowi6 *fl6) +int ip6_dst_lookup(struct net *net, struct sock *sk, struct dst_entry **dst, +		   struct flowi6 *fl6)  {  	*dst = NULL; -	return ip6_dst_lookup_tail(sk, dst, fl6); +	return ip6_dst_lookup_tail(net, sk, dst, fl6);  }  EXPORT_SYMBOL_GPL(ip6_dst_lookup); @@ -1018,7 +1018,7 @@ struct dst_entry *ip6_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,  	struct dst_entry *dst = NULL;  	int err; -	err = ip6_dst_lookup_tail(sk, &dst, fl6); +	err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6);  	if (err)  		return ERR_PTR(err);  	if (final_dst) @@ -1052,7 +1052,7 @@ struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,  	dst = ip6_sk_dst_check(sk, dst, fl6); -	err = ip6_dst_lookup_tail(sk, &dst, fl6); +	err = ip6_dst_lookup_tail(sock_net(sk), sk, &dst, fl6);  	if (err)  		return ERR_PTR(err);  	if (final_dst)  | 
