static void ipv4_net_exit(struct net *net) { nf_ct_l3proto_pernet_unregister(net, &nf_conntrack_l3proto_ipv4); nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_icmp); nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_udp4); nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_tcp4); }
static int ipv4_net_init(struct net *net) { int ret = 0; ret = nf_ct_l4proto_pernet_register(net, &nf_conntrack_l4proto_tcp4); if (ret < 0) { pr_err("nf_conntrack_tcp4: pernet registration failed\n"); goto out_tcp; } ret = nf_ct_l4proto_pernet_register(net, &nf_conntrack_l4proto_udp4); if (ret < 0) { pr_err("nf_conntrack_udp4: pernet registration failed\n"); goto out_udp; } ret = nf_ct_l4proto_pernet_register(net, &nf_conntrack_l4proto_icmp); if (ret < 0) { pr_err("nf_conntrack_icmp4: pernet registration failed\n"); goto out_icmp; } ret = nf_ct_l3proto_pernet_register(net, &nf_conntrack_l3proto_ipv4); if (ret < 0) { pr_err("nf_conntrack_ipv4: pernet registration failed\n"); goto out_ipv4; } return 0; out_ipv4: nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_icmp); out_icmp: nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_udp4); out_udp: nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_tcp4); out_tcp: return ret; }
void nf_conntrack_proto_pernet_fini(struct net *net) { struct nf_proto_net *pn = nf_ct_l4proto_net(net, &nf_conntrack_l4proto_generic); nf_ct_l4proto_pernet_unregister(net, builtin_l4proto, ARRAY_SIZE(builtin_l4proto)); pn->users--; nf_ct_l4proto_unregister_sysctl(net, pn, &nf_conntrack_l4proto_generic); }
static __net_init int dccp_net_init(struct net *net) { int ret = 0; ret = nf_ct_l4proto_pernet_register(net, &dccp_proto4); if (ret < 0) { pr_err("nf_conntrack_dccp4: pernet registration failed.\n"); goto out; } ret = nf_ct_l4proto_pernet_register(net, &dccp_proto6); if (ret < 0) { pr_err("nf_conntrack_dccp6: pernet registration failed.\n"); goto cleanup_dccp4; } return 0; cleanup_dccp4: nf_ct_l4proto_pernet_unregister(net, &dccp_proto4); out: return ret; }
int nf_ct_l4proto_pernet_register(struct net *net, const struct nf_conntrack_l4proto *const l4proto[], unsigned int num_proto) { int ret = -EINVAL; unsigned int i; for (i = 0; i < num_proto; i++) { ret = nf_ct_l4proto_pernet_register_one(net, l4proto[i]); if (ret < 0) break; } if (i != num_proto) { pr_err("nf_conntrack_proto_%d %d: pernet registration failed\n", l4proto[i]->l4proto, l4proto[i]->l3proto == PF_INET6 ? 6 : 4); nf_ct_l4proto_pernet_unregister(net, l4proto, i); } return ret; }
static __net_exit void dccp_net_exit(struct net *net) { nf_ct_l4proto_pernet_unregister(net, &dccp_proto6); nf_ct_l4proto_pernet_unregister(net, &dccp_proto4); }