net_sched: act_ipt forward compat with xtables

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>
This commit is contained in:
Jamal Hadi Salim 2013-04-28 05:06:38 +00:00 committed by David S. Miller
parent fe86d71416
commit 0dcffd0964

View file

@ -8,7 +8,7 @@
* as published by the Free Software Foundation; either version * as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later 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> #include <linux/types.h>
@ -303,17 +303,44 @@ static struct tc_action_ops act_ipt_ops = {
.walk = tcf_generic_walker .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_DESCRIPTION("Iptables target actions");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_ALIAS("act_xt");
static int __init ipt_init_module(void) 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) static void __exit ipt_cleanup_module(void)
{ {
tcf_unregister_action(&act_xt_ops);
tcf_unregister_action(&act_ipt_ops); tcf_unregister_action(&act_ipt_ops);
} }