From: Jan Engelhardt Date: Wed, 5 Dec 2007 07:37:54 +0000 (-0800) Subject: [NETFILTER]: Merge ipt_tos into xt_dscp X-Git-Tag: v2.6.25-rc1~1162^2~1259 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3b33e6a2cdefba38d83442ebae2ee42e853ea51;p=linux-2.6 [NETFILTER]: Merge ipt_tos into xt_dscp Merge ipt_tos into xt_dscp. Merge ipt_tos (tos v0 match) into xt_dscp. They both match on the same field in the IPv4 header, so it seems reasonable to keep them in one piece. This is part one of the implicit 4-patch series to move tos to xtables and extend it by IPv6. Signed-off-by: Jan Engelhardt Signed-off-by: Patrick McHardy Signed-off-by: David S. Miller --- diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig index 244e91daf0..232817c828 100644 --- a/net/ipv4/netfilter/Kconfig +++ b/net/ipv4/netfilter/Kconfig @@ -63,15 +63,6 @@ config IP_NF_MATCH_IPRANGE To compile it as a module, choose M here. If unsure, say N. -config IP_NF_MATCH_TOS - tristate "TOS match support" - depends on IP_NF_IPTABLES - help - TOS matching allows you to match packets based on the Type Of - Service fields of the IP packet. - - To compile it as a module, choose M here. If unsure, say N. - config IP_NF_MATCH_RECENT tristate '"recent" match support' depends on IP_NF_IPTABLES diff --git a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile index 42199e93b8..00c19c74ce 100644 --- a/net/ipv4/netfilter/Makefile +++ b/net/ipv4/netfilter/Makefile @@ -46,7 +46,6 @@ obj-$(CONFIG_IP_NF_MATCH_AH) += ipt_ah.o obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o obj-$(CONFIG_IP_NF_MATCH_IPRANGE) += ipt_iprange.o obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o -obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o # targets diff --git a/net/ipv4/netfilter/ipt_tos.c b/net/ipv4/netfilter/ipt_tos.c deleted file mode 100644 index 7d60868258..0000000000 --- a/net/ipv4/netfilter/ipt_tos.c +++ /dev/null @@ -1,50 +0,0 @@ -/* Kernel module to match TOS values. */ - -/* (C) 1999-2001 Paul `Rusty' Russell - * (C) 2002-2004 Netfilter Core Team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include - -#include -#include - -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("iptables TOS match module"); - -static bool -tos_mt(const struct sk_buff *skb, const struct net_device *in, - const struct net_device *out, const struct xt_match *match, - const void *matchinfo, int offset, unsigned int protoff, bool *hotdrop) -{ - const struct ipt_tos_info *info = matchinfo; - - return (ip_hdr(skb)->tos == info->tos) ^ info->invert; -} - -static struct xt_match tos_mt_reg __read_mostly = { - .name = "tos", - .family = AF_INET, - .match = tos_mt, - .matchsize = sizeof(struct ipt_tos_info), - .me = THIS_MODULE, -}; - -static int __init tos_mt_init(void) -{ - return xt_register_match(&tos_mt_reg); -} - -static void __exit tos_mt_exit(void) -{ - xt_unregister_match(&tos_mt_reg); -} - -module_init(tos_mt_init); -module_exit(tos_mt_exit); diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig index d220607cc0..1804916e95 100644 --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig @@ -487,7 +487,7 @@ config NETFILTER_XT_MATCH_DCCP . If unsure, say `N'. config NETFILTER_XT_MATCH_DSCP - tristate '"dscp" match support' + tristate '"dscp" and "tos" match support' depends on NETFILTER_XTABLES help This option adds a `DSCP' match, which allows you to match against @@ -495,6 +495,10 @@ config NETFILTER_XT_MATCH_DSCP The DSCP field can have any value between 0x0 and 0x3f inclusive. + It will also add a "tos" match, which allows you to match packets + based on the Type Of Service fields of the IPv4 packet (which share + the same bits as DSCP). + To compile it as a module, choose M here. If unsure, say N. config NETFILTER_XT_MATCH_ESP diff --git a/net/netfilter/xt_dscp.c b/net/netfilter/xt_dscp.c index 63f7354ca9..75b0df990d 100644 --- a/net/netfilter/xt_dscp.c +++ b/net/netfilter/xt_dscp.c @@ -13,14 +13,16 @@ #include #include -#include #include +#include +#include MODULE_AUTHOR("Harald Welte "); -MODULE_DESCRIPTION("x_tables DSCP matching module"); +MODULE_DESCRIPTION("x_tables DSCP/tos matching module"); MODULE_LICENSE("GPL"); MODULE_ALIAS("ipt_dscp"); MODULE_ALIAS("ip6t_dscp"); +MODULE_ALIAS("ipt_tos"); static bool dscp_mt(const struct sk_buff *skb, const struct net_device *in, @@ -60,6 +62,16 @@ dscp_mt_check(const char *tablename, const void *info, return true; } +static bool tos_mt_v0(const struct sk_buff *skb, const struct net_device *in, + const struct net_device *out, + const struct xt_match *match, const void *matchinfo, + int offset, unsigned int protoff, bool *hotdrop) +{ + const struct ipt_tos_info *info = matchinfo; + + return (ip_hdr(skb)->tos == info->tos) ^ info->invert; +} + static struct xt_match dscp_mt_reg[] __read_mostly = { { .name = "dscp", @@ -77,6 +89,14 @@ static struct xt_match dscp_mt_reg[] __read_mostly = { .matchsize = sizeof(struct xt_dscp_info), .me = THIS_MODULE, }, + { + .name = "tos", + .revision = 0, + .family = AF_INET, + .match = tos_mt_v0, + .matchsize = sizeof(struct ipt_tos_info), + .me = THIS_MODULE, + }, }; static int __init dscp_mt_init(void)