static int __init init(void) { int ret; need_conntrack(); ret = xt_register_match(AF_INET, &conntrack_match); return ret; }
static int __init nf_conntrack_l3proto_ipv6_init(void) { int ret = 0; need_conntrack(); ret = nf_ct_frag6_init(); if (ret < 0) { printk("nf_conntrack_ipv6: can't initialize frag6.\n"); return ret; } ret = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_tcp6); if (ret < 0) { printk("nf_conntrack_ipv6: can't register tcp.\n"); goto cleanup_frag6; } ret = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_udp6); if (ret < 0) { printk("nf_conntrack_ipv6: can't register udp.\n"); goto cleanup_tcp; } ret = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_icmpv6); if (ret < 0) { printk("nf_conntrack_ipv6: can't register icmpv6.\n"); goto cleanup_udp; } ret = nf_conntrack_l3proto_register(&nf_conntrack_l3proto_ipv6); if (ret < 0) { printk("nf_conntrack_ipv6: can't register ipv6\n"); goto cleanup_icmpv6; } ret = nf_register_hooks(ipv6_conntrack_ops, ARRAY_SIZE(ipv6_conntrack_ops)); if (ret < 0) { printk("nf_conntrack_ipv6: can't register pre-routing defrag " "hook.\n"); goto cleanup_ipv6; } return ret; cleanup_ipv6: nf_conntrack_l3proto_unregister(&nf_conntrack_l3proto_ipv6); cleanup_icmpv6: nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_icmpv6); cleanup_udp: nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_udp6); cleanup_tcp: nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_tcp6); cleanup_frag6: nf_ct_frag6_cleanup(); return ret; }
int __init nat64_init(void) { pr_debug("\n\n\n%s", banner); pr_debug("\n\nNAT64 module inserted!"); // Load default configuration init_nat_config(&cs); /* * Include nf_conntrack dependency */ need_conntrack(); /* * Include nf_conntrack_ipv4 dependency. * IPv4 conntrack is needed in order to handle complete packets, and not * fragments. */ need_ipv4_conntrack(); nat64_determine_incoming_tuple_init(); // BEGIN: code imported from nat64_init of Julius Kriukas' implementation // Init IPv4 addresses pool init_pools(&cs); // Bernardo nat64_create_bib_session_memory(); pr_debug("NAT64: The bib table slab cache was succesfully created."); // END: code imported from nat64_init of Julius Kriukas' implementation nat64_create_character_device(); // Load netlink sockets. Rob // BEGIN // Create netlink socket, register 'my_nl_rcv_msg' as callback function. // Rob my_nl_sock = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 0, my_nl_rcv_msg, NULL, THIS_MODULE); if (!my_nl_sock) { pr_warning("NAT64: %s: Creation of netlink socket failed.\n", __func__); goto error; } // END return xt_register_target(&nat64_tg_reg); // The following goto were inspired by Julius Kriukas' nat64_init's goto error: return -EINVAL; }
static int __init nf_nat_standalone_init(void) { int size, ret = 0; need_conntrack(); size = ALIGN(sizeof(struct nf_conn), __alignof__(struct nf_conn_nat)) + sizeof(struct nf_conn_nat); ret = nf_conntrack_register_cache(NF_CT_F_NAT, "nf_nat:base", size); if (ret < 0) { printk(KERN_ERR "nf_nat_init: Unable to create slab cache\n"); return ret; } size = ALIGN(size, __alignof__(struct nf_conn_help)) + sizeof(struct nf_conn_help); ret = nf_conntrack_register_cache(NF_CT_F_NAT|NF_CT_F_HELP, "nf_nat:help", size); if (ret < 0) { printk(KERN_ERR "nf_nat_init: Unable to create slab cache\n"); goto cleanup_register_cache; } #ifdef CONFIG_XFRM BUG_ON(ip_nat_decode_session != NULL); ip_nat_decode_session = nat_decode_session; #endif ret = nf_nat_rule_init(); if (ret < 0) { printk("nf_nat_init: can't setup rules.\n"); goto cleanup_decode_session; } ret = nf_register_hooks(nf_nat_ops, ARRAY_SIZE(nf_nat_ops)); if (ret < 0) { printk("nf_nat_init: can't register hooks.\n"); goto cleanup_rule_init; } nf_nat_module_is_loaded = 1; return ret; cleanup_rule_init: nf_nat_rule_cleanup(); cleanup_decode_session: #ifdef CONFIG_XFRM ip_nat_decode_session = NULL; synchronize_net(); #endif nf_conntrack_unregister_cache(NF_CT_F_NAT|NF_CT_F_HELP); cleanup_register_cache: nf_conntrack_unregister_cache(NF_CT_F_NAT); return ret; }
static int __init init(void) { int ret; need_conntrack(); ret = xt_register_match(AF_INET, &state_match); if (ret < 0) return ret; ret = xt_register_match(AF_INET6, &state6_match); if (ret < 0) xt_unregister_match(AF_INET,&state_match); return ret; }
static int __init nf_conntrack_l3proto_ipv4_init(void) { int ret = 0; need_conntrack(); nf_defrag_ipv4_enable(); ret = nf_register_sockopt(&so_getorigdst); if (ret < 0) { printk(KERN_ERR "Unable to register netfilter socket option\n"); return ret; } ret = register_pernet_subsys(&ipv4_net_ops); if (ret < 0) { pr_err("nf_conntrack_ipv4: can't register pernet ops\n"); goto cleanup_sockopt; } ret = nf_register_hooks(ipv4_conntrack_ops, ARRAY_SIZE(ipv4_conntrack_ops)); if (ret < 0) { pr_err("nf_conntrack_ipv4: can't register hooks.\n"); goto cleanup_pernet; } #if defined(CONFIG_PROC_FS) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT) ret = nf_conntrack_ipv4_compat_init(); if (ret < 0) goto cleanup_hooks; #endif return ret; #if defined(CONFIG_PROC_FS) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT) cleanup_hooks: nf_unregister_hooks(ipv4_conntrack_ops, ARRAY_SIZE(ipv4_conntrack_ops)); #endif cleanup_pernet: unregister_pernet_subsys(&ipv4_net_ops); cleanup_sockopt: nf_unregister_sockopt(&so_getorigdst); return ret; }
static int __init nf_conntrack_l3proto_ipv4_init(void) { int ret = 0; need_conntrack(); nf_defrag_ipv4_enable(); ret = nf_register_sockopt(&so_getorigdst); if (ret < 0) { printk(KERN_ERR "Unable to register netfilter socket option\n"); return ret; } ret = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_tcp4); if (ret < 0) { printk("nf_conntrack_ipv4: can't register tcp.\n"); goto cleanup_sockopt; } ret = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_udp4); if (ret < 0) { printk("nf_conntrack_ipv4: can't register udp.\n"); goto cleanup_tcp; } ret = nf_conntrack_l4proto_register(&nf_conntrack_l4proto_icmp); if (ret < 0) { printk("nf_conntrack_ipv4: can't register icmp.\n"); goto cleanup_udp; } ret = nf_conntrack_l3proto_register(&nf_conntrack_l3proto_ipv4); if (ret < 0) { printk("nf_conntrack_ipv4: can't register ipv4\n"); goto cleanup_icmp; } ret = nf_register_hooks(ipv4_conntrack_ops, ARRAY_SIZE(ipv4_conntrack_ops)); if (ret < 0) { printk("nf_conntrack_ipv4: can't register hooks.\n"); goto cleanup_ipv4; } #if defined(CONFIG_PROC_FS) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT) ret = nf_conntrack_ipv4_compat_init(); if (ret < 0) goto cleanup_hooks; #endif return ret; #if defined(CONFIG_PROC_FS) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT) cleanup_hooks: nf_unregister_hooks(ipv4_conntrack_ops, ARRAY_SIZE(ipv4_conntrack_ops)); #endif cleanup_ipv4: nf_conntrack_l3proto_unregister(&nf_conntrack_l3proto_ipv4); cleanup_icmp: nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_icmp); cleanup_udp: nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_udp4); cleanup_tcp: nf_conntrack_l4proto_unregister(&nf_conntrack_l4proto_tcp4); cleanup_sockopt: nf_unregister_sockopt(&so_getorigdst); return ret; }
static int __init init(void) { need_conntrack(); return init_or_cleanup(1); }
static int __init xt_nfp6_init(void) { need_conntrack(); return xt_register_targets(xt_nfp6_target, ARRAY_SIZE(xt_nfp6_target)); }
static int __init xt_conntrack_init(void) { need_conntrack(); return xt_register_match(&conntrack_match); }
static int init_or_cleanup(int init) { int ret = 0; need_conntrack(); if (!init) goto cleanup; #ifdef CONFIG_XFRM BUG_ON(ip_nat_decode_session != NULL); ip_nat_decode_session = nat_decode_session; #endif ret = ip_nat_rule_init(); if (ret < 0) { printk("ip_nat_init: can't setup rules.\n"); goto cleanup_decode_session; } ret = nf_register_hook(&ip_nat_in_ops); if (ret < 0) { printk("ip_nat_init: can't register in hook.\n"); goto cleanup_rule_init; } ret = nf_register_hook(&ip_nat_out_ops); if (ret < 0) { printk("ip_nat_init: can't register out hook.\n"); goto cleanup_inops; } ret = nf_register_hook(&ip_nat_adjust_in_ops); if (ret < 0) { printk("ip_nat_init: can't register adjust in hook.\n"); goto cleanup_outops; } ret = nf_register_hook(&ip_nat_adjust_out_ops); if (ret < 0) { printk("ip_nat_init: can't register adjust out hook.\n"); goto cleanup_adjustin_ops; } ret = nf_register_hook(&ip_nat_local_out_ops); if (ret < 0) { printk("ip_nat_init: can't register local out hook.\n"); goto cleanup_adjustout_ops;; } ret = nf_register_hook(&ip_nat_local_in_ops); if (ret < 0) { printk("ip_nat_init: can't register local in hook.\n"); goto cleanup_localoutops; } return ret; cleanup: nf_unregister_hook(&ip_nat_local_in_ops); cleanup_localoutops: nf_unregister_hook(&ip_nat_local_out_ops); cleanup_adjustout_ops: nf_unregister_hook(&ip_nat_adjust_out_ops); cleanup_adjustin_ops: nf_unregister_hook(&ip_nat_adjust_in_ops); cleanup_outops: nf_unregister_hook(&ip_nat_out_ops); cleanup_inops: nf_unregister_hook(&ip_nat_in_ops); cleanup_rule_init: ip_nat_rule_cleanup(); cleanup_decode_session: #ifdef CONFIG_XFRM ip_nat_decode_session = NULL; synchronize_net(); #endif return ret; }