]>
Commit | Line | Data |
---|---|---|
18520692 AF |
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 @@ | |
5 | ||
6 | printk(KERN_INFO "GRE over IPv4 tunneling driver\n"); | |
7 | ||
8 | - if (inet_add_protocol(&ipgre_protocol, IPPROTO_GRE) < 0) { | |
9 | - printk(KERN_INFO "ipgre init: can't add protocol\n"); | |
10 | - return -EAGAIN; | |
11 | - } | |
12 | - | |
13 | err = register_pernet_gen_device(&ipgre_net_id, &ipgre_net_ops); | |
14 | if (err < 0) | |
15 | + goto out; | |
16 | + | |
17 | + err = inet_add_protocol(&ipgre_protocol, IPPROTO_GRE); | |
18 | + if (err < 0) { | |
19 | + printk(KERN_INFO "ipgre init: can't add protocol\n"); | |
20 | + err = -EAGAIN; | |
21 | goto gen_device_failed; | |
22 | + } | |
23 | ||
24 | err = rtnl_link_register(&ipgre_link_ops); | |
25 | if (err < 0) | |
26 | @@ -1688,9 +1690,9 @@ | |
27 | tap_ops_failed: | |
28 | rtnl_link_unregister(&ipgre_link_ops); | |
29 | rtnl_link_failed: | |
30 | - unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops); | |
31 | -gen_device_failed: | |
32 | inet_del_protocol(&ipgre_protocol, IPPROTO_GRE); | |
33 | +gen_device_failed: | |
34 | + unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops); | |
35 | goto out; | |
36 | } | |
37 | ||
38 | @@ -1698,9 +1700,10 @@ | |
39 | { | |
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"); | |
45 | + | |
46 | + unregister_pernet_gen_device(ipgre_net_id, &ipgre_net_ops); | |
47 | } | |
48 | ||
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 | |
53 | @@ -830,15 +830,14 @@ | |
54 | ||
55 | printk(banner); | |
56 | ||
57 | - if (xfrm4_tunnel_register(&ipip_handler, AF_INET)) { | |
58 | + err = register_pernet_gen_device(&ipip_net_id, &ipip_net_ops); | |
59 | + if (err < 0) | |
60 | + return err; | |
61 | + err = xfrm4_tunnel_register(&ipip_handler, AF_INET); | |
62 | + if (err < 0) { | |
63 | + unregister_pernet_gen_device(ipip_net_id, &ipip_net_ops); | |
64 | printk(KERN_INFO "ipip init: can't register tunnel\n"); | |
65 | - return -EAGAIN; | |
66 | } | |
67 | - | |
68 | - err = register_pernet_gen_device(&ipip_net_id, &ipip_net_ops); | |
69 | - if (err) | |
70 | - xfrm4_tunnel_deregister(&ipip_handler, AF_INET); | |
71 | - | |
72 | return err; | |
73 | } | |
74 | ||
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 @@ | |
79 | { | |
80 | int err; | |
81 | ||
82 | + err = register_pernet_gen_device(&ip6_tnl_net_id, &ip6_tnl_net_ops); | |
83 | + if (err < 0) | |
84 | + goto out; | |
85 | + | |
86 | if (xfrm6_tunnel_register(&ip4ip6_handler, AF_INET)) { | |
87 | printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n"); | |
88 | err = -EAGAIN; | |
89 | - goto out; | |
90 | + goto unreg_pernet_dev; | |
91 | } | |
92 | ||
93 | if (xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6)) { | |
94 | @@ -1478,14 +1481,12 @@ | |
95 | goto unreg_ip4ip6; | |
96 | } | |
97 | ||
98 | - err = register_pernet_gen_device(&ip6_tnl_net_id, &ip6_tnl_net_ops); | |
99 | - if (err < 0) | |
100 | - goto err_pernet; | |
101 | return 0; | |
102 | -err_pernet: | |
103 | - xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6); | |
104 | + | |
105 | unreg_ip4ip6: | |
106 | xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET); | |
107 | +unreg_pernet_dev: | |
108 | + unregister_pernet_gen_device(ip6_tnl_net_id, &ip6_tnl_net_ops); | |
109 | out: | |
110 | return err; | |
111 | } | |
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 @@ | |
116 | ||
117 | printk(KERN_INFO "IPv6 over IPv4 tunneling driver\n"); | |
118 | ||
119 | - if (xfrm4_tunnel_register(&sit_handler, AF_INET6) < 0) { | |
120 | + err = register_pernet_gen_device(&sit_net_id, &sit_net_ops); | |
121 | + if (err < 0) | |
122 | + return err; | |
123 | + | |
124 | + err = xfrm4_tunnel_register(&sit_handler, AF_INET6); | |
125 | + if (err < 0) { | |
126 | + unregister_pernet_gen_device(sit_net_id, &sit_net_ops); | |
127 | printk(KERN_INFO "sit init: Can't add protocol\n"); | |
128 | return -EAGAIN; | |
129 | } | |
130 | ||
131 | - err = register_pernet_gen_device(&sit_net_id, &sit_net_ops); | |
132 | - if (err < 0) | |
133 | - xfrm4_tunnel_deregister(&sit_handler, AF_INET6); | |
134 | - | |
135 | return err; | |
136 | } | |
137 |