]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/netfilter/nf_conntrack_proto_udplite.c
netfilter: conntrack: built-in support for UDPlite
[karo-tx-linux.git] / net / netfilter / nf_conntrack_proto_udplite.c
index 7808604c70a219053c09afa388015816cf6ae008..c35f7bf05d8c09d1bd73caec1cb239900d403482 100644 (file)
@@ -9,7 +9,6 @@
 
 #include <linux/types.h>
 #include <linux/timer.h>
-#include <linux/module.h>
 #include <linux/udp.h>
 #include <linux/seq_file.h>
 #include <linux/skbuff.h>
 #include <net/netfilter/nf_conntrack_ecache.h>
 #include <net/netfilter/nf_log.h>
 
-enum udplite_conntrack {
-       UDPLITE_CT_UNREPLIED,
-       UDPLITE_CT_REPLIED,
-       UDPLITE_CT_MAX
-};
-
 static unsigned int udplite_timeouts[UDPLITE_CT_MAX] = {
        [UDPLITE_CT_UNREPLIED]  = 30*HZ,
        [UDPLITE_CT_REPLIED]    = 180*HZ,
 };
 
-static unsigned int udplite_net_id __read_mostly;
-struct udplite_net {
-       struct nf_proto_net pn;
-       unsigned int timeouts[UDPLITE_CT_MAX];
-};
-
-static inline struct udplite_net *udplite_pernet(struct net *net)
+static inline struct nf_udplite_net *udplite_pernet(struct net *net)
 {
-       return net_generic(net, udplite_net_id);
+       return &net->ct.nf_ct_proto.udplite;
 }
 
 static bool udplite_pkt_to_tuple(const struct sk_buff *skb,
@@ -178,7 +165,7 @@ static int udplite_timeout_nlattr_to_obj(struct nlattr *tb[],
                                         struct net *net, void *data)
 {
        unsigned int *timeouts = data;
-       struct udplite_net *un = udplite_pernet(net);
+       struct nf_udplite_net *un = udplite_pernet(net);
 
        /* set default timeouts for UDPlite. */
        timeouts[UDPLITE_CT_UNREPLIED] = un->timeouts[UDPLITE_CT_UNREPLIED];
@@ -237,7 +224,7 @@ static struct ctl_table udplite_sysctl_table[] = {
 #endif /* CONFIG_SYSCTL */
 
 static int udplite_kmemdup_sysctl_table(struct nf_proto_net *pn,
-                                       struct udplite_net *un)
+                                       struct nf_udplite_net *un)
 {
 #ifdef CONFIG_SYSCTL
        if (pn->ctl_table)
@@ -257,7 +244,7 @@ static int udplite_kmemdup_sysctl_table(struct nf_proto_net *pn,
 
 static int udplite_init_net(struct net *net, u_int16_t proto)
 {
-       struct udplite_net *un = udplite_pernet(net);
+       struct nf_udplite_net *un = udplite_pernet(net);
        struct nf_proto_net *pn = &un->pn;
 
        if (!pn->users) {
@@ -270,7 +257,7 @@ static int udplite_init_net(struct net *net, u_int16_t proto)
        return udplite_kmemdup_sysctl_table(pn, un);
 }
 
-static struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite4 __read_mostly =
+struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite4 __read_mostly =
 {
        .l3proto                = PF_INET,
        .l4proto                = IPPROTO_UDPLITE,
@@ -299,11 +286,11 @@ static struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite4 __read_mostly =
                .nla_policy     = udplite_timeout_nla_policy,
        },
 #endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
-       .net_id                 = &udplite_net_id,
        .init_net               = udplite_init_net,
 };
+EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_udplite4);
 
-static struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite6 __read_mostly =
+struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite6 __read_mostly =
 {
        .l3proto                = PF_INET6,
        .l4proto                = IPPROTO_UDPLITE,
@@ -332,54 +319,6 @@ static struct nf_conntrack_l4proto nf_conntrack_l4proto_udplite6 __read_mostly =
                .nla_policy     = udplite_timeout_nla_policy,
        },
 #endif /* CONFIG_NF_CT_NETLINK_TIMEOUT */
-       .net_id                 = &udplite_net_id,
        .init_net               = udplite_init_net,
 };
-
-static struct nf_conntrack_l4proto *udplite_proto[] = {
-       &nf_conntrack_l4proto_udplite4,
-       &nf_conntrack_l4proto_udplite6,
-};
-
-static int udplite_net_init(struct net *net)
-{
-       return nf_ct_l4proto_pernet_register(net, udplite_proto,
-                                            ARRAY_SIZE(udplite_proto));
-}
-
-static void udplite_net_exit(struct net *net)
-{
-       nf_ct_l4proto_pernet_unregister(net, udplite_proto,
-                                       ARRAY_SIZE(udplite_proto));
-}
-
-static struct pernet_operations udplite_net_ops = {
-       .init = udplite_net_init,
-       .exit = udplite_net_exit,
-       .id   = &udplite_net_id,
-       .size = sizeof(struct udplite_net),
-};
-
-static int __init nf_conntrack_proto_udplite_init(void)
-{
-       int ret;
-
-       ret = register_pernet_subsys(&udplite_net_ops);
-       if (ret < 0)
-               return ret;
-       ret = nf_ct_l4proto_register(udplite_proto, ARRAY_SIZE(udplite_proto));
-       if (ret < 0)
-               unregister_pernet_subsys(&udplite_net_ops);
-       return ret;
-}
-
-static void __exit nf_conntrack_proto_udplite_exit(void)
-{
-       nf_ct_l4proto_unregister(udplite_proto, ARRAY_SIZE(udplite_proto));
-       unregister_pernet_subsys(&udplite_net_ops);
-}
-
-module_init(nf_conntrack_proto_udplite_init);
-module_exit(nf_conntrack_proto_udplite_exit);
-
-MODULE_LICENSE("GPL");
+EXPORT_SYMBOL_GPL(nf_conntrack_l4proto_udplite6);