]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/netfilter/iptable_filter.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
[~andy/linux] / net / ipv4 / netfilter / iptable_filter.c
index c14bb85db1d9b2ff773c7e527fb3ad75dcaf3aa8..c8dc9800d62066d593a4392ccb30fa1d9bbbd0cf 100644 (file)
@@ -23,36 +23,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 +56,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 +92,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;