netfilter: xt_recent: add an entry reaper
[pandora-kernel.git] / net / netfilter / xt_mark.c
index 1db07d8..035c468 100644 (file)
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
-MODULE_DESCRIPTION("Xtables: packet mark match");
+MODULE_DESCRIPTION("Xtables: packet mark operations");
 MODULE_ALIAS("ipt_mark");
 MODULE_ALIAS("ip6t_mark");
+MODULE_ALIAS("ipt_MARK");
+MODULE_ALIAS("ip6t_MARK");
+
+static unsigned int
+mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+{
+       const struct xt_mark_tginfo2 *info = par->targinfo;
+
+       skb->mark = (skb->mark & ~info->mask) ^ info->mark;
+       return XT_CONTINUE;
+}
 
 static bool
 mark_mt(const struct sk_buff *skb, const struct xt_match_param *par)
@@ -30,6 +41,15 @@ mark_mt(const struct sk_buff *skb, const struct xt_match_param *par)
        return ((skb->mark & info->mask) == info->mark) ^ info->invert;
 }
 
+static struct xt_target mark_tg_reg __read_mostly = {
+       .name           = "MARK",
+       .revision       = 2,
+       .family         = NFPROTO_UNSPEC,
+       .target         = mark_tg,
+       .targetsize     = sizeof(struct xt_mark_tginfo2),
+       .me             = THIS_MODULE,
+};
+
 static struct xt_match mark_mt_reg __read_mostly = {
        .name           = "mark",
        .revision       = 1,
@@ -41,12 +61,23 @@ static struct xt_match mark_mt_reg __read_mostly = {
 
 static int __init mark_mt_init(void)
 {
-       return xt_register_match(&mark_mt_reg);
+       int ret;
+
+       ret = xt_register_target(&mark_tg_reg);
+       if (ret < 0)
+               return ret;
+       ret = xt_register_match(&mark_mt_reg);
+       if (ret < 0) {
+               xt_unregister_target(&mark_tg_reg);
+               return ret;
+       }
+       return 0;
 }
 
 static void __exit mark_mt_exit(void)
 {
        xt_unregister_match(&mark_mt_reg);
+       xt_unregister_target(&mark_tg_reg);
 }
 
 module_init(mark_mt_init);