aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Barksdale <amatus@amatus.name>2014-08-13 18:11:53 -0500
committerDavid Barksdale <amatus@amatus.name>2014-08-13 18:11:53 -0500
commit3918522a523adc3f001cf9c5da327d8fb383c26e (patch)
tree424b4a37d021e6a5fd02c3abbf9b6a054e469208
parentf05c100b6a7051106229cda5a845e94e36e71b17 (diff)
-rw-r--r--Documentation/io-mapping.txt82
-rwxr-xr-x[-rw-r--r--]arch/ia64/scripts/check-gas0
-rwxr-xr-x[-rw-r--r--]arch/ia64/scripts/toolchain-flags0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/boot/dts/apollo3g.dts0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/boot/dts/beech.dts0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/boot/dts/bluestone.dts0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/boot/wrapper0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/configs/44x/beech_defconfig0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/configs/44x/beech_sata_defconfig0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/configs/44x/bluestone_defconfig0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/include/asm/ppc460ex_plb_adma.h0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/include/ppc460ex_plb_adma.h0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/platforms/44x/bluestone-usb.c0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/relocs_check.pl0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/sysdev/ppc4xx_msi.c0
-rwxr-xr-x[-rw-r--r--]arch/powerpc/sysdev/ppc4xx_msi.h0
-rwxr-xr-x[-rw-r--r--]build.sh0
-rwxr-xr-x[-rw-r--r--]drivers/ata/sata_dwc_pmp.c0
-rwxr-xr-x[-rw-r--r--]drivers/dma/ppc460ex_4chan_dma.c0
-rwxr-xr-x[-rw-r--r--]drivers/dma/ppc460ex_4chan_dma.h0
-rwxr-xr-x[-rw-r--r--]drivers/dma/ppc460ex_4chan_sgdma.c0
-rwxr-xr-x[-rw-r--r--]drivers/scp/Kconfig0
-rwxr-xr-x[-rw-r--r--]drivers/scp/Makefile0
-rwxr-xr-x[-rw-r--r--]drivers/scp/scp-dev.c0
-rwxr-xr-x[-rw-r--r--]drivers/scp/scp-dev.h0
-rwxr-xr-x[-rw-r--r--]drivers/scp/spi_eeprom.c0
-rw-r--r--fs/splice.c6
-rw-r--r--include/linux/netfilter/xt_CONNMARK.h26
-rw-r--r--include/linux/netfilter/xt_DSCP.h26
-rw-r--r--include/linux/netfilter/xt_MARK.h10
-rw-r--r--include/linux/netfilter/xt_RATEEST.h15
-rw-r--r--include/linux/netfilter/xt_TCPMSS.h12
-rw-r--r--include/linux/netfilter_ipv4/ipt_TTL.h21
-rw-r--r--include/linux/netfilter_ipv4/ipt_ecn.h33
-rw-r--r--include/linux/netfilter_ipv6/ip6t_hl.h22
-rwxr-xr-x[-rw-r--r--]include/linux/trustees.h0
-rw-r--r--net/ipv4/netfilter/ipt_ECN.c141
-rw-r--r--net/ipv4/tcp.c3
-rw-r--r--net/netfilter/xt_MARK.c56
-rw-r--r--net/netfilter/xt_RATEEST.c183
-rw-r--r--net/netfilter/xt_connmark.c87
-rw-r--r--net/netfilter/xt_dscp.c115
-rw-r--r--net/netfilter/xt_hl.c108
-rw-r--r--net/netfilter/xt_tcpmss.c110
-rwxr-xr-x[-rw-r--r--]scripts/Lindent0
-rwxr-xr-x[-rw-r--r--]scripts/bloat-o-meter0
-rwxr-xr-x[-rw-r--r--]scripts/checkincludes.pl0
-rwxr-xr-x[-rw-r--r--]scripts/checkkconfigsymbols.sh0
-rwxr-xr-x[-rw-r--r--]scripts/checkpatch.pl0
-rwxr-xr-x[-rw-r--r--]scripts/checkstack.pl0
-rwxr-xr-x[-rw-r--r--]scripts/checksyscalls.sh0
-rwxr-xr-x[-rw-r--r--]scripts/checkversion.pl0
-rwxr-xr-x[-rw-r--r--]scripts/cleanfile0
-rwxr-xr-x[-rw-r--r--]scripts/cleanpatch0
-rwxr-xr-x[-rw-r--r--]scripts/config0
-rwxr-xr-x[-rw-r--r--]scripts/decodecode0
-rwxr-xr-x[-rw-r--r--]scripts/diffconfig0
-rwxr-xr-x[-rw-r--r--]scripts/extract-ikconfig0
-rwxr-xr-x[-rw-r--r--]scripts/get_maintainer.pl0
-rwxr-xr-x[-rw-r--r--]scripts/headerdep.pl0
-rwxr-xr-x[-rw-r--r--]scripts/headers.sh0
-rwxr-xr-x[-rw-r--r--]scripts/kconfig/check.sh0
-rwxr-xr-x[-rw-r--r--]scripts/kernel-doc0
-rwxr-xr-x[-rw-r--r--]scripts/makelst0
-rwxr-xr-x[-rw-r--r--]scripts/mkcompile_h0
-rwxr-xr-x[-rw-r--r--]scripts/mkuboot.sh0
-rwxr-xr-x[-rw-r--r--]scripts/namespace.pl0
-rwxr-xr-x[-rw-r--r--]scripts/package/mkspec0
-rwxr-xr-x[-rw-r--r--]scripts/patch-kernel0
-rwxr-xr-x[-rw-r--r--]scripts/recordmcount.pl0
-rwxr-xr-x[-rw-r--r--]scripts/setlocalversion0
-rwxr-xr-x[-rw-r--r--]scripts/show_delta0
-rwxr-xr-x[-rw-r--r--]scripts/tags.sh0
-rwxr-xr-x[-rw-r--r--]scripts/ver_linux0
-rwxr-xr-x[-rw-r--r--]security/trustees/Makefile0
-rwxr-xr-x[-rw-r--r--]security/trustees/fs.c0
-rwxr-xr-x[-rw-r--r--]security/trustees/funcs.c0
-rwxr-xr-x[-rw-r--r--]security/trustees/init.c0
-rwxr-xr-x[-rw-r--r--]security/trustees/internal.h0
-rwxr-xr-x[-rw-r--r--]security/trustees/security.c0
-rwxr-xr-x[-rw-r--r--]tools/perf/util/PERF-VERSION-GEN0
-rwxr-xr-x[-rw-r--r--]tools/perf/util/generate-cmdlist.sh0
82 files changed, 1049 insertions, 7 deletions
diff --git a/Documentation/io-mapping.txt b/Documentation/io-mapping.txt
new file mode 100644
index 00000000000..473e43b2d58
--- /dev/null
+++ b/Documentation/io-mapping.txt
@@ -0,0 +1,82 @@
+The io_mapping functions in linux/io-mapping.h provide an abstraction for
+efficiently mapping small regions of an I/O device to the CPU. The initial
+usage is to support the large graphics aperture on 32-bit processors where
+ioremap_wc cannot be used to statically map the entire aperture to the CPU
+as it would consume too much of the kernel address space.
+
+A mapping object is created during driver initialization using
+
+ struct io_mapping *io_mapping_create_wc(unsigned long base,
+ unsigned long size)
+
+ 'base' is the bus address of the region to be made
+ mappable, while 'size' indicates how large a mapping region to
+ enable. Both are in bytes.
+
+ This _wc variant provides a mapping which may only be used
+ with the io_mapping_map_atomic_wc or io_mapping_map_wc.
+
+With this mapping object, individual pages can be mapped either atomically
+or not, depending on the necessary scheduling environment. Of course, atomic
+maps are more efficient:
+
+ void *io_mapping_map_atomic_wc(struct io_mapping *mapping,
+ unsigned long offset)
+
+ 'offset' is the offset within the defined mapping region.
+ Accessing addresses beyond the region specified in the
+ creation function yields undefined results. Using an offset
+ which is not page aligned yields an undefined result. The
+ return value points to a single page in CPU address space.
+
+ This _wc variant returns a write-combining map to the
+ page and may only be used with mappings created by
+ io_mapping_create_wc
+
+ Note that the task may not sleep while holding this page
+ mapped.
+
+ void io_mapping_unmap_atomic(void *vaddr)
+
+ 'vaddr' must be the the value returned by the last
+ io_mapping_map_atomic_wc call. This unmaps the specified
+ page and allows the task to sleep once again.
+
+If you need to sleep while holding the lock, you can use the non-atomic
+variant, although they may be significantly slower.
+
+ void *io_mapping_map_wc(struct io_mapping *mapping,
+ unsigned long offset)
+
+ This works like io_mapping_map_atomic_wc except it allows
+ the task to sleep while holding the page mapped.
+
+ void io_mapping_unmap(void *vaddr)
+
+ This works like io_mapping_unmap_atomic, except it is used
+ for pages mapped with io_mapping_map_wc.
+
+At driver close time, the io_mapping object must be freed:
+
+ void io_mapping_free(struct io_mapping *mapping)
+
+Current Implementation:
+
+The initial implementation of these functions uses existing mapping
+mechanisms and so provides only an abstraction layer and no new
+functionality.
+
+On 64-bit processors, io_mapping_create_wc calls ioremap_wc for the whole
+range, creating a permanent kernel-visible mapping to the resource. The
+map_atomic and map functions add the requested offset to the base of the
+virtual address returned by ioremap_wc.
+
+On 32-bit processors with HIGHMEM defined, io_mapping_map_atomic_wc uses
+kmap_atomic_pfn to map the specified page in an atomic fashion;
+kmap_atomic_pfn isn't really supposed to be used with device pages, but it
+provides an efficient mapping for this usage.
+
+On 32-bit processors without HIGHMEM defined, io_mapping_map_atomic_wc and
+io_mapping_map_wc both use ioremap_wc, a terribly inefficient function which
+performs an IPI to inform all processors about the new mapping. This results
+in a significant performance penalty.
diff --git a/arch/ia64/scripts/check-gas b/arch/ia64/scripts/check-gas
index 2499e0b2243..2499e0b2243 100644..100755
--- a/arch/ia64/scripts/check-gas
+++ b/arch/ia64/scripts/check-gas
diff --git a/arch/ia64/scripts/toolchain-flags b/arch/ia64/scripts/toolchain-flags
index 3f0c2adacb7..3f0c2adacb7 100644..100755
--- a/arch/ia64/scripts/toolchain-flags
+++ b/arch/ia64/scripts/toolchain-flags
diff --git a/arch/powerpc/boot/dts/apollo3g.dts b/arch/powerpc/boot/dts/apollo3g.dts
index ffe03c281e6..ffe03c281e6 100644..100755
--- a/arch/powerpc/boot/dts/apollo3g.dts
+++ b/arch/powerpc/boot/dts/apollo3g.dts
diff --git a/arch/powerpc/boot/dts/beech.dts b/arch/powerpc/boot/dts/beech.dts
index 341fb2cf0af..341fb2cf0af 100644..100755
--- a/arch/powerpc/boot/dts/beech.dts
+++ b/arch/powerpc/boot/dts/beech.dts
diff --git a/arch/powerpc/boot/dts/bluestone.dts b/arch/powerpc/boot/dts/bluestone.dts
index 3a9804b3a82..3a9804b3a82 100644..100755
--- a/arch/powerpc/boot/dts/bluestone.dts
+++ b/arch/powerpc/boot/dts/bluestone.dts
diff --git a/arch/powerpc/boot/wrapper b/arch/powerpc/boot/wrapper
index ac9e9a58b2b..ac9e9a58b2b 100644..100755
--- a/arch/powerpc/boot/wrapper
+++ b/arch/powerpc/boot/wrapper
diff --git a/arch/powerpc/configs/44x/beech_defconfig b/arch/powerpc/configs/44x/beech_defconfig
index 0a5d46ae512..0a5d46ae512 100644..100755
--- a/arch/powerpc/configs/44x/beech_defconfig
+++ b/arch/powerpc/configs/44x/beech_defconfig
diff --git a/arch/powerpc/configs/44x/beech_sata_defconfig b/arch/powerpc/configs/44x/beech_sata_defconfig
index 4dab1f9e068..4dab1f9e068 100644..100755
--- a/arch/powerpc/configs/44x/beech_sata_defconfig
+++ b/arch/powerpc/configs/44x/beech_sata_defconfig
diff --git a/arch/powerpc/configs/44x/bluestone_defconfig b/arch/powerpc/configs/44x/bluestone_defconfig
index 218a3c20c0a..218a3c20c0a 100644..100755
--- a/arch/powerpc/configs/44x/bluestone_defconfig
+++ b/arch/powerpc/configs/44x/bluestone_defconfig
diff --git a/arch/powerpc/include/asm/ppc460ex_plb_adma.h b/arch/powerpc/include/asm/ppc460ex_plb_adma.h
index 965786e1d4b..965786e1d4b 100644..100755
--- a/arch/powerpc/include/asm/ppc460ex_plb_adma.h
+++ b/arch/powerpc/include/asm/ppc460ex_plb_adma.h
diff --git a/arch/powerpc/include/ppc460ex_plb_adma.h b/arch/powerpc/include/ppc460ex_plb_adma.h
index 4ff4fd2d2a7..4ff4fd2d2a7 100644..100755
--- a/arch/powerpc/include/ppc460ex_plb_adma.h
+++ b/arch/powerpc/include/ppc460ex_plb_adma.h
diff --git a/arch/powerpc/platforms/44x/bluestone-usb.c b/arch/powerpc/platforms/44x/bluestone-usb.c
index 06a8dcc5c96..06a8dcc5c96 100644..100755
--- a/arch/powerpc/platforms/44x/bluestone-usb.c
+++ b/arch/powerpc/platforms/44x/bluestone-usb.c
diff --git a/arch/powerpc/relocs_check.pl b/arch/powerpc/relocs_check.pl
index d2571096c3e..d2571096c3e 100644..100755
--- a/arch/powerpc/relocs_check.pl
+++ b/arch/powerpc/relocs_check.pl
diff --git a/arch/powerpc/sysdev/ppc4xx_msi.c b/arch/powerpc/sysdev/ppc4xx_msi.c
index 8bec6fff4ce..8bec6fff4ce 100644..100755
--- a/arch/powerpc/sysdev/ppc4xx_msi.c
+++ b/arch/powerpc/sysdev/ppc4xx_msi.c
diff --git a/arch/powerpc/sysdev/ppc4xx_msi.h b/arch/powerpc/sysdev/ppc4xx_msi.h
index 64b2f335068..64b2f335068 100644..100755
--- a/arch/powerpc/sysdev/ppc4xx_msi.h
+++ b/arch/powerpc/sysdev/ppc4xx_msi.h
diff --git a/build.sh b/build.sh
index a277eb23411..a277eb23411 100644..100755
--- a/build.sh
+++ b/build.sh
diff --git a/drivers/ata/sata_dwc_pmp.c b/drivers/ata/sata_dwc_pmp.c
index df3b490f86e..df3b490f86e 100644..100755
--- a/drivers/ata/sata_dwc_pmp.c
+++ b/drivers/ata/sata_dwc_pmp.c
diff --git a/drivers/dma/ppc460ex_4chan_dma.c b/drivers/dma/ppc460ex_4chan_dma.c
index cb2888d5213..cb2888d5213 100644..100755
--- a/drivers/dma/ppc460ex_4chan_dma.c
+++ b/drivers/dma/ppc460ex_4chan_dma.c
diff --git a/drivers/dma/ppc460ex_4chan_dma.h b/drivers/dma/ppc460ex_4chan_dma.h
index c9448f34de4..c9448f34de4 100644..100755
--- a/drivers/dma/ppc460ex_4chan_dma.h
+++ b/drivers/dma/ppc460ex_4chan_dma.h
diff --git a/drivers/dma/ppc460ex_4chan_sgdma.c b/drivers/dma/ppc460ex_4chan_sgdma.c
index fb26dd76ce7..fb26dd76ce7 100644..100755
--- a/drivers/dma/ppc460ex_4chan_sgdma.c
+++ b/drivers/dma/ppc460ex_4chan_sgdma.c
diff --git a/drivers/scp/Kconfig b/drivers/scp/Kconfig
index b44c6d556cb..b44c6d556cb 100644..100755
--- a/drivers/scp/Kconfig
+++ b/drivers/scp/Kconfig
diff --git a/drivers/scp/Makefile b/drivers/scp/Makefile
index 8fa43d08906..8fa43d08906 100644..100755
--- a/drivers/scp/Makefile
+++ b/drivers/scp/Makefile
diff --git a/drivers/scp/scp-dev.c b/drivers/scp/scp-dev.c
index b8f286c0342..b8f286c0342 100644..100755
--- a/drivers/scp/scp-dev.c
+++ b/drivers/scp/scp-dev.c
diff --git a/drivers/scp/scp-dev.h b/drivers/scp/scp-dev.h
index 4e7c385a596..4e7c385a596 100644..100755
--- a/drivers/scp/scp-dev.h
+++ b/drivers/scp/scp-dev.h
diff --git a/drivers/scp/spi_eeprom.c b/drivers/scp/spi_eeprom.c
index 47c83a4679d..47c83a4679d 100644..100755
--- a/drivers/scp/spi_eeprom.c
+++ b/drivers/scp/spi_eeprom.c
diff --git a/fs/splice.c b/fs/splice.c
index 5a21493e9e8..0d810e86f6c 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -2599,22 +2599,20 @@ static long do_splice_2(int fd_in, struct file *in, loff_t __user *off_in,
/** handle error status */
if( ret <= 0 )
{
-#ifdef DEBUG_SPLICE
printk( KERN_ERR "%s:%s:%d\n"
"sock_splice_read read error %ld.\n",
__FILE__, __FUNCTION__, __LINE__,
ret );
-#endif
+
/** fail on specific errors */
if ( ret == 0 || ! ignore_splice_error ( ret ) )
{
-#ifdef DEBUG_SPLICE
printk( KERN_ERR "%s:%s:%d\n"
"returning read error %ld "
"after reading %d out of %d bytes.\n",
__FILE__, __FUNCTION__, __LINE__,
ret, spliced_len, len );
-#endif
+
release_splice_pipebufs_special(pipe);
goto out;
}
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h
new file mode 100644
index 00000000000..0a854586675
--- /dev/null
+++ b/include/linux/netfilter/xt_CONNMARK.h
@@ -0,0 +1,26 @@
+#ifndef _XT_CONNMARK_H_target
+#define _XT_CONNMARK_H_target
+
+#include <linux/types.h>
+
+/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
+ * by Henrik Nordstrom <hno@marasystems.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+enum {
+ XT_CONNMARK_SET = 0,
+ XT_CONNMARK_SAVE,
+ XT_CONNMARK_RESTORE
+};
+
+struct xt_connmark_tginfo1 {
+ __u32 ctmark, ctmask, nfmask;
+ __u8 mode;
+};
+
+#endif /*_XT_CONNMARK_H_target*/
diff --git a/include/linux/netfilter/xt_DSCP.h b/include/linux/netfilter/xt_DSCP.h
new file mode 100644
index 00000000000..648e0b3bed2
--- /dev/null
+++ b/include/linux/netfilter/xt_DSCP.h
@@ -0,0 +1,26 @@
+/* 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.
+ *
+ * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
+*/
+#ifndef _XT_DSCP_TARGET_H
+#define _XT_DSCP_TARGET_H
+#include <linux/netfilter/xt_dscp.h>
+#include <linux/types.h>
+
+/* target info */
+struct xt_DSCP_info {
+ __u8 dscp;
+};
+
+struct xt_tos_target_info {
+ __u8 tos_value;
+ __u8 tos_mask;
+};
+
+#endif /* _XT_DSCP_TARGET_H */
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h
new file mode 100644
index 00000000000..bc9561bdef7
--- /dev/null
+++ b/include/linux/netfilter/xt_MARK.h
@@ -0,0 +1,10 @@
+#ifndef _XT_MARK_H_target
+#define _XT_MARK_H_target
+
+#include <linux/types.h>
+
+struct xt_mark_tginfo2 {
+ __u32 mark, mask;
+};
+
+#endif /*_XT_MARK_H_target */
diff --git a/include/linux/netfilter/xt_RATEEST.h b/include/linux/netfilter/xt_RATEEST.h
new file mode 100644
index 00000000000..6605e20ad8c
--- /dev/null
+++ b/include/linux/netfilter/xt_RATEEST.h
@@ -0,0 +1,15 @@
+#ifndef _XT_RATEEST_TARGET_H
+#define _XT_RATEEST_TARGET_H
+
+#include <linux/types.h>
+
+struct xt_rateest_target_info {
+ char name[IFNAMSIZ];
+ __s8 interval;
+ __u8 ewma_log;
+
+ /* Used internally by the kernel */
+ struct xt_rateest *est __attribute__((aligned(8)));
+};
+
+#endif /* _XT_RATEEST_TARGET_H */
diff --git a/include/linux/netfilter/xt_TCPMSS.h b/include/linux/netfilter/xt_TCPMSS.h
new file mode 100644
index 00000000000..9a6960afc13
--- /dev/null
+++ b/include/linux/netfilter/xt_TCPMSS.h
@@ -0,0 +1,12 @@
+#ifndef _XT_TCPMSS_H
+#define _XT_TCPMSS_H
+
+#include <linux/types.h>
+
+struct xt_tcpmss_info {
+ __u16 mss;
+};
+
+#define XT_TCPMSS_CLAMP_PMTU 0xffff
+
+#endif /* _XT_TCPMSS_H */
diff --git a/include/linux/netfilter_ipv4/ipt_TTL.h b/include/linux/netfilter_ipv4/ipt_TTL.h
new file mode 100644
index 00000000000..ee6611edc11
--- /dev/null
+++ b/include/linux/netfilter_ipv4/ipt_TTL.h
@@ -0,0 +1,21 @@
+/* TTL modification module for IP tables
+ * (C) 2000 by Harald Welte <laforge@netfilter.org> */
+
+#ifndef _IPT_TTL_H
+#define _IPT_TTL_H
+
+enum {
+ IPT_TTL_SET = 0,
+ IPT_TTL_INC,
+ IPT_TTL_DEC
+};
+
+#define IPT_TTL_MAXMODE IPT_TTL_DEC
+
+struct ipt_TTL_info {
+ u_int8_t mode;
+ u_int8_t ttl;
+};
+
+
+#endif
diff --git a/include/linux/netfilter_ipv4/ipt_ecn.h b/include/linux/netfilter_ipv4/ipt_ecn.h
new file mode 100644
index 00000000000..9945baa4ccd
--- /dev/null
+++ b/include/linux/netfilter_ipv4/ipt_ecn.h
@@ -0,0 +1,33 @@
+/* iptables module for matching the ECN header in IPv4 and TCP header
+ *
+ * (C) 2002 Harald Welte <laforge@gnumonks.org>
+ *
+ * This software is distributed under GNU GPL v2, 1991
+ *
+ * ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
+*/
+#ifndef _IPT_ECN_H
+#define _IPT_ECN_H
+#include <linux/netfilter/xt_dscp.h>
+
+#define IPT_ECN_IP_MASK (~XT_DSCP_MASK)
+
+#define IPT_ECN_OP_MATCH_IP 0x01
+#define IPT_ECN_OP_MATCH_ECE 0x10
+#define IPT_ECN_OP_MATCH_CWR 0x20
+
+#define IPT_ECN_OP_MATCH_MASK 0xce
+
+/* match info */
+struct ipt_ecn_info {
+ u_int8_t operation;
+ u_int8_t invert;
+ u_int8_t ip_ect;
+ union {
+ struct {
+ u_int8_t ect;
+ } tcp;
+ } proto;
+};
+
+#endif /* _IPT_ECN_H */
diff --git a/include/linux/netfilter_ipv6/ip6t_hl.h b/include/linux/netfilter_ipv6/ip6t_hl.h
new file mode 100644
index 00000000000..5ef91b8319a
--- /dev/null
+++ b/include/linux/netfilter_ipv6/ip6t_hl.h
@@ -0,0 +1,22 @@
+/* ip6tables module for matching the Hop Limit value
+ * Maciej Soltysiak <solt@dns.toxicfilms.tv>
+ * Based on HW's ttl module */
+
+#ifndef _IP6T_HL_H
+#define _IP6T_HL_H
+
+enum {
+ IP6T_HL_EQ = 0, /* equals */
+ IP6T_HL_NE, /* not equals */
+ IP6T_HL_LT, /* less than */
+ IP6T_HL_GT, /* greater than */
+};
+
+
+struct ip6t_hl_info {
+ u_int8_t mode;
+ u_int8_t hop_limit;
+};
+
+
+#endif
diff --git a/include/linux/trustees.h b/include/linux/trustees.h
index b3e9e1aa18c..b3e9e1aa18c 100644..100755
--- a/include/linux/trustees.h
+++ b/include/linux/trustees.h
diff --git a/net/ipv4/netfilter/ipt_ECN.c b/net/ipv4/netfilter/ipt_ECN.c
new file mode 100644
index 00000000000..f7e2fa0974d
--- /dev/null
+++ b/net/ipv4/netfilter/ipt_ECN.c
@@ -0,0 +1,141 @@
+/* iptables module for the IPv4 and TCP ECN bits, Version 1.5
+ *
+ * (C) 2002 by Harald Welte <laforge@netfilter.org>
+ *
+ * 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 <linux/in.h>
+#include <linux/module.h>
+#include <linux/skbuff.h>
+#include <linux/ip.h>
+#include <net/ip.h>
+#include <linux/tcp.h>
+#include <net/checksum.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter_ipv4/ipt_ECN.h>
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
+MODULE_DESCRIPTION("Xtables: Explicit Congestion Notification (ECN) flag modification");
+
+/* set ECT codepoint from IP header.
+ * return false if there was an error. */
+static inline bool
+set_ect_ip(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
+{
+ struct iphdr *iph = ip_hdr(skb);
+
+ if ((iph->tos & IPT_ECN_IP_MASK) != (einfo->ip_ect & IPT_ECN_IP_MASK)) {
+ __u8 oldtos;
+ if (!skb_make_writable(skb, sizeof(struct iphdr)))
+ return false;
+ iph = ip_hdr(skb);
+ oldtos = iph->tos;
+ iph->tos &= ~IPT_ECN_IP_MASK;
+ iph->tos |= (einfo->ip_ect & IPT_ECN_IP_MASK);
+ csum_replace2(&iph->check, htons(oldtos), htons(iph->tos));
+ }
+ return true;
+}
+
+/* Return false if there was an error. */
+static inline bool
+set_ect_tcp(struct sk_buff *skb, const struct ipt_ECN_info *einfo)
+{
+ struct tcphdr _tcph, *tcph;
+ __be16 oldval;
+
+ /* Not enought header? */
+ tcph = skb_header_pointer(skb, ip_hdrlen(skb), sizeof(_tcph), &_tcph);
+ if (!tcph)
+ return false;
+
+ if ((!(einfo->operation & IPT_ECN_OP_SET_ECE) ||
+ tcph->ece == einfo->proto.tcp.ece) &&
+ (!(einfo->operation & IPT_ECN_OP_SET_CWR) ||
+ tcph->cwr == einfo->proto.tcp.cwr))
+ return true;
+
+ if (!skb_make_writable(skb, ip_hdrlen(skb) + sizeof(*tcph)))
+ return false;
+ tcph = (void *)ip_hdr(skb) + ip_hdrlen(skb);
+
+ oldval = ((__be16 *)tcph)[6];
+ if (einfo->operation & IPT_ECN_OP_SET_ECE)
+ tcph->ece = einfo->proto.tcp.ece;
+ if (einfo->operation & IPT_ECN_OP_SET_CWR)
+ tcph->cwr = einfo->proto.tcp.cwr;
+
+ inet_proto_csum_replace2(&tcph->check, skb,
+ oldval, ((__be16 *)tcph)[6], 0);
+ return true;
+}
+
+static unsigned int
+ecn_tg(struct sk_buff *skb, const struct xt_target_param *par)
+{
+ const struct ipt_ECN_info *einfo = par->targinfo;
+
+ if (einfo->operation & IPT_ECN_OP_SET_IP)
+ if (!set_ect_ip(skb, einfo))
+ return NF_DROP;
+
+ if (einfo->operation & (IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR)
+ && ip_hdr(skb)->protocol == IPPROTO_TCP)
+ if (!set_ect_tcp(skb, einfo))
+ return NF_DROP;
+
+ return XT_CONTINUE;
+}
+
+static bool ecn_tg_check(const struct xt_tgchk_param *par)
+{
+ const struct ipt_ECN_info *einfo = par->targinfo;
+ const struct ipt_entry *e = par->entryinfo;
+
+ if (einfo->operation & IPT_ECN_OP_MASK) {
+ printk(KERN_WARNING "ECN: unsupported ECN operation %x\n",
+ einfo->operation);
+ return false;
+ }
+ if (einfo->ip_ect & ~IPT_ECN_IP_MASK) {
+ printk(KERN_WARNING "ECN: new ECT codepoint %x out of mask\n",
+ einfo->ip_ect);
+ return false;
+ }
+ if ((einfo->operation & (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR))
+ && (e->ip.proto != IPPROTO_TCP || (e->ip.invflags & XT_INV_PROTO))) {
+ printk(KERN_WARNING "ECN: cannot use TCP operations on a "
+ "non-tcp rule\n");
+ return false;
+ }
+ return true;
+}
+
+static struct xt_target ecn_tg_reg __read_mostly = {
+ .name = "ECN",
+ .family = NFPROTO_IPV4,
+ .target = ecn_tg,
+ .targetsize = sizeof(struct ipt_ECN_info),
+ .table = "mangle",
+ .checkentry = ecn_tg_check,
+ .me = THIS_MODULE,
+};
+
+static int __init ecn_tg_init(void)
+{
+ return xt_register_target(&ecn_tg_reg);
+}
+
+static void __exit ecn_tg_exit(void)
+{
+ xt_unregister_target(&ecn_tg_reg);
+}
+
+module_init(ecn_tg_init);
+module_exit(ecn_tg_exit);
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index b66a1d32de4..72fa141d17d 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -658,13 +658,10 @@ ssize_t tcp_splice_read(struct socket *sock, loff_t *ppos,
}
if (sk->sk_shutdown & RCV_SHUTDOWN)
{
-
-/* SH - 04/15/11 - removed print, these were filling up logs in some environments
printk(KERN_ERR "%s:%s:%d\n"
"breaking %d\n",
__FUNCTION__, __FILE__, __LINE__,
ret);
-*/
break;
}
if (sk->sk_state == TCP_CLOSE) {
diff --git a/net/netfilter/xt_MARK.c b/net/netfilter/xt_MARK.c
new file mode 100644
index 00000000000..225f8d11e17
--- /dev/null
+++ b/net/netfilter/xt_MARK.c
@@ -0,0 +1,56 @@
+/*
+ * xt_MARK - Netfilter module to modify the NFMARK field of an skb
+ *
+ * (C) 1999-2001 Marc Boucher <marc@mbsi.ca>
+ * Copyright © CC Computer Consultants GmbH, 2007 - 2008
+ * Jan Engelhardt <jengelh@computergmbh.de>
+ *
+ * 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 <linux/module.h>
+#include <linux/skbuff.h>
+#include <linux/ip.h>
+#include <net/checksum.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_MARK.h>
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
+MODULE_DESCRIPTION("Xtables: packet mark modification");
+MODULE_ALIAS("ipt_MARK");
+MODULE_ALIAS("ip6t_MARK");
+
+static unsigned int
+mark_tg(struct sk_buff *skb, const struct xt_target_param *par)
+{
+ const struct xt_mark_tginfo2 *info = par->targinfo;
+
+ skb->mark = (skb->mark & ~info->mask) ^ info->mark;
+ return XT_CONTINUE;
+}
+
+static struct xt_target mark_tg_reg __read_mostly = {
+ .name = "MARK",
+ .revision = 2,
+ .family = NFPROTO_UNSPEC,
+ .target = mark_tg,
+ .targetsize = sizeof(struct xt_mark_tginfo2),
+ .me = THIS_MODULE,
+};
+
+static int __init mark_tg_init(void)
+{
+ return xt_register_target(&mark_tg_reg);
+}
+
+static void __exit mark_tg_exit(void)
+{
+ xt_unregister_target(&mark_tg_reg);
+}
+
+module_init(mark_tg_init);
+module_exit(mark_tg_exit);
diff --git a/net/netfilter/xt_RATEEST.c b/net/netfilter/xt_RATEEST.c
new file mode 100644
index 00000000000..d80b8192e0d
--- /dev/null
+++ b/net/netfilter/xt_RATEEST.c
@@ -0,0 +1,183 @@
+/*
+ * (C) 2007 Patrick McHardy <kaber@trash.net>
+ *
+ * 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 <linux/module.h>
+#include <linux/skbuff.h>
+#include <linux/gen_stats.h>
+#include <linux/jhash.h>
+#include <linux/rtnetlink.h>
+#include <linux/random.h>
+#include <net/gen_stats.h>
+#include <net/netlink.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_RATEEST.h>
+#include <net/netfilter/xt_rateest.h>
+
+static DEFINE_MUTEX(xt_rateest_mutex);
+
+#define RATEEST_HSIZE 16
+static struct hlist_head rateest_hash[RATEEST_HSIZE] __read_mostly;
+static unsigned int jhash_rnd __read_mostly;
+
+static unsigned int xt_rateest_hash(const char *name)
+{
+ return jhash(name, FIELD_SIZEOF(struct xt_rateest, name), jhash_rnd) &
+ (RATEEST_HSIZE - 1);
+}
+
+static void xt_rateest_hash_insert(struct xt_rateest *est)
+{
+ unsigned int h;
+
+ h = xt_rateest_hash(est->name);
+ hlist_add_head(&est->list, &rateest_hash[h]);
+}
+
+struct xt_rateest *xt_rateest_lookup(const char *name)
+{
+ struct xt_rateest *est;
+ struct hlist_node *n;
+ unsigned int h;
+
+ h = xt_rateest_hash(name);
+ mutex_lock(&xt_rateest_mutex);
+ hlist_for_each_entry(est, n, &rateest_hash[h], list) {
+ if (strcmp(est->name, name) == 0) {
+ est->refcnt++;
+ mutex_unlock(&xt_rateest_mutex);
+ return est;
+ }
+ }
+ mutex_unlock(&xt_rateest_mutex);
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(xt_rateest_lookup);
+
+void xt_rateest_put(struct xt_rateest *est)
+{
+ mutex_lock(&xt_rateest_mutex);
+ if (--est->refcnt == 0) {
+ hlist_del(&est->list);
+ gen_kill_estimator(&est->bstats, &est->rstats);
+ kfree(est);
+ }
+ mutex_unlock(&xt_rateest_mutex);
+}
+EXPORT_SYMBOL_GPL(xt_rateest_put);
+
+static unsigned int
+xt_rateest_tg(struct sk_buff *skb, const struct xt_target_param *par)
+{
+ const struct xt_rateest_target_info *info = par->targinfo;
+ struct gnet_stats_basic_packed *stats = &info->est->bstats;
+
+ spin_lock_bh(&info->est->lock);
+ stats->bytes += skb->len;
+ stats->packets++;
+ spin_unlock_bh(&info->est->lock);
+
+ return XT_CONTINUE;
+}
+
+static bool xt_rateest_tg_checkentry(const struct xt_tgchk_param *par)
+{
+ struct xt_rateest_target_info *info = par->targinfo;
+ struct xt_rateest *est;
+ struct {
+ struct nlattr opt;
+ struct gnet_estimator est;
+ } cfg;
+
+ est = xt_rateest_lookup(info->name);
+ if (est) {
+ /*
+ * If estimator parameters are specified, they must match the
+ * existing estimator.
+ */
+ if ((!info->interval && !info->ewma_log) ||
+ (info->interval != est->params.interval ||
+ info->ewma_log != est->params.ewma_log)) {
+ xt_rateest_put(est);
+ return false;
+ }
+ info->est = est;
+ return true;
+ }
+
+ est = kzalloc(sizeof(*est), GFP_KERNEL);
+ if (!est)
+ goto err1;
+
+ strlcpy(est->name, info->name, sizeof(est->name));
+ spin_lock_init(&est->lock);
+ est->refcnt = 1;
+ est->params.interval = info->interval;
+ est->params.ewma_log = info->ewma_log;
+
+ cfg.opt.nla_len = nla_attr_size(sizeof(cfg.est));
+ cfg.opt.nla_type = TCA_STATS_RATE_EST;
+ cfg.est.interval = info->interval;
+ cfg.est.ewma_log = info->ewma_log;
+
+ if (gen_new_estimator(&est->bstats, &est->rstats, &est->lock,
+ &cfg.opt) < 0)
+ goto err2;
+
+ info->est = est;
+ xt_rateest_hash_insert(est);
+
+ return true;
+
+err2:
+ kfree(est);
+err1:
+ return false;
+}
+
+static void xt_rateest_tg_destroy(const struct xt_tgdtor_param *par)
+{
+ struct xt_rateest_target_info *info = par->targinfo;
+
+ xt_rateest_put(info->est);
+}
+
+static struct xt_target xt_rateest_tg_reg __read_mostly = {
+ .name = "RATEEST",
+ .revision = 0,
+ .family = NFPROTO_UNSPEC,
+ .target = xt_rateest_tg,
+ .checkentry = xt_rateest_tg_checkentry,
+ .destroy = xt_rateest_tg_destroy,
+ .targetsize = sizeof(struct xt_rateest_target_info),
+ .me = THIS_MODULE,
+};
+
+static int __init xt_rateest_tg_init(void)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(rateest_hash); i++)
+ INIT_HLIST_HEAD(&rateest_hash[i]);
+
+ get_random_bytes(&jhash_rnd, sizeof(jhash_rnd));
+ return xt_register_target(&xt_rateest_tg_reg);
+}
+
+static void __exit xt_rateest_tg_fini(void)
+{
+ xt_unregister_target(&xt_rateest_tg_reg);
+}
+
+
+MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Xtables: packet rate estimator");
+MODULE_ALIAS("ipt_RATEEST");
+MODULE_ALIAS("ip6t_RATEEST");
+module_init(xt_rateest_tg_init);
+module_exit(xt_rateest_tg_fini);
diff --git a/net/netfilter/xt_connmark.c b/net/netfilter/xt_connmark.c
new file mode 100644
index 00000000000..122aa8b0147
--- /dev/null
+++ b/net/netfilter/xt_connmark.c
@@ -0,0 +1,87 @@
+/*
+ * xt_connmark - Netfilter module to match connection mark values
+ *
+ * Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
+ * by Henrik Nordstrom <hno@marasystems.com>
+ * Copyright © CC Computer Consultants GmbH, 2007 - 2008
+ * Jan Engelhardt <jengelh@computergmbh.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <linux/module.h>
+#include <linux/skbuff.h>
+#include <net/netfilter/nf_conntrack.h>
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_connmark.h>
+
+MODULE_AUTHOR("Henrik Nordstrom <hno@marasystems.com>");
+MODULE_DESCRIPTION("Xtables: connection mark match");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("ipt_connmark");
+MODULE_ALIAS("ip6t_connmark");
+
+static bool
+connmark_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct xt_connmark_mtinfo1 *info = par->matchinfo;
+ enum ip_conntrack_info ctinfo;
+ const struct nf_conn *ct;
+
+ ct = nf_ct_get(skb, &ctinfo);
+ if (ct == NULL)
+ return false;
+
+ return ((ct->mark & info->mask) == info->mark) ^ info->invert;
+}
+
+static bool connmark_mt_check(const struct xt_mtchk_param *par)
+{
+ if (nf_ct_l3proto_try_module_get(par->family) < 0) {
+ printk(KERN_WARNING "cannot load conntrack support for "
+ "proto=%u\n", par->family);
+ return false;
+ }
+ return true;
+}
+
+static void connmark_mt_destroy(const struct xt_mtdtor_param *par)
+{
+ nf_ct_l3proto_module_put(par->family);
+}
+
+static struct xt_match connmark_mt_reg __read_mostly = {
+ .name = "connmark",
+ .revision = 1,
+ .family = NFPROTO_UNSPEC,
+ .checkentry = connmark_mt_check,
+ .match = connmark_mt,
+ .matchsize = sizeof(struct xt_connmark_mtinfo1),
+ .destroy = connmark_mt_destroy,
+ .me = THIS_MODULE,
+};
+
+static int __init connmark_mt_init(void)
+{
+ return xt_register_match(&connmark_mt_reg);
+}
+
+static void __exit connmark_mt_exit(void)
+{
+ xt_unregister_match(&connmark_mt_reg);
+}
+
+module_init(connmark_mt_init);
+module_exit(connmark_mt_exit);
diff --git a/net/netfilter/xt_dscp.c b/net/netfilter/xt_dscp.c
new file mode 100644
index 00000000000..0280d3a8c16
--- /dev/null
+++ b/net/netfilter/xt_dscp.c
@@ -0,0 +1,115 @@
+/* IP tables module for matching the value of the IPv4/IPv6 DSCP field
+ *
+ * (C) 2002 by Harald Welte <laforge@netfilter.org>
+ *
+ * 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 <linux/module.h>
+#include <linux/skbuff.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <net/dsfield.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_dscp.h>
+
+MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
+MODULE_DESCRIPTION("Xtables: DSCP/TOS field match");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("ipt_dscp");
+MODULE_ALIAS("ip6t_dscp");
+MODULE_ALIAS("ipt_tos");
+MODULE_ALIAS("ip6t_tos");
+
+static bool
+dscp_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct xt_dscp_info *info = par->matchinfo;
+ u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT;
+
+ return (dscp == info->dscp) ^ !!info->invert;
+}
+
+static bool
+dscp_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct xt_dscp_info *info = par->matchinfo;
+ u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT;
+
+ return (dscp == info->dscp) ^ !!info->invert;
+}
+
+static bool dscp_mt_check(const struct xt_mtchk_param *par)
+{
+ const struct xt_dscp_info *info = par->matchinfo;
+
+ if (info->dscp > XT_DSCP_MAX) {
+ printk(KERN_ERR "xt_dscp: dscp %x out of range\n", info->dscp);
+ return false;
+ }
+
+ return true;
+}
+
+static bool tos_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct xt_tos_match_info *info = par->matchinfo;
+
+ if (par->match->family == NFPROTO_IPV4)
+ return ((ip_hdr(skb)->tos & info->tos_mask) ==
+ info->tos_value) ^ !!info->invert;
+ else
+ return ((ipv6_get_dsfield(ipv6_hdr(skb)) & info->tos_mask) ==
+ info->tos_value) ^ !!info->invert;
+}
+
+static struct xt_match dscp_mt_reg[] __read_mostly = {
+ {
+ .name = "dscp",
+ .family = NFPROTO_IPV4,
+ .checkentry = dscp_mt_check,
+ .match = dscp_mt,
+ .matchsize = sizeof(struct xt_dscp_info),
+ .me = THIS_MODULE,
+ },
+ {
+ .name = "dscp",
+ .family = NFPROTO_IPV6,
+ .checkentry = dscp_mt_check,
+ .match = dscp_mt6,
+ .matchsize = sizeof(struct xt_dscp_info),
+ .me = THIS_MODULE,
+ },
+ {
+ .name = "tos",
+ .revision = 1,
+ .family = NFPROTO_IPV4,
+ .match = tos_mt,
+ .matchsize = sizeof(struct xt_tos_match_info),
+ .me = THIS_MODULE,
+ },
+ {
+ .name = "tos",
+ .revision = 1,
+ .family = NFPROTO_IPV6,
+ .match = tos_mt,
+ .matchsize = sizeof(struct xt_tos_match_info),
+ .me = THIS_MODULE,
+ },
+};
+
+static int __init dscp_mt_init(void)
+{
+ return xt_register_matches(dscp_mt_reg, ARRAY_SIZE(dscp_mt_reg));
+}
+
+static void __exit dscp_mt_exit(void)
+{
+ xt_unregister_matches(dscp_mt_reg, ARRAY_SIZE(dscp_mt_reg));
+}
+
+module_init(dscp_mt_init);
+module_exit(dscp_mt_exit);
diff --git a/net/netfilter/xt_hl.c b/net/netfilter/xt_hl.c
new file mode 100644
index 00000000000..7726154c87b
--- /dev/null
+++ b/net/netfilter/xt_hl.c
@@ -0,0 +1,108 @@
+/*
+ * IP tables module for matching the value of the TTL
+ * (C) 2000,2001 by Harald Welte <laforge@netfilter.org>
+ *
+ * Hop Limit matching module
+ * (C) 2001-2002 Maciej Soltysiak <solt@dns.toxicfilms.tv>
+ *
+ * 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 <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/module.h>
+#include <linux/skbuff.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter_ipv4/ipt_ttl.h>
+#include <linux/netfilter_ipv6/ip6t_hl.h>
+
+MODULE_AUTHOR("Maciej Soltysiak <solt@dns.toxicfilms.tv>");
+MODULE_DESCRIPTION("Xtables: Hoplimit/TTL field match");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("ipt_ttl");
+MODULE_ALIAS("ip6t_hl");
+
+static bool ttl_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct ipt_ttl_info *info = par->matchinfo;
+ const u8 ttl = ip_hdr(skb)->ttl;
+
+ switch (info->mode) {
+ case IPT_TTL_EQ:
+ return ttl == info->ttl;
+ case IPT_TTL_NE:
+ return ttl != info->ttl;
+ case IPT_TTL_LT:
+ return ttl < info->ttl;
+ case IPT_TTL_GT:
+ return ttl > info->ttl;
+ default:
+ printk(KERN_WARNING "ipt_ttl: unknown mode %d\n",
+ info->mode);
+ return false;
+ }
+
+ return false;
+}
+
+static bool hl_mt6(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct ip6t_hl_info *info = par->matchinfo;
+ const struct ipv6hdr *ip6h = ipv6_hdr(skb);
+
+ switch (info->mode) {
+ case IP6T_HL_EQ:
+ return ip6h->hop_limit == info->hop_limit;
+ break;
+ case IP6T_HL_NE:
+ return ip6h->hop_limit != info->hop_limit;
+ break;
+ case IP6T_HL_LT:
+ return ip6h->hop_limit < info->hop_limit;
+ break;
+ case IP6T_HL_GT:
+ return ip6h->hop_limit > info->hop_limit;
+ break;
+ default:
+ printk(KERN_WARNING "ip6t_hl: unknown mode %d\n",
+ info->mode);
+ return false;
+ }
+
+ return false;
+}
+
+static struct xt_match hl_mt_reg[] __read_mostly = {
+ {
+ .name = "ttl",
+ .revision = 0,
+ .family = NFPROTO_IPV4,
+ .match = ttl_mt,
+ .matchsize = sizeof(struct ipt_ttl_info),
+ .me = THIS_MODULE,
+ },
+ {
+ .name = "hl",
+ .revision = 0,
+ .family = NFPROTO_IPV6,
+ .match = hl_mt6,
+ .matchsize = sizeof(struct ip6t_hl_info),
+ .me = THIS_MODULE,
+ },
+};
+
+static int __init hl_mt_init(void)
+{
+ return xt_register_matches(hl_mt_reg, ARRAY_SIZE(hl_mt_reg));
+}
+
+static void __exit hl_mt_exit(void)
+{
+ xt_unregister_matches(hl_mt_reg, ARRAY_SIZE(hl_mt_reg));
+}
+
+module_init(hl_mt_init);
+module_exit(hl_mt_exit);
diff --git a/net/netfilter/xt_tcpmss.c b/net/netfilter/xt_tcpmss.c
new file mode 100644
index 00000000000..4809b34b10f
--- /dev/null
+++ b/net/netfilter/xt_tcpmss.c
@@ -0,0 +1,110 @@
+/* Kernel module to match TCP MSS values. */
+
+/* Copyright (C) 2000 Marc Boucher <marc@mbsi.ca>
+ * Portions (C) 2005 by Harald Welte <laforge@netfilter.org>
+ *
+ * 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 <linux/module.h>
+#include <linux/skbuff.h>
+#include <net/tcp.h>
+
+#include <linux/netfilter/xt_tcpmss.h>
+#include <linux/netfilter/x_tables.h>
+
+#include <linux/netfilter_ipv4/ip_tables.h>
+#include <linux/netfilter_ipv6/ip6_tables.h>
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Marc Boucher <marc@mbsi.ca>");
+MODULE_DESCRIPTION("Xtables: TCP MSS match");
+MODULE_ALIAS("ipt_tcpmss");
+MODULE_ALIAS("ip6t_tcpmss");
+
+static bool
+tcpmss_mt(const struct sk_buff *skb, const struct xt_match_param *par)
+{
+ const struct xt_tcpmss_match_info *info = par->matchinfo;
+ const struct tcphdr *th;
+ struct tcphdr _tcph;
+ /* tcp.doff is only 4 bits, ie. max 15 * 4 bytes */
+ const u_int8_t *op;
+ u8 _opt[15 * 4 - sizeof(_tcph)];
+ unsigned int i, optlen;
+
+ /* If we don't have the whole header, drop packet. */
+ th = skb_header_pointer(skb, par->thoff, sizeof(_tcph), &_tcph);
+ if (th == NULL)
+ goto dropit;
+
+ /* Malformed. */
+ if (th->doff*4 < sizeof(*th))
+ goto dropit;
+
+ optlen = th->doff*4 - sizeof(*th);
+ if (!optlen)
+ goto out;
+
+ /* Truncated options. */
+ op = skb_header_pointer(skb, par->thoff + sizeof(*th), optlen, _opt);
+ if (op == NULL)
+ goto dropit;
+
+ for (i = 0; i < optlen; ) {
+ if (op[i] == TCPOPT_MSS
+ && (optlen - i) >= TCPOLEN_MSS
+ && op[i+1] == TCPOLEN_MSS) {
+ u_int16_t mssval;
+
+ mssval = (op[i+2] << 8) | op[i+3];
+
+ return (mssval >= info->mss_min &&
+ mssval <= info->mss_max) ^ info->invert;
+ }
+ if (op[i] < 2)
+ i++;
+ else
+ i += op[i+1] ? : 1;
+ }
+out:
+ return info->invert;
+
+dropit:
+ *par->hotdrop = true;
+ return false;
+}
+
+static struct xt_match tcpmss_mt_reg[] __read_mostly = {
+ {
+ .name = "tcpmss",
+ .family = NFPROTO_IPV4,
+ .match = tcpmss_mt,
+ .matchsize = sizeof(struct xt_tcpmss_match_info),
+ .proto = IPPROTO_TCP,
+ .me = THIS_MODULE,
+ },
+ {
+ .name = "tcpmss",
+ .family = NFPROTO_IPV6,
+ .match = tcpmss_mt,
+ .matchsize = sizeof(struct xt_tcpmss_match_info),
+ .proto = IPPROTO_TCP,
+ .me = THIS_MODULE,
+ },
+};
+
+static int __init tcpmss_mt_init(void)
+{
+ return xt_register_matches(tcpmss_mt_reg, ARRAY_SIZE(tcpmss_mt_reg));
+}
+
+static void __exit tcpmss_mt_exit(void)
+{
+ xt_unregister_matches(tcpmss_mt_reg, ARRAY_SIZE(tcpmss_mt_reg));
+}
+
+module_init(tcpmss_mt_init);
+module_exit(tcpmss_mt_exit);
diff --git a/scripts/Lindent b/scripts/Lindent
index 9c4b3e2b709..9c4b3e2b709 100644..100755
--- a/scripts/Lindent
+++ b/scripts/Lindent
diff --git a/scripts/bloat-o-meter b/scripts/bloat-o-meter
index 6501a50e17f..6501a50e17f 100644..100755
--- a/scripts/bloat-o-meter
+++ b/scripts/bloat-o-meter
diff --git a/scripts/checkincludes.pl b/scripts/checkincludes.pl
index 676ddc07d6f..676ddc07d6f 100644..100755
--- a/scripts/checkincludes.pl
+++ b/scripts/checkincludes.pl
diff --git a/scripts/checkkconfigsymbols.sh b/scripts/checkkconfigsymbols.sh
index 46be3c5a62b..46be3c5a62b 100644..100755
--- a/scripts/checkkconfigsymbols.sh
+++ b/scripts/checkkconfigsymbols.sh
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index bc4114f1ab3..bc4114f1ab3 100644..100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
diff --git a/scripts/checkstack.pl b/scripts/checkstack.pl
index 14ee68e991d..14ee68e991d 100644..100755
--- a/scripts/checkstack.pl
+++ b/scripts/checkstack.pl
diff --git a/scripts/checksyscalls.sh b/scripts/checksyscalls.sh
index 66ad375612f..66ad375612f 100644..100755
--- a/scripts/checksyscalls.sh
+++ b/scripts/checksyscalls.sh
diff --git a/scripts/checkversion.pl b/scripts/checkversion.pl
index ec7d21161bd..ec7d21161bd 100644..100755
--- a/scripts/checkversion.pl
+++ b/scripts/checkversion.pl
diff --git a/scripts/cleanfile b/scripts/cleanfile
index cefd29e5229..cefd29e5229 100644..100755
--- a/scripts/cleanfile
+++ b/scripts/cleanfile
diff --git a/scripts/cleanpatch b/scripts/cleanpatch
index 9680d03ad2b..9680d03ad2b 100644..100755
--- a/scripts/cleanpatch
+++ b/scripts/cleanpatch
diff --git a/scripts/config b/scripts/config
index 608d7fdb13e..608d7fdb13e 100644..100755
--- a/scripts/config
+++ b/scripts/config
diff --git a/scripts/decodecode b/scripts/decodecode
index 4b00647814b..4b00647814b 100644..100755
--- a/scripts/decodecode
+++ b/scripts/decodecode
diff --git a/scripts/diffconfig b/scripts/diffconfig
index b91f3e34d44..b91f3e34d44 100644..100755
--- a/scripts/diffconfig
+++ b/scripts/diffconfig
diff --git a/scripts/extract-ikconfig b/scripts/extract-ikconfig
index de233ff43c1..de233ff43c1 100644..100755
--- a/scripts/extract-ikconfig
+++ b/scripts/extract-ikconfig
diff --git a/scripts/get_maintainer.pl b/scripts/get_maintainer.pl
index 81a67a458e7..81a67a458e7 100644..100755
--- a/scripts/get_maintainer.pl
+++ b/scripts/get_maintainer.pl
diff --git a/scripts/headerdep.pl b/scripts/headerdep.pl
index b7f6c560e24..b7f6c560e24 100644..100755
--- a/scripts/headerdep.pl
+++ b/scripts/headerdep.pl
diff --git a/scripts/headers.sh b/scripts/headers.sh
index 0308ecc10d5..0308ecc10d5 100644..100755
--- a/scripts/headers.sh
+++ b/scripts/headers.sh
diff --git a/scripts/kconfig/check.sh b/scripts/kconfig/check.sh
index fa59cbf9d62..fa59cbf9d62 100644..100755
--- a/scripts/kconfig/check.sh
+++ b/scripts/kconfig/check.sh
diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index ea9f8a58678..ea9f8a58678 100644..100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
diff --git a/scripts/makelst b/scripts/makelst
index e6581496d82..e6581496d82 100644..100755
--- a/scripts/makelst
+++ b/scripts/makelst
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
index bce3d0fe6fb..bce3d0fe6fb 100644..100755
--- a/scripts/mkcompile_h
+++ b/scripts/mkcompile_h
diff --git a/scripts/mkuboot.sh b/scripts/mkuboot.sh
index 2e3d3cd916b..2e3d3cd916b 100644..100755
--- a/scripts/mkuboot.sh
+++ b/scripts/mkuboot.sh
diff --git a/scripts/namespace.pl b/scripts/namespace.pl
index c6e88c652c2..c6e88c652c2 100644..100755
--- a/scripts/namespace.pl
+++ b/scripts/namespace.pl
diff --git a/scripts/package/mkspec b/scripts/package/mkspec
index 47bdd2f99b7..47bdd2f99b7 100644..100755
--- a/scripts/package/mkspec
+++ b/scripts/package/mkspec
diff --git a/scripts/patch-kernel b/scripts/patch-kernel
index 46a59cae3a0..46a59cae3a0 100644..100755
--- a/scripts/patch-kernel
+++ b/scripts/patch-kernel
diff --git a/scripts/recordmcount.pl b/scripts/recordmcount.pl
index 090d300d739..090d300d739 100644..100755
--- a/scripts/recordmcount.pl
+++ b/scripts/recordmcount.pl
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index 46989b88d73..46989b88d73 100644..100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
diff --git a/scripts/show_delta b/scripts/show_delta
index 48a706ab3d0..48a706ab3d0 100644..100755
--- a/scripts/show_delta
+++ b/scripts/show_delta
diff --git a/scripts/tags.sh b/scripts/tags.sh
index d52f7a01557..d52f7a01557 100644..100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
diff --git a/scripts/ver_linux b/scripts/ver_linux
index 7de36df4eaa..7de36df4eaa 100644..100755
--- a/scripts/ver_linux
+++ b/scripts/ver_linux
diff --git a/security/trustees/Makefile b/security/trustees/Makefile
index 0613ea613c9..0613ea613c9 100644..100755
--- a/security/trustees/Makefile
+++ b/security/trustees/Makefile
diff --git a/security/trustees/fs.c b/security/trustees/fs.c
index 6463c64631a..6463c64631a 100644..100755
--- a/security/trustees/fs.c
+++ b/security/trustees/fs.c
diff --git a/security/trustees/funcs.c b/security/trustees/funcs.c
index fe152d75df2..fe152d75df2 100644..100755
--- a/security/trustees/funcs.c
+++ b/security/trustees/funcs.c
diff --git a/security/trustees/init.c b/security/trustees/init.c
index 38eb964c382..38eb964c382 100644..100755
--- a/security/trustees/init.c
+++ b/security/trustees/init.c
diff --git a/security/trustees/internal.h b/security/trustees/internal.h
index f7203a05fc1..f7203a05fc1 100644..100755
--- a/security/trustees/internal.h
+++ b/security/trustees/internal.h
diff --git a/security/trustees/security.c b/security/trustees/security.c
index bbc98886243..bbc98886243 100644..100755
--- a/security/trustees/security.c
+++ b/security/trustees/security.c
diff --git a/tools/perf/util/PERF-VERSION-GEN b/tools/perf/util/PERF-VERSION-GEN
index 54552a00a11..54552a00a11 100644..100755
--- a/tools/perf/util/PERF-VERSION-GEN
+++ b/tools/perf/util/PERF-VERSION-GEN
diff --git a/tools/perf/util/generate-cmdlist.sh b/tools/perf/util/generate-cmdlist.sh
index f06f6fd148f..f06f6fd148f 100644..100755
--- a/tools/perf/util/generate-cmdlist.sh
+++ b/tools/perf/util/generate-cmdlist.sh