1 diff -Naur linux-2.6.32.43.org/net/ipv4/ip_gre.c linux-2.6.32.43/net/ipv4/ip_gre.c
2 --- linux-2.6.32.43.org/net/ipv4/ip_gre.c 2011-07-13 05:29:43.000000000 +0200
3 +++ linux-2.6.32.43/net/ipv4/ip_gre.c 2011-06-20 19:27:06.000000000 +0200
4 @@ -1665,14 +1665,16 @@
6 printk(KERN_INFO "GRE over IPv4 tunneling driver\n");
8 - if (inet_add_protocol(&ipgre_protocol, IPPROTO_GRE) < 0) {
9 - printk(KERN_INFO "ipgre init: can't add protocol\n");
13 err = register_pernet_gen_device(&ipgre_net_id, &ipgre_net_ops);
17 + err = inet_add_protocol(&ipgre_protocol, IPPROTO_GRE);
19 + printk(KERN_INFO "ipgre init: can't add protocol\n");
21 goto gen_device_failed;
24 err = rtnl_link_register(&ipgre_link_ops);
28 rtnl_link_unregister(&ipgre_link_ops);
30 - unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops);
32 inet_del_protocol(&ipgre_protocol, IPPROTO_GRE);
34 + unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops);
38 @@ -1698,9 +1700,10 @@
40 rtnl_link_unregister(&ipgre_tap_ops);
41 rtnl_link_unregister(&ipgre_link_ops);
42 - unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops);
43 if (inet_del_protocol(&ipgre_protocol, IPPROTO_GRE) < 0)
44 printk(KERN_INFO "ipgre close: can't remove protocol\n");
46 + unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops);
49 module_init(ipgre_init);
50 diff -Naur linux-2.6.32.43.org/net/ipv4/ipip.c linux-2.6.32.43/net/ipv4/ipip.c
51 --- linux-2.6.32.43.org/net/ipv4/ipip.c 2011-07-13 05:29:43.000000000 +0200
52 +++ linux-2.6.32.43/net/ipv4/ipip.c 2011-06-20 19:27:06.000000000 +0200
57 - if (xfrm4_tunnel_register(&ipip_handler, AF_INET)) {
58 + err = register_pernet_gen_device(&ipip_net_id, &ipip_net_ops);
61 + err = xfrm4_tunnel_register(&ipip_handler, AF_INET);
63 + unregister_pernet_gen_device(ipip_net_id, &ipip_net_ops);
64 printk(KERN_INFO "ipip init: can't register tunnel\n");
68 - err = register_pernet_gen_device(&ipip_net_id, &ipip_net_ops);
70 - xfrm4_tunnel_deregister(&ipip_handler, AF_INET);
75 diff -Naur linux-2.6.32.43.org/net/ipv6/ip6_tunnel.c linux-2.6.32.43/net/ipv6/ip6_tunnel.c
76 --- linux-2.6.32.43.org/net/ipv6/ip6_tunnel.c 2011-07-13 05:29:43.000000000 +0200
77 +++ linux-2.6.32.43/net/ipv6/ip6_tunnel.c 2011-06-20 19:27:06.000000000 +0200
78 @@ -1466,10 +1465,14 @@
82 + err = register_pernet_gen_device(&ip6_tnl_net_id, &ip6_tnl_net_ops);
86 if (xfrm6_tunnel_register(&ip4ip6_handler, AF_INET)) {
87 printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n");
90 + goto unreg_pernet_dev;
93 if (xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6)) {
94 @@ -1478,14 +1481,12 @@
98 - err = register_pernet_gen_device(&ip6_tnl_net_id, &ip6_tnl_net_ops);
103 - xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6);
106 xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET);
108 + unregister_pernet_gen_device(ip6_tnl_net_id, &ip6_tnl_net_ops);
112 diff -Naur linux-2.6.32.43.org/net/ipv6/sit.c linux-2.6.32.43/net/ipv6/sit.c
113 --- linux-2.6.32.43.org/net/ipv6/sit.c 2011-07-13 05:29:43.000000000 +0200
114 +++ linux-2.6.32.43/net/ipv6/sit.c 2011-06-20 19:27:06.000000000 +0200
115 @@ -1086,15 +1086,17 @@
117 printk(KERN_INFO "IPv6 over IPv4 tunneling driver\n");
119 - if (xfrm4_tunnel_register(&sit_handler, AF_INET6) < 0) {
120 + err = register_pernet_gen_device(&sit_net_id, &sit_net_ops);
124 + err = xfrm4_tunnel_register(&sit_handler, AF_INET6);
126 + unregister_pernet_gen_device(sit_net_id, &sit_net_ops);
127 printk(KERN_INFO "sit init: Can't add protocol\n");
131 - err = register_pernet_gen_device(&sit_net_id, &sit_net_ops);
133 - xfrm4_tunnel_deregister(&sit_handler, AF_INET6);