net_sched: act_ipt forward compat with xtables
authorJamal Hadi Salim <jhs@mojatatu.com>
Sun, 28 Apr 2013 05:06:38 +0000 (05:06 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 1 May 2013 17:19:19 +0000 (13:19 -0400)
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>
net/sched/act_ipt.c

index e0f6de6..60d88b6 100644 (file)
@@ -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);
 }