static int nf_ct_l4proto_register_sysctl(struct nf_conntrack_l4proto *l4proto) { int err = 0; #ifdef CONFIG_SYSCTL if (l4proto->ctl_table != NULL) { err = nf_ct_register_sysctl(l4proto->ctl_table_header, nf_net_netfilter_sysctl_path, l4proto->ctl_table, l4proto->ctl_table_users); if (err < 0) goto out; } #ifdef CONFIG_NF_CONNTRACK_PROC_COMPAT if (l4proto->ctl_compat_table != NULL) { err = nf_ct_register_sysctl(&l4proto->ctl_compat_table_header, nf_net_ipv4_netfilter_sysctl_path, l4proto->ctl_compat_table, NULL); if (err == 0) goto out; nf_ct_unregister_sysctl(l4proto->ctl_table_header, l4proto->ctl_table, l4proto->ctl_table_users); } #endif /* CONFIG_NF_CONNTRACK_PROC_COMPAT */ out: #endif /* CONFIG_SYSCTL */ return err; }
static int nf_ct_l4proto_register_sysctl(struct net *net, struct nf_proto_net *pn, struct nf_conntrack_l4proto *l4proto) { int err = 0; #ifdef CONFIG_SYSCTL if (pn->ctl_table != NULL) { err = nf_ct_register_sysctl(net, &pn->ctl_table_header, "net/netfilter", pn->ctl_table); if (err < 0) { if (!pn->users) { kfree(pn->ctl_table); pn->ctl_table = NULL; } } } #ifdef CONFIG_NF_CONNTRACK_PROC_COMPAT if (l4proto->l3proto != AF_INET6 && pn->ctl_compat_table != NULL) { if (err < 0) { nf_ct_kfree_compat_sysctl_table(pn); goto out; } err = nf_ct_register_sysctl(net, &pn->ctl_compat_header, "net/ipv4/netfilter", pn->ctl_compat_table); if (err == 0) goto out; nf_ct_kfree_compat_sysctl_table(pn); nf_ct_unregister_sysctl(&pn->ctl_table_header, &pn->ctl_table, pn->users); } out: #endif /* CONFIG_NF_CONNTRACK_PROC_COMPAT */ #endif /* CONFIG_SYSCTL */ return err; }
static int nf_ct_l3proto_register_sysctl(struct nf_conntrack_l3proto *l3proto) { int err = 0; #ifdef CONFIG_SYSCTL if (l3proto->ctl_table != NULL) { err = nf_ct_register_sysctl(&l3proto->ctl_table_header, l3proto->ctl_table_path, l3proto->ctl_table, NULL); } #endif return err; }
static int nf_ct_l3proto_register_sysctl(struct net *net, struct nf_conntrack_l3proto *l3proto) { int err = 0; struct nf_ip_net *in = nf_ct_l3proto_net(net, l3proto); /* nf_conntrack_l3proto_ipv6 doesn't support sysctl */ if (in == NULL) return 0; #if defined(CONFIG_SYSCTL) && defined(CONFIG_NF_CONNTRACK_PROC_COMPAT) if (in->ctl_table != NULL) { err = nf_ct_register_sysctl(net, &in->ctl_table_header, l3proto->ctl_table_path, in->ctl_table); if (err < 0) { kfree(in->ctl_table); in->ctl_table = NULL; } } #endif return err; }
static int nf_ct_l4proto_register_sysctl(struct net *net, struct nf_proto_net *pn, const struct nf_conntrack_l4proto *l4proto) { int err = 0; #ifdef CONFIG_SYSCTL if (pn->ctl_table != NULL) { err = nf_ct_register_sysctl(net, &pn->ctl_table_header, "net/netfilter", pn->ctl_table); if (err < 0) { if (!pn->users) { kfree(pn->ctl_table); pn->ctl_table = NULL; } } } #endif /* CONFIG_SYSCTL */ return err; }