2 * This is a module which is used for setting the skb->priority field
3 * of an skb for qdisc classification.
6 /* (C) 2001-2002 Patrick McHardy <kaber@trash.net>
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.
13 #include <linux/module.h>
14 #include <linux/skbuff.h>
16 #include <net/checksum.h>
18 #include <linux/netfilter_ipv4/ip_tables.h>
19 #include <linux/netfilter_ipv4/ipt_CLASSIFY.h>
21 MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
22 MODULE_LICENSE("GPL");
23 MODULE_DESCRIPTION("iptables qdisc classification target module");
26 target(struct sk_buff **pskb,
27 const struct net_device *in,
28 const struct net_device *out,
33 const struct ipt_classify_target_info *clinfo = targinfo;
35 if((*pskb)->priority != clinfo->priority)
36 (*pskb)->priority = clinfo->priority;
42 checkentry(const char *tablename,
43 const struct ipt_entry *e,
45 unsigned int targinfosize,
46 unsigned int hook_mask)
48 if (targinfosize != IPT_ALIGN(sizeof(struct ipt_classify_target_info))){
49 printk(KERN_ERR "CLASSIFY: invalid size (%u != %Zu).\n",
51 IPT_ALIGN(sizeof(struct ipt_classify_target_info)));
55 if (hook_mask & ~((1 << NF_IP_LOCAL_OUT) | (1 << NF_IP_FORWARD) |
56 (1 << NF_IP_POST_ROUTING))) {
57 printk(KERN_ERR "CLASSIFY: only valid in LOCAL_OUT, FORWARD "
58 "and POST_ROUTING.\n");
62 if (strcmp(tablename, "mangle") != 0) {
63 printk(KERN_ERR "CLASSIFY: can only be called from "
64 "\"mangle\" table, not \"%s\".\n",
72 static struct ipt_target ipt_classify_reg = {
75 .checkentry = checkentry,
79 static int __init init(void)
81 return ipt_register_target(&ipt_classify_reg);
84 static void __exit fini(void)
86 ipt_unregister_target(&ipt_classify_reg);