summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYasuyuki KOZAKAI <yasuyuki@netfilter.org>2007-08-04 08:24:29 +0000
committerYasuyuki KOZAKAI <yasuyuki@netfilter.org>2007-08-04 08:24:29 +0000
commita7bf6d0decd93ade089a98a8de76a529cd96427e (patch)
treecf4d988e897add0e5fd3d6bd62464db2ca50493d
parente4cc20b2367362c2f9c84c0daaccd985e3236118 (diff)
Add IPv6 support to DSCP target
-rw-r--r--extensions/Makefile4
-rw-r--r--extensions/libxt_DSCP.c (renamed from extensions/libipt_DSCP.c)51
-rw-r--r--include/linux/netfilter/xt_DSCP.h (renamed from include/linux/netfilter_ipv4/ipt_DSCP.h)16
3 files changed, 44 insertions, 27 deletions
diff --git a/extensions/Makefile b/extensions/Makefile
index 53e3e9eb..5830faa8 100644
--- a/extensions/Makefile
+++ b/extensions/Makefile
@@ -5,9 +5,9 @@
# header files are present in the include/linux directory of this iptables
# package (HW)
#
-PF_EXT_SLIB:=ah addrtype conntrack ecn helper icmp iprange owner policy realm tos ttl unclean DNAT DSCP ECN LOG MASQUERADE MIRROR NETMAP REDIRECT REJECT SAME SNAT TOS TTL ULOG
+PF_EXT_SLIB:=ah addrtype conntrack ecn helper icmp iprange owner policy realm tos ttl unclean DNAT ECN LOG MASQUERADE MIRROR NETMAP REDIRECT REJECT SAME SNAT TOS TTL ULOG
PF6_EXT_SLIB:=eui64 hl icmp6 owner policy HL LOG
-PFX_EXT_SLIB:=connmark connlimit comment dscp esp hashlimit length limit mac mark multiport physdev pkttype sctp state standard tcp tcpmss udp CLASSIFY CONNMARK MARK NFQUEUE NOTRACK TCPMSS TRACE
+PFX_EXT_SLIB:=connmark connlimit comment dscp esp hashlimit length limit mac mark multiport physdev pkttype sctp state standard tcp tcpmss udp CLASSIFY CONNMARK DSCP MARK NFQUEUE NOTRACK TCPMSS TRACE
ifeq ($(DO_SELINUX), 1)
PF_EXT_SE_SLIB:=
diff --git a/extensions/libipt_DSCP.c b/extensions/libxt_DSCP.c
index 029c54fe..b062c638 100644
--- a/extensions/libipt_DSCP.c
+++ b/extensions/libxt_DSCP.c
@@ -14,9 +14,9 @@
#include <stdlib.h>
#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_DSCP.h>
+#include <xtables.h>
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_DSCP.h>
/* This is evil, but it's my code - HW*/
#include "libipt_dscp_helper.c"
@@ -49,7 +49,7 @@ static const struct option opts[] = {
};
static void
-parse_dscp(const char *s, struct ipt_DSCP_info *dinfo)
+parse_dscp(const char *s, struct xt_DSCP_info *dinfo)
{
unsigned int dscp;
@@ -57,7 +57,7 @@ parse_dscp(const char *s, struct ipt_DSCP_info *dinfo)
exit_error(PARAMETER_PROBLEM,
"Invalid dscp `%s'\n", s);
- if (dscp > IPT_DSCP_MAX)
+ if (dscp > XT_DSCP_MAX)
exit_error(PARAMETER_PROBLEM,
"DSCP `%d` out of range\n", dscp);
@@ -67,7 +67,7 @@ parse_dscp(const char *s, struct ipt_DSCP_info *dinfo)
static void
-parse_class(const char *s, struct ipt_DSCP_info *dinfo)
+parse_class(const char *s, struct xt_DSCP_info *dinfo)
{
unsigned int dscp = class_to_dscp(s);
@@ -81,8 +81,8 @@ parse(int c, char **argv, int invert, unsigned int *flags,
const void *entry,
struct xt_entry_target **target)
{
- struct ipt_DSCP_info *dinfo
- = (struct ipt_DSCP_info *)(*target)->data;
+ struct xt_DSCP_info *dinfo
+ = (struct xt_DSCP_info *)(*target)->data;
switch (c) {
case 'F':
@@ -127,8 +127,8 @@ print(const void *ip,
const struct xt_entry_target *target,
int numeric)
{
- const struct ipt_DSCP_info *dinfo =
- (const struct ipt_DSCP_info *)target->data;
+ const struct xt_DSCP_info *dinfo =
+ (const struct xt_DSCP_info *)target->data;
printf("DSCP set ");
print_dscp(dinfo->dscp, numeric);
}
@@ -137,27 +137,44 @@ print(const void *ip,
static void
save(const void *ip, const struct xt_entry_target *target)
{
- const struct ipt_DSCP_info *dinfo =
- (const struct ipt_DSCP_info *)target->data;
+ const struct xt_DSCP_info *dinfo =
+ (const struct xt_DSCP_info *)target->data;
printf("--set-dscp 0x%02x ", dinfo->dscp);
}
-static struct iptables_target dscp = {
+static struct xtables_target dscp = {
+ .family = AF_INET,
.name = "DSCP",
.version = IPTABLES_VERSION,
- .size = IPT_ALIGN(sizeof(struct ipt_DSCP_info)),
- .userspacesize = IPT_ALIGN(sizeof(struct ipt_DSCP_info)),
+ .size = XT_ALIGN(sizeof(struct xt_DSCP_info)),
+ .userspacesize = XT_ALIGN(sizeof(struct xt_DSCP_info)),
.help = &help,
.init = &init,
.parse = &parse,
.final_check = &final_check,
.print = &print,
.save = &save,
- .extra_opts = opts
+ .extra_opts = opts,
+};
+
+static struct xtables_target dscp6 = {
+ .family = AF_INET6,
+ .name = "DSCP",
+ .version = IPTABLES_VERSION,
+ .size = XT_ALIGN(sizeof(struct xt_DSCP_info)),
+ .userspacesize = XT_ALIGN(sizeof(struct xt_DSCP_info)),
+ .help = &help,
+ .init = &init,
+ .parse = &parse,
+ .final_check = &final_check,
+ .print = &print,
+ .save = &save,
+ .extra_opts = opts,
};
void _init(void)
{
- register_target(&dscp);
+ xtables_register_target(&dscp);
+ xtables_register_target(&dscp6);
}
diff --git a/include/linux/netfilter_ipv4/ipt_DSCP.h b/include/linux/netfilter/xt_DSCP.h
index 678edee5..3c7c9639 100644
--- a/include/linux/netfilter_ipv4/ipt_DSCP.h
+++ b/include/linux/netfilter/xt_DSCP.h
@@ -1,20 +1,20 @@
-/* iptables module for setting the IPv4 DSCP field
+/* x_tables module for setting the IPv4/IPv6 DSCP field
*
* (C) 2002 Harald Welte <laforge@gnumonks.org>
* based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
* This software is distributed under GNU GPL v2, 1991
- *
+ *
* See RFC2474 for a description of the DSCP field within the IP Header.
*
- * Id: ipt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
+ * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
*/
-#ifndef _IPT_DSCP_TARGET_H
-#define _IPT_DSCP_TARGET_H
-#include <linux/netfilter_ipv4/ipt_dscp.h>
+#ifndef _XT_DSCP_TARGET_H
+#define _XT_DSCP_TARGET_H
+#include <linux/netfilter/xt_dscp.h>
/* target info */
-struct ipt_DSCP_info {
+struct xt_DSCP_info {
u_int8_t dscp;
};
-#endif /* _IPT_DSCP_TARGET_H */
+#endif /* _XT_DSCP_TARGET_H */