linux/net/netfilter/xt_MARK.c
<<
>>
Prefs
   1/*
   2 *      xt_MARK - Netfilter module to modify the NFMARK field of an skb
   3 *
   4 *      (C) 1999-2001 Marc Boucher <marc@mbsi.ca>
   5 *      Copyright © CC Computer Consultants GmbH, 2007 - 2008
   6 *      Jan Engelhardt <jengelh@computergmbh.de>
   7 *
   8 *      This program is free software; you can redistribute it and/or modify
   9 *      it under the terms of the GNU General Public License version 2 as
  10 *      published by the Free Software Foundation.
  11 */
  12
  13#include <linux/module.h>
  14#include <linux/skbuff.h>
  15#include <linux/ip.h>
  16#include <net/checksum.h>
  17
  18#include <linux/netfilter/x_tables.h>
  19#include <linux/netfilter/xt_MARK.h>
  20
  21MODULE_LICENSE("GPL");
  22MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
  23MODULE_DESCRIPTION("Xtables: packet mark modification");
  24MODULE_ALIAS("ipt_MARK");
  25MODULE_ALIAS("ip6t_MARK");
  26
  27static unsigned int
  28mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
  29{
  30        const struct xt_mark_tginfo2 *info = par->targinfo;
  31
  32        skb->mark = (skb->mark & ~info->mask) ^ info->mark;
  33        return XT_CONTINUE;
  34}
  35
  36static struct xt_target mark_tg_reg __read_mostly = {
  37        .name           = "MARK",
  38        .revision       = 2,
  39        .family         = NFPROTO_UNSPEC,
  40        .target         = mark_tg,
  41        .targetsize     = sizeof(struct xt_mark_tginfo2),
  42        .me             = THIS_MODULE,
  43};
  44
  45static int __init mark_tg_init(void)
  46{
  47        return xt_register_target(&mark_tg_reg);
  48}
  49
  50static void __exit mark_tg_exit(void)
  51{
  52        xt_unregister_target(&mark_tg_reg);
  53}
  54
  55module_init(mark_tg_init);
  56module_exit(mark_tg_exit);
  57