]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - net/ipv4/netfilter/iptable_filter.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[mv-sheeva.git] / net / ipv4 / netfilter / iptable_filter.c
index c14bb85db1d9b2ff773c7e527fb3ad75dcaf3aa8..55392466daa49fd455a4c28d6b168c388db2eff2 100644 (file)
@@ -13,6 +13,7 @@
 #include <linux/module.h>
 #include <linux/moduleparam.h>
 #include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/slab.h>
 #include <net/ip.h>
 
 MODULE_LICENSE("GPL");
@@ -23,36 +24,6 @@ MODULE_DESCRIPTION("iptables filter table");
                            (1 << NF_INET_FORWARD) | \
                            (1 << NF_INET_LOCAL_OUT))
 
-static struct
-{
-       struct ipt_replace repl;
-       struct ipt_standard entries[3];
-       struct ipt_error term;
-} initial_table __net_initdata = {
-       .repl = {
-               .name = "filter",
-               .valid_hooks = FILTER_VALID_HOOKS,
-               .num_entries = 4,
-               .size = sizeof(struct ipt_standard) * 3 + sizeof(struct ipt_error),
-               .hook_entry = {
-                       [NF_INET_LOCAL_IN] = 0,
-                       [NF_INET_FORWARD] = sizeof(struct ipt_standard),
-                       [NF_INET_LOCAL_OUT] = sizeof(struct ipt_standard) * 2,
-               },
-               .underflow = {
-                       [NF_INET_LOCAL_IN] = 0,
-                       [NF_INET_FORWARD] = sizeof(struct ipt_standard),
-                       [NF_INET_LOCAL_OUT] = sizeof(struct ipt_standard) * 2,
-               },
-       },
-       .entries = {
-               IPT_STANDARD_INIT(NF_ACCEPT),   /* LOCAL_IN */
-               IPT_STANDARD_INIT(NF_ACCEPT),   /* FORWARD */
-               IPT_STANDARD_INIT(NF_ACCEPT),   /* LOCAL_OUT */
-       },
-       .term = IPT_ERROR_INIT,                 /* ERROR */
-};
-
 static const struct xt_table packet_filter = {
        .name           = "filter",
        .valid_hooks    = FILTER_VALID_HOOKS,
@@ -86,9 +57,18 @@ module_param(forward, bool, 0000);
 
 static int __net_init iptable_filter_net_init(struct net *net)
 {
-       /* Register table */
+       struct ipt_replace *repl;
+
+       repl = ipt_alloc_initial_table(&packet_filter);
+       if (repl == NULL)
+               return -ENOMEM;
+       /* Entry 1 is the FORWARD hook */
+       ((struct ipt_standard *)repl->entries)[1].target.verdict =
+               -forward - 1;
+
        net->ipv4.iptable_filter =
-               ipt_register_table(net, &packet_filter, &initial_table.repl);
+               ipt_register_table(net, &packet_filter, repl);
+       kfree(repl);
        if (IS_ERR(net->ipv4.iptable_filter))
                return PTR_ERR(net->ipv4.iptable_filter);
        return 0;
@@ -113,9 +93,6 @@ static int __init iptable_filter_init(void)
                return -EINVAL;
        }
 
-       /* Entry 1 is the FORWARD hook */
-       initial_table.entries[1].target.verdict = -forward - 1;
-
        ret = register_pernet_subsys(&iptable_filter_net_ops);
        if (ret < 0)
                return ret;