|
@@ -1089,36 +1089,26 @@ static struct xfrm6_protocol vti_ipcomp6_protocol __read_mostly = {
|
|
|
**/
|
|
|
static int __init vti6_tunnel_init(void)
|
|
|
{
|
|
|
- int err;
|
|
|
+ const char *msg;
|
|
|
+ int err;
|
|
|
|
|
|
+ msg = "tunnel device";
|
|
|
err = register_pernet_device(&vti6_net_ops);
|
|
|
if (err < 0)
|
|
|
- goto out_pernet;
|
|
|
+ goto pernet_dev_failed;
|
|
|
|
|
|
+ msg = "tunnel protocols";
|
|
|
err = xfrm6_protocol_register(&vti_esp6_protocol, IPPROTO_ESP);
|
|
|
- if (err < 0) {
|
|
|
- pr_err("%s: can't register vti6 protocol\n", __func__);
|
|
|
-
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
+ if (err < 0)
|
|
|
+ goto xfrm_proto_esp_failed;
|
|
|
err = xfrm6_protocol_register(&vti_ah6_protocol, IPPROTO_AH);
|
|
|
- if (err < 0) {
|
|
|
- xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
|
|
|
- pr_err("%s: can't register vti6 protocol\n", __func__);
|
|
|
-
|
|
|
- goto out;
|
|
|
- }
|
|
|
-
|
|
|
+ if (err < 0)
|
|
|
+ goto xfrm_proto_ah_failed;
|
|
|
err = xfrm6_protocol_register(&vti_ipcomp6_protocol, IPPROTO_COMP);
|
|
|
- if (err < 0) {
|
|
|
- xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
|
|
|
- xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
|
|
|
- pr_err("%s: can't register vti6 protocol\n", __func__);
|
|
|
-
|
|
|
- goto out;
|
|
|
- }
|
|
|
+ if (err < 0)
|
|
|
+ goto xfrm_proto_comp_failed;
|
|
|
|
|
|
+ msg = "netlink interface";
|
|
|
err = rtnl_link_register(&vti6_link_ops);
|
|
|
if (err < 0)
|
|
|
goto rtnl_link_failed;
|
|
@@ -1127,11 +1117,14 @@ static int __init vti6_tunnel_init(void)
|
|
|
|
|
|
rtnl_link_failed:
|
|
|
xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP);
|
|
|
+xfrm_proto_comp_failed:
|
|
|
xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
|
|
|
+xfrm_proto_ah_failed:
|
|
|
xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
|
|
|
-out:
|
|
|
+xfrm_proto_esp_failed:
|
|
|
unregister_pernet_device(&vti6_net_ops);
|
|
|
-out_pernet:
|
|
|
+pernet_dev_failed:
|
|
|
+ pr_err("vti6 init: failed to register %s\n", msg);
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -1141,13 +1134,9 @@ out_pernet:
|
|
|
static void __exit vti6_tunnel_cleanup(void)
|
|
|
{
|
|
|
rtnl_link_unregister(&vti6_link_ops);
|
|
|
- if (xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP))
|
|
|
- pr_info("%s: can't deregister protocol\n", __func__);
|
|
|
- if (xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH))
|
|
|
- pr_info("%s: can't deregister protocol\n", __func__);
|
|
|
- if (xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP))
|
|
|
- pr_info("%s: can't deregister protocol\n", __func__);
|
|
|
-
|
|
|
+ xfrm6_protocol_deregister(&vti_ipcomp6_protocol, IPPROTO_COMP);
|
|
|
+ xfrm6_protocol_deregister(&vti_ah6_protocol, IPPROTO_AH);
|
|
|
+ xfrm6_protocol_deregister(&vti_esp6_protocol, IPPROTO_ESP);
|
|
|
unregister_pernet_device(&vti6_net_ops);
|
|
|
}
|
|
|
|