int nf_conntrack_tstamp_init(struct net *net) { int ret; net->ct.sysctl_tstamp = nf_ct_tstamp; if (net_eq(net, &init_net)) { ret = nf_ct_extend_register(&tstamp_extend); if (ret < 0) { printk(KERN_ERR "nf_ct_tstamp: Unable to register " "extension\n"); goto out_extend_register; } } ret = nf_conntrack_tstamp_init_sysctl(net); if (ret < 0) goto out_sysctl; return 0; out_sysctl: if (net_eq(net, &init_net)) nf_ct_extend_unregister(&tstamp_extend); out_extend_register: return ret; }
static int __init nf_nat_init(void) { int ret; ret = rhltable_init(&nf_nat_bysource_table, &nf_nat_bysource_params); if (ret) return ret; ret = nf_ct_extend_register(&nat_extend); if (ret < 0) { rhltable_destroy(&nf_nat_bysource_table); printk(KERN_ERR "nf_nat_core: Unable to register extension\n"); return ret; } ret = register_pernet_subsys(&nf_nat_net_ops); if (ret < 0) goto cleanup_extend; nf_ct_helper_expectfn_register(&follow_master_nat); BUG_ON(nfnetlink_parse_nat_setup_hook != NULL); RCU_INIT_POINTER(nfnetlink_parse_nat_setup_hook, nfnetlink_parse_nat_setup); #ifdef CONFIG_XFRM BUG_ON(nf_nat_decode_session_hook != NULL); RCU_INIT_POINTER(nf_nat_decode_session_hook, __nf_nat_decode_session); #endif return 0; cleanup_extend: rhltable_destroy(&nf_nat_bysource_table); nf_ct_extend_unregister(&nat_extend); return ret; }
static void __exit nf_nat_cleanup(void) { unsigned int i; unregister_pernet_subsys(&nf_nat_net_ops); nf_ct_extend_unregister(&nat_extend); nf_ct_helper_expectfn_unregister(&follow_master_nat); RCU_INIT_POINTER(nfnetlink_parse_nat_setup_hook, NULL); #ifdef CONFIG_XFRM RCU_INIT_POINTER(nf_nat_decode_session_hook, NULL); #endif for (i = 0; i < NFPROTO_NUMPROTO; i++) kfree(nf_nat_l4protos[i]); rhashtable_destroy(&nf_nat_bysource_table); }
static int __init synproxy_core_init(void) { int err; err = nf_ct_extend_register(&nf_ct_synproxy_extend); if (err < 0) goto err1; err = register_pernet_subsys(&synproxy_net_ops); if (err < 0) goto err2; return 0; err2: nf_ct_extend_unregister(&nf_ct_synproxy_extend); err1: return err; }
void nf_conntrack_tstamp_fini(struct net *net) { nf_conntrack_tstamp_fini_sysctl(net); if (net_eq(net, &init_net)) nf_ct_extend_unregister(&tstamp_extend); }
static void __exit synproxy_core_exit(void) { unregister_pernet_subsys(&synproxy_net_ops); nf_ct_extend_unregister(&nf_ct_synproxy_extend); }
void nf_conntrack_timeout_fini(void) { nf_ct_extend_unregister(&timeout_extend); }
void nf_conntrack_acct_fini(void) { nf_ct_extend_unregister(&acct_extend); }
void nf_conntrack_seqadj_fini(void) { nf_ct_extend_unregister(&nf_ct_seqadj_extend); }
void nf_conntrack_tstamp_fini(void) { nf_ct_extend_unregister(&tstamp_extend); }