Author: cieciwa Date: Tue Aug 29 10:10:54 2006 GMT Module: SOURCES Tag: LINUX_2_6 ---- Log message: - new snap of ipv4options module.
---- Files affected: SOURCES: pom-ng-ipv4options-20060829.patch (NONE -> 1.1.2.1) (NEW) ---- Diffs: ================================================================ Index: SOURCES/pom-ng-ipv4options-20060829.patch diff -u /dev/null SOURCES/pom-ng-ipv4options-20060829.patch:1.1.2.1 --- /dev/null Tue Aug 29 12:10:54 2006 +++ SOURCES/pom-ng-ipv4options-20060829.patch Tue Aug 29 12:10:49 2006 @@ -0,0 +1,238 @@ + include/linux/netfilter_ipv4/ipt_ipv4options.h | 21 ++ + net/ipv4/netfilter/Kconfig | 13 + + net/ipv4/netfilter/Makefile | 1 + net/ipv4/netfilter/ipt_ipv4options.c | 176 +++++++++++++++++++++++++ + 4 files changed, 211 insertions(+) + +diff -Nur --exclude '*.orig' linux.org/include/linux/netfilter_ipv4/ipt_ipv4options.h linux/include/linux/netfilter_ipv4/ipt_ipv4options.h +--- linux.org/include/linux/netfilter_ipv4/ipt_ipv4options.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux/include/linux/netfilter_ipv4/ipt_ipv4options.h 2006-08-29 12:07:39.000000000 +0000 +@@ -0,0 +1,21 @@ ++#ifndef __ipt_ipv4options_h_included__ ++#define __ipt_ipv4options_h_included__ ++ ++#define IPT_IPV4OPTION_MATCH_SSRR 0x01 /* For strict source routing */ ++#define IPT_IPV4OPTION_MATCH_LSRR 0x02 /* For loose source routing */ ++#define IPT_IPV4OPTION_DONT_MATCH_SRR 0x04 /* any source routing */ ++#define IPT_IPV4OPTION_MATCH_RR 0x08 /* For Record route */ ++#define IPT_IPV4OPTION_DONT_MATCH_RR 0x10 ++#define IPT_IPV4OPTION_MATCH_TIMESTAMP 0x20 /* For timestamp request */ ++#define IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP 0x40 ++#define IPT_IPV4OPTION_MATCH_ROUTER_ALERT 0x80 /* For router-alert */ ++#define IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT 0x100 ++#define IPT_IPV4OPTION_MATCH_ANY_OPT 0x200 /* match packet with any option */ ++#define IPT_IPV4OPTION_DONT_MATCH_ANY_OPT 0x400 /* match packet with no option */ ++ ++struct ipt_ipv4options_info { ++ u_int16_t options; ++}; ++ ++ ++#endif /* __ipt_ipv4options_h_included__ */ +diff -Nur --exclude '*.orig' linux.org/net/ipv4/netfilter/ipt_ipv4options.c linux/net/ipv4/netfilter/ipt_ipv4options.c +--- linux.org/net/ipv4/netfilter/ipt_ipv4options.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux/net/ipv4/netfilter/ipt_ipv4options.c 2006-08-29 12:07:39.000000000 +0000 +@@ -0,0 +1,176 @@ ++/* ++ This is a module which is used to match ipv4 options. ++ This file is distributed under the terms of the GNU General Public ++ License (GPL). Copies of the GPL can be obtained from: ++ ftp://prep.ai.mit.edu/pub/gnu/GPL ++ ++ 11-mars-2001 Fabrice MARIE <[EMAIL PROTECTED]> : initial development. ++ 12-july-2001 Fabrice MARIE <[EMAIL PROTECTED]> : added router-alert otions matching. Fixed a bug with no-srr ++ 12-august-2001 Imran Patel <[EMAIL PROTECTED]> : optimization of the match. ++ 18-november-2001 Fabrice MARIE <[EMAIL PROTECTED]> : added [!] 'any' option match. ++ 19-february-2004 Harald Welte <[EMAIL PROTECTED]> : merge with 2.6.x ++*/ ++ ++#include <linux/module.h> ++#include <linux/skbuff.h> ++#include <net/ip.h> ++ ++#include <linux/netfilter_ipv4/ip_tables.h> ++#include <linux/netfilter_ipv4/ipt_ipv4options.h> ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Fabrice Marie <[EMAIL PROTECTED]>"); ++ ++static int ++match(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, ++ int *hotdrop) ++{ ++ const struct ipt_ipv4options_info *info = matchinfo; /* match info for rule */ ++ const struct iphdr *iph = skb->nh.iph; ++ const struct ip_options *opt; ++ ++ if (iph->ihl * 4 == sizeof(struct iphdr)) { ++ /* No options, so we match only the "DONTs" and the "IGNOREs" */ ++ ++ if (((info->options & IPT_IPV4OPTION_MATCH_ANY_OPT) == IPT_IPV4OPTION_MATCH_ANY_OPT) || ++ ((info->options & IPT_IPV4OPTION_MATCH_SSRR) == IPT_IPV4OPTION_MATCH_SSRR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_LSRR) == IPT_IPV4OPTION_MATCH_LSRR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_RR) == IPT_IPV4OPTION_MATCH_RR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_TIMESTAMP) == IPT_IPV4OPTION_MATCH_TIMESTAMP) || ++ ((info->options & IPT_IPV4OPTION_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_MATCH_ROUTER_ALERT)) ++ return 0; ++ return 1; ++ } ++ else { ++ if ((info->options & IPT_IPV4OPTION_MATCH_ANY_OPT) == IPT_IPV4OPTION_MATCH_ANY_OPT) ++ /* there are options, and we don't need to care which one */ ++ return 1; ++ else { ++ if ((info->options & IPT_IPV4OPTION_DONT_MATCH_ANY_OPT) == IPT_IPV4OPTION_DONT_MATCH_ANY_OPT) ++ /* there are options but we don't want any ! */ ++ return 0; ++ } ++ } ++ ++ opt = &(IPCB(skb)->opt); ++ ++ /* source routing */ ++ if ((info->options & IPT_IPV4OPTION_MATCH_SSRR) == IPT_IPV4OPTION_MATCH_SSRR) { ++ if (!((opt->srr) && (opt->is_strictroute))) ++ return 0; ++ } ++ else if ((info->options & IPT_IPV4OPTION_MATCH_LSRR) == IPT_IPV4OPTION_MATCH_LSRR) { ++ if (!((opt->srr) && (!opt->is_strictroute))) ++ return 0; ++ } ++ else if ((info->options & IPT_IPV4OPTION_DONT_MATCH_SRR) == IPT_IPV4OPTION_DONT_MATCH_SRR) { ++ if (opt->srr) ++ return 0; ++ } ++ /* record route */ ++ if ((info->options & IPT_IPV4OPTION_MATCH_RR) == IPT_IPV4OPTION_MATCH_RR) { ++ if (!opt->rr) ++ return 0; ++ } ++ else if ((info->options & IPT_IPV4OPTION_DONT_MATCH_RR) == IPT_IPV4OPTION_DONT_MATCH_RR) { ++ if (opt->rr) ++ return 0; ++ } ++ /* timestamp */ ++ if ((info->options & IPT_IPV4OPTION_MATCH_TIMESTAMP) == IPT_IPV4OPTION_MATCH_TIMESTAMP) { ++ if (!opt->ts) ++ return 0; ++ } ++ else if ((info->options & IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP) == IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP) { ++ if (opt->ts) ++ return 0; ++ } ++ /* router-alert option */ ++ if ((info->options & IPT_IPV4OPTION_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_MATCH_ROUTER_ALERT) { ++ if (!opt->router_alert) ++ return 0; ++ } ++ else if ((info->options & IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT) { ++ if (opt->router_alert) ++ return 0; ++ } ++ ++ /* we match ! */ ++ return 1; ++} ++ ++static int ++checkentry(const char *tablename, ++ const void *ip, ++ const struct xt_match *match, ++ void *matchinfo, ++ unsigned int matchsize, ++ unsigned int hook_mask) ++{ ++ const struct ipt_ipv4options_info *info = matchinfo; /* match info for rule */ ++ /* Check the size */ ++ if (matchsize != IPT_ALIGN(sizeof(struct ipt_ipv4options_info))) ++ return 0; ++ /* Now check the coherence of the data ... */ ++ if (((info->options & IPT_IPV4OPTION_MATCH_ANY_OPT) == IPT_IPV4OPTION_MATCH_ANY_OPT) && ++ (((info->options & IPT_IPV4OPTION_DONT_MATCH_SRR) == IPT_IPV4OPTION_DONT_MATCH_SRR) || ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_RR) == IPT_IPV4OPTION_DONT_MATCH_RR) || ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP) == IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP) || ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT) || ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_ANY_OPT) == IPT_IPV4OPTION_DONT_MATCH_ANY_OPT))) ++ return 0; /* opposites */ ++ if (((info->options & IPT_IPV4OPTION_DONT_MATCH_ANY_OPT) == IPT_IPV4OPTION_DONT_MATCH_ANY_OPT) && ++ (((info->options & IPT_IPV4OPTION_MATCH_LSRR) == IPT_IPV4OPTION_MATCH_LSRR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_SSRR) == IPT_IPV4OPTION_MATCH_SSRR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_RR) == IPT_IPV4OPTION_MATCH_RR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_TIMESTAMP) == IPT_IPV4OPTION_MATCH_TIMESTAMP) || ++ ((info->options & IPT_IPV4OPTION_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_MATCH_ROUTER_ALERT) || ++ ((info->options & IPT_IPV4OPTION_MATCH_ANY_OPT) == IPT_IPV4OPTION_MATCH_ANY_OPT))) ++ return 0; /* opposites */ ++ if (((info->options & IPT_IPV4OPTION_MATCH_SSRR) == IPT_IPV4OPTION_MATCH_SSRR) && ++ ((info->options & IPT_IPV4OPTION_MATCH_LSRR) == IPT_IPV4OPTION_MATCH_LSRR)) ++ return 0; /* cannot match in the same time loose and strict source routing */ ++ if ((((info->options & IPT_IPV4OPTION_MATCH_SSRR) == IPT_IPV4OPTION_MATCH_SSRR) || ++ ((info->options & IPT_IPV4OPTION_MATCH_LSRR) == IPT_IPV4OPTION_MATCH_LSRR)) && ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_SRR) == IPT_IPV4OPTION_DONT_MATCH_SRR)) ++ return 0; /* opposites */ ++ if (((info->options & IPT_IPV4OPTION_MATCH_RR) == IPT_IPV4OPTION_MATCH_RR) && ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_RR) == IPT_IPV4OPTION_DONT_MATCH_RR)) ++ return 0; /* opposites */ ++ if (((info->options & IPT_IPV4OPTION_MATCH_TIMESTAMP) == IPT_IPV4OPTION_MATCH_TIMESTAMP) && ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP) == IPT_IPV4OPTION_DONT_MATCH_TIMESTAMP)) ++ return 0; /* opposites */ ++ if (((info->options & IPT_IPV4OPTION_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_MATCH_ROUTER_ALERT) && ++ ((info->options & IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT) == IPT_IPV4OPTION_DONT_MATCH_ROUTER_ALERT)) ++ return 0; /* opposites */ ++ ++ /* everything looks ok. */ ++ return 1; ++} ++ ++static struct ipt_match ipv4options_match = { ++ .name = "ipv4options", ++ .match = match, ++ .matchsize = sizeof(struct ipt_ipv4options_info), ++ .checkentry = checkentry, ++ .me = THIS_MODULE ++}; ++ ++static int __init init(void) ++{ ++ return ipt_register_match(&ipv4options_match); ++} ++ ++static void __exit fini(void) ++{ ++ ipt_unregister_match(&ipv4options_match); ++} ++ ++module_init(init); ++module_exit(fini); +diff -Nur --exclude '*.orig' linux.org/net/ipv4/netfilter/Kconfig linux/net/ipv4/netfilter/Kconfig +--- linux.org/net/ipv4/netfilter/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux/net/ipv4/netfilter/Kconfig 2006-08-29 12:07:39.000000000 +0000 +@@ -613,5 +613,18 @@ + Allows altering the ARP packet payload: source and destination + hardware and network addresses. + ++config IP_NF_MATCH_IPV4OPTIONS ++ tristate 'IPV4OPTIONS match support' ++ depends on IP_NF_IPTABLES ++ help ++ This option adds a IPV4OPTIONS match. ++ It allows you to filter options like source routing, ++ record route, timestamp and router-altert. ++ ++ If you say Y here, try iptables -m ipv4options --help for more information. ++ ++ If you want to compile it as a module, say M here and read ++ Documentation/modules.txt. If unsure, say `N'. ++ + endmenu + +diff -Nur --exclude '*.orig' linux.org/net/ipv4/netfilter/Makefile linux/net/ipv4/netfilter/Makefile +--- linux.org/net/ipv4/netfilter/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux/net/ipv4/netfilter/Makefile 2006-08-29 12:07:39.000000000 +0000 +@@ -0,0 +0,1 @@ ++obj-$(CONFIG_IP_NF_MATCH_IPV4OPTIONS) += ipt_ipv4options.o ================================================================ _______________________________________________ pld-cvs-commit mailing list pld-cvs-commit@lists.pld-linux.org http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit