net/ipv6/esp6.c
changeset 2 d1f6d8b6f81c
parent 0 aa628870c1d3
equal deleted inserted replaced
1:0056487c491e 2:d1f6d8b6f81c
   354 }
   354 }
   355 
   355 
   356 static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
   356 static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
   357 		     int type, int code, int offset, __be32 info)
   357 		     int type, int code, int offset, __be32 info)
   358 {
   358 {
       
   359 	struct net *net = dev_net(skb->dev);
   359 	struct ipv6hdr *iph = (struct ipv6hdr*)skb->data;
   360 	struct ipv6hdr *iph = (struct ipv6hdr*)skb->data;
   360 	struct ip_esp_hdr *esph = (struct ip_esp_hdr *)(skb->data + offset);
   361 	struct ip_esp_hdr *esph = (struct ip_esp_hdr *)(skb->data + offset);
   361 	struct xfrm_state *x;
   362 	struct xfrm_state *x;
   362 
   363 
   363 	if (type != ICMPV6_DEST_UNREACH &&
   364 	if (type != ICMPV6_DEST_UNREACH &&
   364 	    type != ICMPV6_PKT_TOOBIG)
   365 	    type != ICMPV6_PKT_TOOBIG)
   365 		return;
   366 		return;
   366 
   367 
   367 	x = xfrm_state_lookup((xfrm_address_t *)&iph->daddr, esph->spi, IPPROTO_ESP, AF_INET6);
   368 	x = xfrm_state_lookup(net, (xfrm_address_t *)&iph->daddr, esph->spi, IPPROTO_ESP, AF_INET6);
   368 	if (!x)
   369 	if (!x)
   369 		return;
   370 		return;
   370 	printk(KERN_DEBUG "pmtu discovery on SA ESP/%08x/" NIP6_FMT "\n",
   371 	printk(KERN_DEBUG "pmtu discovery on SA ESP/%08x/%pI6\n",
   371 			ntohl(esph->spi), NIP6(iph->daddr));
   372 			ntohl(esph->spi), &iph->daddr);
   372 	xfrm_state_put(x);
   373 	xfrm_state_put(x);
   373 }
   374 }
   374 
   375 
   375 static void esp6_destroy(struct xfrm_state *x)
   376 static void esp6_destroy(struct xfrm_state *x)
   376 {
   377 {