diff options
-rw-r--r-- | net/ipv4/ip_vti.c | 54 |
1 files changed, 21 insertions, 33 deletions
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index b8960f3527f3..e453cb724a95 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c | |||
@@ -534,40 +534,28 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = { | |||
534 | 534 | ||
535 | static int __init vti_init(void) | 535 | static int __init vti_init(void) |
536 | { | 536 | { |
537 | const char *msg; | ||
537 | int err; | 538 | int err; |
538 | 539 | ||
539 | pr_info("IPv4 over IPSec tunneling driver\n"); | 540 | pr_info("IPv4 over IPsec tunneling driver\n"); |
540 | 541 | ||
542 | msg = "tunnel device"; | ||
541 | err = register_pernet_device(&vti_net_ops); | 543 | err = register_pernet_device(&vti_net_ops); |
542 | if (err < 0) | 544 | if (err < 0) |
543 | return err; | 545 | goto pernet_dev_failed; |
544 | err = xfrm4_protocol_register(&vti_esp4_protocol, IPPROTO_ESP); | ||
545 | if (err < 0) { | ||
546 | unregister_pernet_device(&vti_net_ops); | ||
547 | pr_info("vti init: can't register tunnel\n"); | ||
548 | |||
549 | return err; | ||
550 | } | ||
551 | 546 | ||
547 | msg = "tunnel protocols"; | ||
548 | err = xfrm4_protocol_register(&vti_esp4_protocol, IPPROTO_ESP); | ||
549 | if (err < 0) | ||
550 | goto xfrm_proto_esp_failed; | ||
552 | err = xfrm4_protocol_register(&vti_ah4_protocol, IPPROTO_AH); | 551 | err = xfrm4_protocol_register(&vti_ah4_protocol, IPPROTO_AH); |
553 | if (err < 0) { | 552 | if (err < 0) |
554 | xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); | 553 | goto xfrm_proto_ah_failed; |
555 | unregister_pernet_device(&vti_net_ops); | ||
556 | pr_info("vti init: can't register tunnel\n"); | ||
557 | |||
558 | return err; | ||
559 | } | ||
560 | |||
561 | err = xfrm4_protocol_register(&vti_ipcomp4_protocol, IPPROTO_COMP); | 554 | err = xfrm4_protocol_register(&vti_ipcomp4_protocol, IPPROTO_COMP); |
562 | if (err < 0) { | 555 | if (err < 0) |
563 | xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); | 556 | goto xfrm_proto_comp_failed; |
564 | xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); | ||
565 | unregister_pernet_device(&vti_net_ops); | ||
566 | pr_info("vti init: can't register tunnel\n"); | ||
567 | |||
568 | return err; | ||
569 | } | ||
570 | 557 | ||
558 | msg = "netlink interface"; | ||
571 | err = rtnl_link_register(&vti_link_ops); | 559 | err = rtnl_link_register(&vti_link_ops); |
572 | if (err < 0) | 560 | if (err < 0) |
573 | goto rtnl_link_failed; | 561 | goto rtnl_link_failed; |
@@ -576,23 +564,23 @@ static int __init vti_init(void) | |||
576 | 564 | ||
577 | rtnl_link_failed: | 565 | rtnl_link_failed: |
578 | xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP); | 566 | xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP); |
567 | xfrm_proto_comp_failed: | ||
579 | xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); | 568 | xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); |
569 | xfrm_proto_ah_failed: | ||
580 | xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); | 570 | xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); |
571 | xfrm_proto_esp_failed: | ||
581 | unregister_pernet_device(&vti_net_ops); | 572 | unregister_pernet_device(&vti_net_ops); |
573 | pernet_dev_failed: | ||
574 | pr_err("vti init: failed to register %s\n", msg); | ||
582 | return err; | 575 | return err; |
583 | } | 576 | } |
584 | 577 | ||
585 | static void __exit vti_fini(void) | 578 | static void __exit vti_fini(void) |
586 | { | 579 | { |
587 | rtnl_link_unregister(&vti_link_ops); | 580 | rtnl_link_unregister(&vti_link_ops); |
588 | if (xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP)) | 581 | xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP); |
589 | pr_info("vti close: can't deregister tunnel\n"); | 582 | xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); |
590 | if (xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH)) | 583 | xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); |
591 | pr_info("vti close: can't deregister tunnel\n"); | ||
592 | if (xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP)) | ||
593 | pr_info("vti close: can't deregister tunnel\n"); | ||
594 | |||
595 | |||
596 | unregister_pernet_device(&vti_net_ops); | 584 | unregister_pernet_device(&vti_net_ops); |
597 | } | 585 | } |
598 | 586 | ||