| From 1e40c6ebc0f1640b78e0f1f18d4ef0827d349512 Mon Sep 17 00:00:00 2001 |
| From: Jamal Hadi Salim <jhs@mojatatu.com> |
| Date: Sun, 28 Apr 2013 05:06:38 +0000 |
| Subject: net_sched: act_ipt forward compat with xtables |
| |
| |
| From: Jamal Hadi Salim <jhs@mojatatu.com> |
| |
| [ Upstream commit 0dcffd09641f3abb21ac5cabc61542ab289d1a3c ] |
| |
| Deal with changes in newer xtables while maintaining backward |
| compatibility. Thanks to Jan Engelhardt for suggestions. |
| |
| Signed-off-by: Jamal Hadi Salim <jhs@mojatatu.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/sched/act_ipt.c | 33 ++++++++++++++++++++++++++++++--- |
| 1 file changed, 30 insertions(+), 3 deletions(-) |
| |
| --- a/net/sched/act_ipt.c |
| +++ b/net/sched/act_ipt.c |
| @@ -8,7 +8,7 @@ |
| * as published by the Free Software Foundation; either version |
| * 2 of the License, or (at your option) any later version. |
| * |
| - * Copyright: Jamal Hadi Salim (2002-4) |
| + * Copyright: Jamal Hadi Salim (2002-13) |
| */ |
| |
| #include <linux/types.h> |
| @@ -303,17 +303,44 @@ static struct tc_action_ops act_ipt_ops |
| .walk = tcf_generic_walker |
| }; |
| |
| -MODULE_AUTHOR("Jamal Hadi Salim(2002-4)"); |
| +static struct tc_action_ops act_xt_ops = { |
| + .kind = "xt", |
| + .hinfo = &ipt_hash_info, |
| + .type = TCA_ACT_IPT, |
| + .capab = TCA_CAP_NONE, |
| + .owner = THIS_MODULE, |
| + .act = tcf_ipt, |
| + .dump = tcf_ipt_dump, |
| + .cleanup = tcf_ipt_cleanup, |
| + .lookup = tcf_hash_search, |
| + .init = tcf_ipt_init, |
| + .walk = tcf_generic_walker |
| +}; |
| + |
| +MODULE_AUTHOR("Jamal Hadi Salim(2002-13)"); |
| MODULE_DESCRIPTION("Iptables target actions"); |
| MODULE_LICENSE("GPL"); |
| +MODULE_ALIAS("act_xt"); |
| |
| static int __init ipt_init_module(void) |
| { |
| - return tcf_register_action(&act_ipt_ops); |
| + int ret1, ret2; |
| + ret1 = tcf_register_action(&act_xt_ops); |
| + if (ret1 < 0) |
| + printk("Failed to load xt action\n"); |
| + ret2 = tcf_register_action(&act_ipt_ops); |
| + if (ret2 < 0) |
| + printk("Failed to load ipt action\n"); |
| + |
| + if (ret1 < 0 && ret2 < 0) |
| + return ret1; |
| + else |
| + return 0; |
| } |
| |
| static void __exit ipt_cleanup_module(void) |
| { |
| + tcf_unregister_action(&act_xt_ops); |
| tcf_unregister_action(&act_ipt_ops); |
| } |
| |