]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - net/netfilter/nf_conntrack_proto_sctp.c
netfilter: nf_tables: notify internal updates of stateful objects
[mirror_ubuntu-artful-kernel.git] / net / netfilter / nf_conntrack_proto_sctp.c
index 982ea62606c7a150a69d2af19ecd72ca9bfd71ef..a0efde38da44742ccab5578f5d726afbf5758f41 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/types.h>
 #include <linux/timer.h>
 #include <linux/netfilter.h>
-#include <linux/module.h>
 #include <linux/in.h>
 #include <linux/ip.h>
 #include <linux/sctp.h>
@@ -144,15 +143,9 @@ static const u8 sctp_conntracks[2][11][SCTP_CONNTRACK_MAX] = {
        }
 };
 
-static int sctp_net_id __read_mostly;
-struct sctp_net {
-       struct nf_proto_net pn;
-       unsigned int timeouts[SCTP_CONNTRACK_MAX];
-};
-
-static inline struct sctp_net *sctp_pernet(struct net *net)
+static inline struct nf_sctp_net *sctp_pernet(struct net *net)
 {
-       return net_generic(net, sctp_net_id);
+       return &net->ct.nf_ct_proto.sctp;
 }
 
 static bool sctp_pkt_to_tuple(const struct sk_buff *skb, unsigned int dataoff,
@@ -600,7 +593,7 @@ static int sctp_timeout_nlattr_to_obj(struct nlattr *tb[],
                                      struct net *net, void *data)
 {
        unsigned int *timeouts = data;
-       struct sctp_net *sn = sctp_pernet(net);
+       struct nf_sctp_net *sn = sctp_pernet(net);
        int i;
 
        /* set default SCTP timeouts. */
@@ -708,7 +701,7 @@ static struct ctl_table sctp_sysctl_table[] = {
 #endif
 
 static int sctp_kmemdup_sysctl_table(struct nf_proto_net *pn,
-                                    struct sctp_net *sn)
+                                    struct nf_sctp_net *sn)
 {
 #ifdef CONFIG_SYSCTL
        if (pn->ctl_table)
@@ -735,7 +728,7 @@ static int sctp_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int sctp_init_net(struct net *net, u_int16_t proto)
 {
-       struct sctp_net *sn = sctp_pernet(net);
+       struct nf_sctp_net *sn = sctp_pernet(net);
        struct nf_proto_net *pn = &sn->pn;
 
        if (!pn->users) {
@@ -748,7 +741,7 @@ static int sctp_init_net(struct net *net, u_int16_t proto)
        return sctp_kmemdup_sysctl_table(pn, sn);
 }
 
-static struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 __read_mostly = {
+struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 __read_mostly = {
        .l3proto                = PF_INET,
        .l4proto                = IPPROTO_SCTP,
        .name                   = "sctp",
@@ -778,11 +771,11 @@ static struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp4 __read_mostly = {
                .nla_policy     = sctp_timeout_nla_policy,
        },
 #endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
-       .net_id                 = &sctp_net_id,
        .init_net               = sctp_init_net,
 };
+EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_sctp4);
 
-static struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp6 __read_mostly = {
+struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp6 __read_mostly = {
        .l3proto                = PF_INET6,
        .l4proto                = IPPROTO_SCTP,
        .name                   = "sctp",
@@ -812,81 +805,6 @@ static struct nf_conntrack_l4proto nf_conntrack_l4proto_sctp6 __read_mostly = {
        },
 #endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
 #endif
-       .net_id                 = &sctp_net_id,
        .init_net               = sctp_init_net,
 };
-
-static int sctp_net_init(struct net *net)
-{
-       int ret = 0;
-
-       ret = nf_ct_l4proto_pernet_register(net, &nf_conntrack_l4proto_sctp4);
-       if (ret < 0) {
-               pr_err("nf_conntrack_sctp4: pernet registration failed.\n");
-               goto out;
-       }
-       ret = nf_ct_l4proto_pernet_register(net, &nf_conntrack_l4proto_sctp6);
-       if (ret < 0) {
-               pr_err("nf_conntrack_sctp6: pernet registration failed.\n");
-               goto cleanup_sctp4;
-       }
-       return 0;
-
-cleanup_sctp4:
-       nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_sctp4);
-out:
-       return ret;
-}
-
-static void sctp_net_exit(struct net *net)
-{
-       nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_sctp6);
-       nf_ct_l4proto_pernet_unregister(net, &nf_conntrack_l4proto_sctp4);
-}
-
-static struct pernet_operations sctp_net_ops = {
-       .init = sctp_net_init,
-       .exit = sctp_net_exit,
-       .id   = &sctp_net_id,
-       .size = sizeof(struct sctp_net),
-};
-
-static int __init nf_conntrack_proto_sctp_init(void)
-{
-       int ret;
-
-       ret = register_pernet_subsys(&sctp_net_ops);
-       if (ret < 0)
-               goto out_pernet;
-
-       ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_sctp4);
-       if (ret < 0)
-               goto out_sctp4;
-
-       ret = nf_ct_l4proto_register(&nf_conntrack_l4proto_sctp6);
-       if (ret < 0)
-               goto out_sctp6;
-
-       return 0;
-out_sctp6:
-       nf_ct_l4proto_unregister(&nf_conntrack_l4proto_sctp4);
-out_sctp4:
-       unregister_pernet_subsys(&sctp_net_ops);
-out_pernet:
-       return ret;
-}
-
-static void __exit nf_conntrack_proto_sctp_fini(void)
-{
-       nf_ct_l4proto_unregister(&nf_conntrack_l4proto_sctp6);
-       nf_ct_l4proto_unregister(&nf_conntrack_l4proto_sctp4);
-       unregister_pernet_subsys(&sctp_net_ops);
-}
-
-module_init(nf_conntrack_proto_sctp_init);
-module_exit(nf_conntrack_proto_sctp_fini);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Kiran Kumar Immidi");
-MODULE_DESCRIPTION("Netfilter connection tracking protocol helper for SCTP");
-MODULE_ALIAS("ip_conntrack_proto_sctp");
+EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_sctp6);