[AF_IUCV/IUCV] : Add missing section annotations
[powerpc.git] / net / ipv4 / xfrm4_tunnel.c
index 1be6762..5685103 100644 (file)
@@ -12,9 +12,8 @@
 
 static int ipip_output(struct xfrm_state *x, struct sk_buff *skb)
 {
-       struct iphdr *iph;
+       struct iphdr *iph = ip_hdr(skb);
 
-       iph = skb->nh.iph;
        iph->tot_len = htons(skb->len);
        ip_send_check(iph);
 
@@ -64,24 +63,45 @@ static struct xfrm_tunnel xfrm_tunnel_handler = {
        .priority       =       2,
 };
 
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+static struct xfrm_tunnel xfrm64_tunnel_handler = {
+       .handler        =       xfrm4_rcv,
+       .err_handler    =       xfrm_tunnel_err,
+       .priority       =       2,
+};
+#endif
+
 static int __init ipip_init(void)
 {
        if (xfrm_register_type(&ipip_type, AF_INET) < 0) {
                printk(KERN_INFO "ipip init: can't add xfrm type\n");
                return -EAGAIN;
        }
-       if (xfrm4_tunnel_register(&xfrm_tunnel_handler)) {
-               printk(KERN_INFO "ipip init: can't add xfrm handler\n");
+
+       if (xfrm4_tunnel_register(&xfrm_tunnel_handler, AF_INET)) {
+               printk(KERN_INFO "ipip init: can't add xfrm handler for AF_INET\n");
+               xfrm_unregister_type(&ipip_type, AF_INET);
+               return -EAGAIN;
+       }
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+       if (xfrm4_tunnel_register(&xfrm64_tunnel_handler, AF_INET6)) {
+               printk(KERN_INFO "ipip init: can't add xfrm handler for AF_INET6\n");
+               xfrm4_tunnel_deregister(&xfrm_tunnel_handler, AF_INET);
                xfrm_unregister_type(&ipip_type, AF_INET);
                return -EAGAIN;
        }
+#endif
        return 0;
 }
 
 static void __exit ipip_fini(void)
 {
-       if (xfrm4_tunnel_deregister(&xfrm_tunnel_handler))
-               printk(KERN_INFO "ipip close: can't remove xfrm handler\n");
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+       if (xfrm4_tunnel_deregister(&xfrm64_tunnel_handler, AF_INET6))
+               printk(KERN_INFO "ipip close: can't remove xfrm handler for AF_INET6\n");
+#endif
+       if (xfrm4_tunnel_deregister(&xfrm_tunnel_handler, AF_INET))
+               printk(KERN_INFO "ipip close: can't remove xfrm handler for AF_INET\n");
        if (xfrm_unregister_type(&ipip_type, AF_INET) < 0)
                printk(KERN_INFO "ipip close: can't remove xfrm type\n");
 }