1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * This is a module which is used for setting the skb->priority field |
4 | * of an skb for qdisc classification. |
5 | */ |
6 | |
7 | /* (C) 2001-2002 Patrick McHardy <kaber@trash.net> |
8 | */ |
9 | |
10 | #include <linux/module.h> |
11 | #include <linux/skbuff.h> |
12 | #include <linux/ip.h> |
13 | #include <net/checksum.h> |
14 | |
15 | #include <linux/netfilter_ipv4.h> |
16 | #include <linux/netfilter_ipv6.h> |
17 | #include <linux/netfilter/x_tables.h> |
18 | #include <linux/netfilter/xt_CLASSIFY.h> |
19 | #include <linux/netfilter_arp.h> |
20 | |
21 | MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>" ); |
22 | MODULE_LICENSE("GPL" ); |
23 | MODULE_DESCRIPTION("Xtables: Qdisc classification" ); |
24 | MODULE_ALIAS("ipt_CLASSIFY" ); |
25 | MODULE_ALIAS("ip6t_CLASSIFY" ); |
26 | MODULE_ALIAS("arpt_CLASSIFY" ); |
27 | |
28 | static unsigned int |
29 | classify_tg(struct sk_buff *skb, const struct xt_action_param *par) |
30 | { |
31 | const struct xt_classify_target_info *clinfo = par->targinfo; |
32 | |
33 | skb->priority = clinfo->priority; |
34 | return XT_CONTINUE; |
35 | } |
36 | |
37 | static struct xt_target classify_tg_reg[] __read_mostly = { |
38 | { |
39 | .name = "CLASSIFY" , |
40 | .revision = 0, |
41 | .family = NFPROTO_UNSPEC, |
42 | .hooks = (1 << NF_INET_LOCAL_OUT) | (1 << NF_INET_FORWARD) | |
43 | (1 << NF_INET_POST_ROUTING), |
44 | .target = classify_tg, |
45 | .targetsize = sizeof(struct xt_classify_target_info), |
46 | .me = THIS_MODULE, |
47 | }, |
48 | { |
49 | .name = "CLASSIFY" , |
50 | .revision = 0, |
51 | .family = NFPROTO_ARP, |
52 | .hooks = (1 << NF_ARP_OUT) | (1 << NF_ARP_FORWARD), |
53 | .target = classify_tg, |
54 | .targetsize = sizeof(struct xt_classify_target_info), |
55 | .me = THIS_MODULE, |
56 | }, |
57 | }; |
58 | |
59 | static int __init classify_tg_init(void) |
60 | { |
61 | return xt_register_targets(target: classify_tg_reg, ARRAY_SIZE(classify_tg_reg)); |
62 | } |
63 | |
64 | static void __exit classify_tg_exit(void) |
65 | { |
66 | xt_unregister_targets(target: classify_tg_reg, ARRAY_SIZE(classify_tg_reg)); |
67 | } |
68 | |
69 | module_init(classify_tg_init); |
70 | module_exit(classify_tg_exit); |
71 | |