static void __exit sit_cleanup(void) { unregister_netdev_rst(&sit_netdev_rst); xfrm4_tunnel_deregister(&sit_handler, AF_INET6); unregister_pernet_gen_device(sit_net_id, &sit_net_ops); }
static int __init ip6_tunnel_init(void) { int err; err = register_pernet_gen_device(&ip6_tnl_net_id, &ip6_tnl_net_ops); if (err < 0) goto out_pernet; err = xfrm6_tunnel_register(&ip4ip6_handler, AF_INET); if (err < 0) { printk(KERN_ERR "ip6_tunnel init: can't register ip4ip6\n"); goto out_ip4ip6; } err = xfrm6_tunnel_register(&ip6ip6_handler, AF_INET6); if (err < 0) { printk(KERN_ERR "ip6_tunnel init: can't register ip6ip6\n"); goto out_ip6ip6; } return 0; out_ip6ip6: xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET); out_ip4ip6: unregister_pernet_gen_device(ip6_tnl_net_id, &ip6_tnl_net_ops); out_pernet: return err; }
static void __exit ip6_tunnel_cleanup(void) { if (xfrm6_tunnel_deregister(&ip4ip6_handler, AF_INET)) printk(KERN_INFO "ip6_tunnel close: can't deregister ip4ip6\n"); if (xfrm6_tunnel_deregister(&ip6ip6_handler, AF_INET6)) printk(KERN_INFO "ip6_tunnel close: can't deregister ip6ip6\n"); unregister_pernet_gen_device(ip6_tnl_net_id, &ip6_tnl_net_ops); }