diff options
Diffstat (limited to 'net/ipv6/icmp.c')
| -rw-r--r-- | net/ipv6/icmp.c | 18 | 
1 files changed, 9 insertions, 9 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index f3d05866692e..fd1f896115c1 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -331,10 +331,9 @@ static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, st  }  #if IS_ENABLED(CONFIG_IPV6_MIP6) -static void mip6_addr_swap(struct sk_buff *skb) +static void mip6_addr_swap(struct sk_buff *skb, const struct inet6_skb_parm *opt)  {  	struct ipv6hdr *iph = ipv6_hdr(skb); -	struct inet6_skb_parm *opt = IP6CB(skb);  	struct ipv6_destopt_hao *hao;  	struct in6_addr tmp;  	int off; @@ -351,7 +350,7 @@ static void mip6_addr_swap(struct sk_buff *skb)  	}  }  #else -static inline void mip6_addr_swap(struct sk_buff *skb) {} +static inline void mip6_addr_swap(struct sk_buff *skb, const struct inet6_skb_parm *opt) {}  #endif  static struct dst_entry *icmpv6_route_lookup(struct net *net, @@ -446,7 +445,8 @@ static int icmp6_iif(const struct sk_buff *skb)   *	Send an ICMP message in response to a packet in error   */  void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, -		const struct in6_addr *force_saddr) +		const struct in6_addr *force_saddr, +		const struct inet6_skb_parm *parm)  {  	struct inet6_dev *idev = NULL;  	struct ipv6hdr *hdr = ipv6_hdr(skb); @@ -542,7 +542,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,  	if (!(skb->dev->flags & IFF_LOOPBACK) && !icmpv6_global_allow(net, type))  		goto out_bh_enable; -	mip6_addr_swap(skb); +	mip6_addr_swap(skb, parm);  	sk = icmpv6_xmit_lock(net);  	if (!sk) @@ -559,7 +559,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info,  		/* select a more meaningful saddr from input if */  		struct net_device *in_netdev; -		in_netdev = dev_get_by_index(net, IP6CB(skb)->iif); +		in_netdev = dev_get_by_index(net, parm->iif);  		if (in_netdev) {  			ipv6_dev_get_saddr(net, in_netdev, &fl6.daddr,  					   inet6_sk(sk)->srcprefs, @@ -640,7 +640,7 @@ EXPORT_SYMBOL(icmp6_send);   */  void icmpv6_param_prob(struct sk_buff *skb, u8 code, int pos)  { -	icmp6_send(skb, ICMPV6_PARAMPROB, code, pos, NULL); +	icmp6_send(skb, ICMPV6_PARAMPROB, code, pos, NULL, IP6CB(skb));  	kfree_skb(skb);  } @@ -697,10 +697,10 @@ int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type,  	}  	if (type == ICMP_TIME_EXCEEDED)  		icmp6_send(skb2, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, -			   info, &temp_saddr); +			   info, &temp_saddr, IP6CB(skb2));  	else  		icmp6_send(skb2, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, -			   info, &temp_saddr); +			   info, &temp_saddr, IP6CB(skb2));  	if (rt)  		ip6_rt_put(rt);  | 
