diff options
author | Jan Engelhardt <jengelh@medozas.de> | 2009-02-18 12:39:31 -0500 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2009-02-18 12:39:31 -0500 |
commit | cfac5ef7b92a2d504563989ecd0beb563920444b (patch) | |
tree | d0d7ef26dc3eeaf0ab72494814665a7c1565ebd3 | |
parent | 563d36eb3fb22dd04da9aa6f12e1b9ba0ac115f3 (diff) |
netfilter: Combine ipt_ttl and ip6t_hl source
Signed-off-by: Jan Engelhardt <jengelh@medozas.de>
Signed-off-by: Patrick McHardy <kaber@trash.net>
-rw-r--r-- | net/ipv4/netfilter/Kconfig | 9 | ||||
-rw-r--r-- | net/ipv4/netfilter/Makefile | 1 | ||||
-rw-r--r-- | net/ipv4/netfilter/ipt_ttl.c | 63 | ||||
-rw-r--r-- | net/ipv6/netfilter/Kconfig | 9 | ||||
-rw-r--r-- | net/ipv6/netfilter/Makefile | 1 | ||||
-rw-r--r-- | net/ipv6/netfilter/ip6t_hl.c | 68 | ||||
-rw-r--r-- | net/netfilter/Kconfig | 8 | ||||
-rw-r--r-- | net/netfilter/Makefile | 1 | ||||
-rw-r--r-- | net/netfilter/xt_hl.c | 108 |
9 files changed, 117 insertions, 151 deletions
diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig index 3ad9f43b4c45..40ad41f19b72 100644 --- a/net/ipv4/netfilter/Kconfig +++ b/net/ipv4/netfilter/Kconfig | |||
@@ -92,15 +92,6 @@ config IP_NF_MATCH_ECN | |||
92 | 92 | ||
93 | To compile it as a module, choose M here. If unsure, say N. | 93 | To compile it as a module, choose M here. If unsure, say N. |
94 | 94 | ||
95 | config IP_NF_MATCH_TTL | ||
96 | tristate '"ttl" match support' | ||
97 | depends on NETFILTER_ADVANCED | ||
98 | help | ||
99 | This adds CONFIG_IP_NF_MATCH_TTL option, which enabled the user | ||
100 | to match packets by their TTL value. | ||
101 | |||
102 | To compile it as a module, choose M here. If unsure, say N. | ||
103 | |||
104 | # `filter', generic and specific targets | 95 | # `filter', generic and specific targets |
105 | config IP_NF_FILTER | 96 | config IP_NF_FILTER |
106 | tristate "Packet filtering" | 97 | tristate "Packet filtering" |
diff --git a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile index 20b0c37155fb..48111594ee9b 100644 --- a/net/ipv4/netfilter/Makefile +++ b/net/ipv4/netfilter/Makefile | |||
@@ -51,7 +51,6 @@ obj-$(CONFIG_IP_NF_SECURITY) += iptable_security.o | |||
51 | obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o | 51 | obj-$(CONFIG_IP_NF_MATCH_ADDRTYPE) += ipt_addrtype.o |
52 | obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o | 52 | obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o |
53 | obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o | 53 | obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o |
54 | obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o | ||
55 | 54 | ||
56 | # targets | 55 | # targets |
57 | obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o | 56 | obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o |
diff --git a/net/ipv4/netfilter/ipt_ttl.c b/net/ipv4/netfilter/ipt_ttl.c deleted file mode 100644 index 297f1cbf4ff5..000000000000 --- a/net/ipv4/netfilter/ipt_ttl.c +++ /dev/null | |||
@@ -1,63 +0,0 @@ | |||
1 | /* IP tables module for matching the value of the TTL | ||
2 | * | ||
3 | * (C) 2000,2001 by Harald Welte <laforge@netfilter.org> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify | ||
6 | * it under the terms of the GNU General Public License version 2 as | ||
7 | * published by the Free Software Foundation. | ||
8 | */ | ||
9 | |||
10 | #include <linux/ip.h> | ||
11 | #include <linux/module.h> | ||
12 | #include <linux/skbuff.h> | ||
13 | |||
14 | #include <linux/netfilter_ipv4/ipt_ttl.h> | ||
15 | #include <linux/netfilter/x_tables.h> | ||
16 | |||
17 | MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>"); | ||
18 | MODULE_DESCRIPTION("Xtables: IPv4 TTL field match"); | ||
19 | MODULE_LICENSE("GPL"); | ||
20 | |||
21 | static bool ttl_mt(const struct sk_buff *skb, const struct xt_match_param *par) | ||
22 | { | ||
23 | const struct ipt_ttl_info *info = par->matchinfo; | ||
24 | const u8 ttl = ip_hdr(skb)->ttl; | ||
25 | |||
26 | switch (info->mode) { | ||
27 | case IPT_TTL_EQ: | ||
28 | return ttl == info->ttl; | ||
29 | case IPT_TTL_NE: | ||
30 | return ttl != info->ttl; | ||
31 | case IPT_TTL_LT: | ||
32 | return ttl < info->ttl; | ||
33 | case IPT_TTL_GT: | ||
34 | return ttl > info->ttl; | ||
35 | default: | ||
36 | printk(KERN_WARNING "ipt_ttl: unknown mode %d\n", | ||
37 | info->mode); | ||
38 | return false; | ||
39 | } | ||
40 | |||
41 | return false; | ||
42 | } | ||
43 | |||
44 | static struct xt_match ttl_mt_reg __read_mostly = { | ||
45 | .name = "ttl", | ||
46 | .family = NFPROTO_IPV4, | ||
47 | .match = ttl_mt, | ||
48 | .matchsize = sizeof(struct ipt_ttl_info), | ||
49 | .me = THIS_MODULE, | ||
50 | }; | ||
51 | |||
52 | static int __init ttl_mt_init(void) | ||
53 | { | ||
54 | return xt_register_match(&ttl_mt_reg); | ||
55 | } | ||
56 | |||
57 | static void __exit ttl_mt_exit(void) | ||
58 | { | ||
59 | xt_unregister_match(&ttl_mt_reg); | ||
60 | } | ||
61 | |||
62 | module_init(ttl_mt_init); | ||
63 | module_exit(ttl_mt_exit); | ||
diff --git a/net/ipv6/netfilter/Kconfig b/net/ipv6/netfilter/Kconfig index 6a42a968c498..4a8d7ecd6d09 100644 --- a/net/ipv6/netfilter/Kconfig +++ b/net/ipv6/netfilter/Kconfig | |||
@@ -94,15 +94,6 @@ config IP6_NF_MATCH_OPTS | |||
94 | 94 | ||
95 | To compile it as a module, choose M here. If unsure, say N. | 95 | To compile it as a module, choose M here. If unsure, say N. |
96 | 96 | ||
97 | config IP6_NF_MATCH_HL | ||
98 | tristate '"hl" match support' | ||
99 | depends on NETFILTER_ADVANCED | ||
100 | help | ||
101 | HL matching allows you to match packets based on the hop | ||
102 | limit of the packet. | ||
103 | |||
104 | To compile it as a module, choose M here. If unsure, say N. | ||
105 | |||
106 | config IP6_NF_MATCH_IPV6HEADER | 97 | config IP6_NF_MATCH_IPV6HEADER |
107 | tristate '"ipv6header" IPv6 Extension Headers Match' | 98 | tristate '"ipv6header" IPv6 Extension Headers Match' |
108 | default m if NETFILTER_ADVANCED=n | 99 | default m if NETFILTER_ADVANCED=n |
diff --git a/net/ipv6/netfilter/Makefile b/net/ipv6/netfilter/Makefile index 61a4570d0ede..aafbba30c899 100644 --- a/net/ipv6/netfilter/Makefile +++ b/net/ipv6/netfilter/Makefile | |||
@@ -20,7 +20,6 @@ obj-$(CONFIG_NF_CONNTRACK_IPV6) += nf_conntrack_ipv6.o | |||
20 | obj-$(CONFIG_IP6_NF_MATCH_AH) += ip6t_ah.o | 20 | obj-$(CONFIG_IP6_NF_MATCH_AH) += ip6t_ah.o |
21 | obj-$(CONFIG_IP6_NF_MATCH_EUI64) += ip6t_eui64.o | 21 | obj-$(CONFIG_IP6_NF_MATCH_EUI64) += ip6t_eui64.o |
22 | obj-$(CONFIG_IP6_NF_MATCH_FRAG) += ip6t_frag.o | 22 | obj-$(CONFIG_IP6_NF_MATCH_FRAG) += ip6t_frag.o |
23 | obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o | ||
24 | obj-$(CONFIG_IP6_NF_MATCH_IPV6HEADER) += ip6t_ipv6header.o | 23 | obj-$(CONFIG_IP6_NF_MATCH_IPV6HEADER) += ip6t_ipv6header.o |
25 | obj-$(CONFIG_IP6_NF_MATCH_MH) += ip6t_mh.o | 24 | obj-$(CONFIG_IP6_NF_MATCH_MH) += ip6t_mh.o |
26 | obj-$(CONFIG_IP6_NF_MATCH_OPTS) += ip6t_hbh.o | 25 | obj-$(CONFIG_IP6_NF_MATCH_OPTS) += ip6t_hbh.o |
diff --git a/net/ipv6/netfilter/ip6t_hl.c b/net/ipv6/netfilter/ip6t_hl.c deleted file mode 100644 index c964dca1132d..000000000000 --- a/net/ipv6/netfilter/ip6t_hl.c +++ /dev/null | |||
@@ -1,68 +0,0 @@ | |||
1 | /* Hop Limit matching module */ | ||
2 | |||
3 | /* (C) 2001-2002 Maciej Soltysiak <solt@dns.toxicfilms.tv> | ||
4 | * Based on HW's ttl module | ||
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify | ||
7 | * it under the terms of the GNU General Public License version 2 as | ||
8 | * published by the Free Software Foundation. | ||
9 | */ | ||
10 | |||
11 | #include <linux/ipv6.h> | ||
12 | #include <linux/module.h> | ||
13 | #include <linux/skbuff.h> | ||
14 | |||
15 | #include <linux/netfilter_ipv6/ip6t_hl.h> | ||
16 | #include <linux/netfilter/x_tables.h> | ||
17 | |||
18 | MODULE_AUTHOR("Maciej Soltysiak <solt@dns.toxicfilms.tv>"); | ||
19 | MODULE_DESCRIPTION("Xtables: IPv6 Hop Limit field match"); | ||
20 | MODULE_LICENSE("GPL"); | ||
21 | |||
22 | static bool hl_mt6(const struct sk_buff *skb, const struct xt_match_param *par) | ||
23 | { | ||
24 | const struct ip6t_hl_info *info = par->matchinfo; | ||
25 | const struct ipv6hdr *ip6h = ipv6_hdr(skb); | ||
26 | |||
27 | switch (info->mode) { | ||
28 | case IP6T_HL_EQ: | ||
29 | return ip6h->hop_limit == info->hop_limit; | ||
30 | break; | ||
31 | case IP6T_HL_NE: | ||
32 | return ip6h->hop_limit != info->hop_limit; | ||
33 | break; | ||
34 | case IP6T_HL_LT: | ||
35 | return ip6h->hop_limit < info->hop_limit; | ||
36 | break; | ||
37 | case IP6T_HL_GT: | ||
38 | return ip6h->hop_limit > info->hop_limit; | ||
39 | break; | ||
40 | default: | ||
41 | printk(KERN_WARNING "ip6t_hl: unknown mode %d\n", | ||
42 | info->mode); | ||
43 | return false; | ||
44 | } | ||
45 | |||
46 | return false; | ||
47 | } | ||
48 | |||
49 | static struct xt_match hl_mt6_reg __read_mostly = { | ||
50 | .name = "hl", | ||
51 | .family = NFPROTO_IPV6, | ||
52 | .match = hl_mt6, | ||
53 | .matchsize = sizeof(struct ip6t_hl_info), | ||
54 | .me = THIS_MODULE, | ||
55 | }; | ||
56 | |||
57 | static int __init hl_mt6_init(void) | ||
58 | { | ||
59 | return xt_register_match(&hl_mt6_reg); | ||
60 | } | ||
61 | |||
62 | static void __exit hl_mt6_exit(void) | ||
63 | { | ||
64 | xt_unregister_match(&hl_mt6_reg); | ||
65 | } | ||
66 | |||
67 | module_init(hl_mt6_init); | ||
68 | module_exit(hl_mt6_exit); | ||
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig index d99f29b7b980..0eb98b4fbf44 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig | |||
@@ -620,6 +620,14 @@ config NETFILTER_XT_MATCH_HELPER | |||
620 | 620 | ||
621 | To compile it as a module, choose M here. If unsure, say Y. | 621 | To compile it as a module, choose M here. If unsure, say Y. |
622 | 622 | ||
623 | config NETFILTER_XT_MATCH_HL | ||
624 | tristate '"hl" hoplimit/TTL match support' | ||
625 | depends on NETFILTER_ADVANCED | ||
626 | ---help--- | ||
627 | HL matching allows you to match packets based on the hoplimit | ||
628 | in the IPv6 header, or the time-to-live field in the IPv4 | ||
629 | header of the packet. | ||
630 | |||
623 | config NETFILTER_XT_MATCH_IPRANGE | 631 | config NETFILTER_XT_MATCH_IPRANGE |
624 | tristate '"iprange" address range match support' | 632 | tristate '"iprange" address range match support' |
625 | depends on NETFILTER_ADVANCED | 633 | depends on NETFILTER_ADVANCED |
diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile index 6ebe0482265b..da73ed25701c 100644 --- a/net/netfilter/Makefile +++ b/net/netfilter/Makefile | |||
@@ -68,6 +68,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DSCP) += xt_dscp.o | |||
68 | obj-$(CONFIG_NETFILTER_XT_MATCH_ESP) += xt_esp.o | 68 | obj-$(CONFIG_NETFILTER_XT_MATCH_ESP) += xt_esp.o |
69 | obj-$(CONFIG_NETFILTER_XT_MATCH_HASHLIMIT) += xt_hashlimit.o | 69 | obj-$(CONFIG_NETFILTER_XT_MATCH_HASHLIMIT) += xt_hashlimit.o |
70 | obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o | 70 | obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o |
71 | obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o | ||
71 | obj-$(CONFIG_NETFILTER_XT_MATCH_IPRANGE) += xt_iprange.o | 72 | obj-$(CONFIG_NETFILTER_XT_MATCH_IPRANGE) += xt_iprange.o |
72 | obj-$(CONFIG_NETFILTER_XT_MATCH_LENGTH) += xt_length.o | 73 | obj-$(CONFIG_NETFILTER_XT_MATCH_LENGTH) += xt_length.o |
73 | obj-$(CONFIG_NETFILTER_XT_MATCH_LIMIT) += xt_limit.o | 74 | obj-$(CONFIG_NETFILTER_XT_MATCH_LIMIT) += xt_limit.o |
diff --git a/net/netfilter/xt_hl.c b/net/netfilter/xt_hl.c new file mode 100644 index 000000000000..7726154c87b2 --- /dev/null +++ b/net/netfilter/xt_hl.c | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * IP tables module for matching the value of the TTL | ||
3 | * (C) 2000,2001 by Harald Welte <laforge@netfilter.org> | ||
4 | * | ||
5 | * Hop Limit matching module | ||
6 | * (C) 2001-2002 Maciej Soltysiak <solt@dns.toxicfilms.tv> | ||
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/ip.h> | ||
14 | #include <linux/ipv6.h> | ||
15 | #include <linux/module.h> | ||
16 | #include <linux/skbuff.h> | ||
17 | |||
18 | #include <linux/netfilter/x_tables.h> | ||
19 | #include <linux/netfilter_ipv4/ipt_ttl.h> | ||
20 | #include <linux/netfilter_ipv6/ip6t_hl.h> | ||
21 | |||
22 | MODULE_AUTHOR("Maciej Soltysiak <solt@dns.toxicfilms.tv>"); | ||
23 | MODULE_DESCRIPTION("Xtables: Hoplimit/TTL field match"); | ||
24 | MODULE_LICENSE("GPL"); | ||
25 | MODULE_ALIAS("ipt_ttl"); | ||
26 | MODULE_ALIAS("ip6t_hl"); | ||
27 | |||
28 | static bool ttl_mt(const struct sk_buff *skb, const struct xt_match_param *par) | ||
29 | { | ||
30 | const struct ipt_ttl_info *info = par->matchinfo; | ||
31 | const u8 ttl = ip_hdr(skb)->ttl; | ||
32 | |||
33 | switch (info->mode) { | ||
34 | case IPT_TTL_EQ: | ||
35 | return ttl == info->ttl; | ||
36 | case IPT_TTL_NE: | ||
37 | return ttl != info->ttl; | ||
38 | case IPT_TTL_LT: | ||
39 | return ttl < info->ttl; | ||
40 | case IPT_TTL_GT: | ||
41 | return ttl > info->ttl; | ||
42 | default: | ||
43 | printk(KERN_WARNING "ipt_ttl: unknown mode %d\n", | ||
44 | info->mode); | ||
45 | return false; | ||
46 | } | ||
47 | |||
48 | return false; | ||
49 | } | ||
50 | |||
51 | static bool hl_mt6(const struct sk_buff *skb, const struct xt_match_param *par) | ||
52 | { | ||
53 | const struct ip6t_hl_info *info = par->matchinfo; | ||
54 | const struct ipv6hdr *ip6h = ipv6_hdr(skb); | ||
55 | |||
56 | switch (info->mode) { | ||
57 | case IP6T_HL_EQ: | ||
58 | return ip6h->hop_limit == info->hop_limit; | ||
59 | break; | ||
60 | case IP6T_HL_NE: | ||
61 | return ip6h->hop_limit != info->hop_limit; | ||
62 | break; | ||
63 | case IP6T_HL_LT: | ||
64 | return ip6h->hop_limit < info->hop_limit; | ||
65 | break; | ||
66 | case IP6T_HL_GT: | ||
67 | return ip6h->hop_limit > info->hop_limit; | ||
68 | break; | ||
69 | default: | ||
70 | printk(KERN_WARNING "ip6t_hl: unknown mode %d\n", | ||
71 | info->mode); | ||
72 | return false; | ||
73 | } | ||
74 | |||
75 | return false; | ||
76 | } | ||
77 | |||
78 | static struct xt_match hl_mt_reg[] __read_mostly = { | ||
79 | { | ||
80 | .name = "ttl", | ||
81 | .revision = 0, | ||
82 | .family = NFPROTO_IPV4, | ||
83 | .match = ttl_mt, | ||
84 | .matchsize = sizeof(struct ipt_ttl_info), | ||
85 | .me = THIS_MODULE, | ||
86 | }, | ||
87 | { | ||
88 | .name = "hl", | ||
89 | .revision = 0, | ||
90 | .family = NFPROTO_IPV6, | ||
91 | .match = hl_mt6, | ||
92 | .matchsize = sizeof(struct ip6t_hl_info), | ||
93 | .me = THIS_MODULE, | ||
94 | }, | ||
95 | }; | ||
96 | |||
97 | static int __init hl_mt_init(void) | ||
98 | { | ||
99 | return xt_register_matches(hl_mt_reg, ARRAY_SIZE(hl_mt_reg)); | ||
100 | } | ||
101 | |||
102 | static void __exit hl_mt_exit(void) | ||
103 | { | ||
104 | xt_unregister_matches(hl_mt_reg, ARRAY_SIZE(hl_mt_reg)); | ||
105 | } | ||
106 | |||
107 | module_init(hl_mt_init); | ||
108 | module_exit(hl_mt_exit); | ||