diff options
Diffstat (limited to 'net/ipv6/netfilter/ip6table_filter.c')
-rw-r--r-- | net/ipv6/netfilter/ip6table_filter.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/net/ipv6/netfilter/ip6table_filter.c b/net/ipv6/netfilter/ip6table_filter.c index 36b72cafc227..cf46f3f78899 100644 --- a/net/ipv6/netfilter/ip6table_filter.c +++ b/net/ipv6/netfilter/ip6table_filter.c @@ -26,7 +26,6 @@ static const struct xt_table packet_filter = { .valid_hooks = FILTER_VALID_HOOKS, .me = THIS_MODULE, .af = NFPROTO_IPV6, - .priority = NF_IP6_PRI_FILTER, }; /* The work comes in here from netfilter.c. */ @@ -40,7 +39,29 @@ ip6table_filter_hook(unsigned int hook, struct sk_buff *skb, return ip6t_do_table(skb, hook, in, out, net->ipv6.ip6table_filter); } -static struct nf_hook_ops *filter_ops __read_mostly; +static struct nf_hook_ops ip6t_ops[] __read_mostly = { + { + .hook = ip6table_filter_hook, + .owner = THIS_MODULE, + .pf = NFPROTO_IPV6, + .hooknum = NF_INET_LOCAL_IN, + .priority = NF_IP6_PRI_FILTER, + }, + { + .hook = ip6table_filter_hook, + .owner = THIS_MODULE, + .pf = NFPROTO_IPV6, + .hooknum = NF_INET_FORWARD, + .priority = NF_IP6_PRI_FILTER, + }, + { + .hook = ip6table_filter_hook, + .owner = THIS_MODULE, + .pf = NFPROTO_IPV6, + .hooknum = NF_INET_LOCAL_OUT, + .priority = NF_IP6_PRI_FILTER, + }, +}; /* Default to forward because I got too much mail already. */ static int forward = NF_ACCEPT; @@ -89,11 +110,9 @@ static int __init ip6table_filter_init(void) return ret; /* Register hooks */ - filter_ops = xt_hook_link(&packet_filter, ip6table_filter_hook); - if (IS_ERR(filter_ops)) { - ret = PTR_ERR(filter_ops); + ret = nf_register_hooks(ip6t_ops, ARRAY_SIZE(ip6t_ops)); + if (ret < 0) goto cleanup_table; - } return ret; @@ -104,7 +123,7 @@ static int __init ip6table_filter_init(void) static void __exit ip6table_filter_fini(void) { - xt_hook_unlink(&packet_filter, filter_ops); + nf_unregister_hooks(ip6t_ops, ARRAY_SIZE(ip6t_ops)); unregister_pernet_subsys(&ip6table_filter_net_ops); } |