diff options
3 files changed, 407 insertions, 471 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch b/target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch index 79eb170c2..32251e37d 100644 --- a/target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch +++ b/target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch @@ -15,8 +15,6 @@ Date:   Wed May 21 14:08:38 2008 -0700      Signed-off-by: Patrick McHardy <kaber@trash.net>      Signed-off-by: David S. Miller <davem@davemloft.net> -diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h -index e4c6659..0c5eb7e 100644  --- a/include/linux/netfilter.h  +++ b/include/linux/netfilter.h  @@ -3,7 +3,6 @@ @@ -26,17 +24,15 @@ index e4c6659..0c5eb7e 100644  -#include <linux/types.h>   #include <linux/skbuff.h>   #include <linux/net.h> - #include <linux/netdevice.h> -@@ -14,6 +13,7 @@ + #include <linux/if.h> +@@ -12,6 +11,7 @@ + #include <linux/wait.h>   #include <linux/list.h> - #include <net/net_namespace.h>   #endif  +#include <linux/types.h>   #include <linux/compiler.h>   /* Responses from hook functions. */ -diff --git a/include/linux/netfilter_arp/arp_tables.h b/include/linux/netfilter_arp/arp_tables.h -index dd9c97f..590ac3d 100644  --- a/include/linux/netfilter_arp/arp_tables.h  +++ b/include/linux/netfilter_arp/arp_tables.h  @@ -11,11 +11,11 @@ @@ -52,8 +48,6 @@ index dd9c97f..590ac3d 100644   #include <linux/compiler.h>   #include <linux/netfilter_arp.h> -diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h -index bfc889f..092bd50 100644  --- a/include/linux/netfilter_ipv4/ip_tables.h  +++ b/include/linux/netfilter_ipv4/ip_tables.h  @@ -17,11 +17,11 @@ @@ -69,8 +63,6 @@ index bfc889f..092bd50 100644   #include <linux/compiler.h>   #include <linux/netfilter_ipv4.h> -diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h -index f2507dc..1089e33 100644  --- a/include/linux/netfilter_ipv6/ip6_tables.h  +++ b/include/linux/netfilter_ipv6/ip6_tables.h  @@ -17,11 +17,11 @@ diff --git a/target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch index a0daf1967..fdf749d43 100644 --- a/target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch +++ b/target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch @@ -1,173 +1,3 @@ - - ---- - - drivers/net/Kconfig                     |  123 ++++++++ - drivers/net/Makefile                    |    1  - drivers/net/imq.c                       |  474 +++++++++++++++++++++++++++++++ - include/linux/imq.h                     |    9 + - include/linux/netfilter_ipv4/ipt_IMQ.h  |    8 + - include/linux/netfilter_ipv6/ip6t_IMQ.h |    8 + - include/linux/skbuff.h                  |    8 + - net/core/dev.c                          |    9 + - net/ipv4/netfilter/Kconfig              |   11 + - net/ipv4/netfilter/Makefile             |    1  - net/ipv4/netfilter/ipt_IMQ.c            |   69 +++++ - net/ipv6/netfilter/Kconfig              |    9 + - net/ipv6/netfilter/Makefile             |    1  - net/ipv6/netfilter/ip6t_IMQ.c           |   69 +++++ - net/sched/sch_generic.c                 |    1  - 15 files changed, 800 insertions(+), 1 deletions(-) - create mode 100644 drivers/net/imq.c - create mode 100644 include/linux/imq.h - create mode 100644 include/linux/netfilter_ipv4/ipt_IMQ.h - create mode 100644 include/linux/netfilter_ipv6/ip6t_IMQ.h - create mode 100644 net/ipv4/netfilter/ipt_IMQ.c - create mode 100644 net/ipv6/netfilter/ip6t_IMQ.c - - ---- a/drivers/net/Kconfig -+++ b/drivers/net/Kconfig -@@ -117,6 +117,129 @@ - 	  To compile this driver as a module, choose M here: the module - 	  will be called eql.  If unsure, say N. -  -+config IMQ -+	tristate "IMQ (intermediate queueing device) support" -+	depends on NETDEVICES && NETFILTER -+	---help--- -+	  The IMQ device(s) is used as placeholder for QoS queueing -+	  disciplines. Every packet entering/leaving the IP stack can be -+	  directed through the IMQ device where it's enqueued/dequeued to the -+	  attached qdisc. This allows you to treat network devices as classes -+	  and distribute bandwidth among them. Iptables is used to specify -+	  through which IMQ device, if any, packets travel. -+ -+	  More information at: http://www.linuximq.net/ -+ -+	  To compile this driver as a module, choose M here: the module -+	  will be called imq.  If unsure, say N. -+ -+choice -+	prompt "IMQ behavior (PRE/POSTROUTING)" -+	depends on IMQ -+	default IMQ_BEHAVIOR_BB -+	help -+ -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		IMQ can work in any of the following ways: -+ -+		    PREROUTING   |      POSTROUTING -+		-----------------|------------------- -+		#1  After NAT    |      After NAT -+		#2  After NAT    |      Before NAT -+		#3  Before NAT   |      After NAT -+		#4  Before NAT   |      Before NAT -+ -+		The default behavior is to hook before NAT on PREROUTING -+		and after NAT on POSTROUTING (#3). -+ -+		This settings are specially usefull when trying to use IMQ -+		to shape NATed clients. -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_AA -+	bool "IMQ AA" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   After NAT -+		POSTROUTING:  After NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_AB -+	bool "IMQ AB" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   After NAT -+		POSTROUTING:  Before NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_BA -+	bool "IMQ BA" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   Before NAT -+		POSTROUTING:  After NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_BB -+	bool "IMQ BB" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   Before NAT -+		POSTROUTING:  Before NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+endchoice -+ -+config IMQ_NUM_DEVS -+ -+	int "Number of IMQ devices" -+	range 2 16 -+	depends on IMQ -+	default "16" -+	help -+ -+		This settings defines how many IMQ devices will be -+		created. -+ -+		The default value is 16. -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ - config TUN - 	tristate "Universal TUN/TAP device driver support" - 	select CRC32 ---- a/drivers/net/Makefile -+++ b/drivers/net/Makefile -@@ -143,6 +143,7 @@ - obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o -  - obj-$(CONFIG_DUMMY) += dummy.o -+obj-$(CONFIG_IMQ) += imq.o - obj-$(CONFIG_IFB) += ifb.o - obj-$(CONFIG_MACVLAN) += macvlan.o - obj-$(CONFIG_DE600) += de600.o  --- /dev/null  +++ b/drivers/net/imq.c  @@ -0,0 +1,474 @@ @@ -220,13 +50,13 @@  + *             I didn't forget anybody). I apologize again for my lack of time.  + *  + * -+ *             2008/06/07 - Changed imq.c to use qdisc_run() instead of -+ *             qdisc_restart() and moved qdisc_run() to tasklet to avoid -+ *             recursive locking. (Jussi Kivilinna) -+ * -+ *             2008/06/14 - New initialization routines to fix 'rmmod' not -+ *             working anymore. Used code from ifb.c (Jussi Kivilinna) -+ * ++ *             2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead  ++ *	       of qdisc_restart() and moved qdisc_run() to tasklet to avoid ++ *             recursive locking. New initialization routines to fix 'rmmod' not ++ *             working anymore. Used code from ifb.c. (Jussi Kivilinna) ++ *	        ++ *	       Also, many thanks to pablo Sebastian Greco for making the initial ++ *	       patch and to those who helped the testing.  + *  + *             More info at: http://www.linuximq.net/ (Andre Correa)  + */ @@ -645,6 +475,148 @@  +MODULE_LICENSE("GPL");  +MODULE_ALIAS_RTNL_LINK("imq");  + +--- a/drivers/net/Kconfig ++++ b/drivers/net/Kconfig +@@ -117,6 +117,129 @@ + 	  To compile this driver as a module, choose M here: the module + 	  will be called eql.  If unsure, say N. +  ++config IMQ ++	tristate "IMQ (intermediate queueing device) support" ++	depends on NETDEVICES && NETFILTER ++	---help--- ++	  The IMQ device(s) is used as placeholder for QoS queueing ++	  disciplines. Every packet entering/leaving the IP stack can be ++	  directed through the IMQ device where it's enqueued/dequeued to the ++	  attached qdisc. This allows you to treat network devices as classes ++	  and distribute bandwidth among them. Iptables is used to specify ++	  through which IMQ device, if any, packets travel. ++ ++	  More information at: http://www.linuximq.net/ ++ ++	  To compile this driver as a module, choose M here: the module ++	  will be called imq.  If unsure, say N. ++ ++choice ++	prompt "IMQ behavior (PRE/POSTROUTING)" ++	depends on IMQ ++	default IMQ_BEHAVIOR_AB ++	help ++ ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		IMQ can work in any of the following ways: ++ ++		    PREROUTING   |      POSTROUTING ++		-----------------|------------------- ++		#1  After NAT    |      After NAT ++		#2  After NAT    |      Before NAT ++		#3  Before NAT   |      After NAT ++		#4  Before NAT   |      Before NAT ++ ++		The default behavior is to hook before NAT on PREROUTING ++		and after NAT on POSTROUTING (#3). ++ ++		This settings are specially usefull when trying to use IMQ ++		to shape NATed clients. ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AA ++	bool "IMQ AA" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   After NAT ++		POSTROUTING:  After NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AB ++	bool "IMQ AB" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   After NAT ++		POSTROUTING:  Before NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BA ++	bool "IMQ BA" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   Before NAT ++		POSTROUTING:  After NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BB ++	bool "IMQ BB" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   Before NAT ++		POSTROUTING:  Before NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++endchoice ++ ++config IMQ_NUM_DEVS ++ ++	int "Number of IMQ devices" ++	range 2 16 ++	depends on IMQ ++	default "16" ++	help ++ ++		This settings defines how many IMQ devices will be ++		created. ++ ++		The default value is 16. ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ + config TUN + 	tristate "Universal TUN/TAP device driver support" + 	select CRC32 +--- a/drivers/net/Makefile ++++ b/drivers/net/Makefile +@@ -143,6 +143,7 @@ + obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o +  + obj-$(CONFIG_DUMMY) += dummy.o ++obj-$(CONFIG_IMQ) += imq.o + obj-$(CONFIG_IFB) += ifb.o + obj-$(CONFIG_MACVLAN) += macvlan.o + obj-$(CONFIG_DE600) += de600.o  --- /dev/null  +++ b/include/linux/imq.h  @@ -0,0 +1,9 @@ @@ -728,36 +700,6 @@   			dev_queue_xmit_nit(skb, dev);   		if (netif_needs_gso(dev, skb)) { ---- a/net/ipv4/netfilter/Kconfig -+++ b/net/ipv4/netfilter/Kconfig -@@ -145,6 +145,17 @@ -  - 	  To compile it as a module, choose M here.  If unsure, say N. -  -+config IP_NF_TARGET_IMQ -+       tristate "IMQ target support" -+       depends on IP_NF_MANGLE -+       help -+         This option adds a `IMQ' target which is used to specify if and -+         to which IMQ device packets should get enqueued/dequeued. -+ -+	 For more information visit: http://www.linuximq.net/ -+ -+         To compile it as a module, choose M here.  If unsure, say N. -+ - config IP_NF_TARGET_REJECT - 	tristate "REJECT target support" - 	depends on IP_NF_FILTER ---- a/net/ipv4/netfilter/Makefile -+++ b/net/ipv4/netfilter/Makefile -@@ -55,6 +55,7 @@ - obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o - obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o - obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o -+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o - obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o - obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o - obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o  --- /dev/null  +++ b/net/ipv4/netfilter/ipt_IMQ.c  @@ -0,0 +1,69 @@ @@ -830,34 +772,36 @@  +MODULE_AUTHOR("http://www.linuximq.net");  +MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");  +MODULE_LICENSE("GPL"); ---- a/net/ipv6/netfilter/Kconfig -+++ b/net/ipv6/netfilter/Kconfig -@@ -179,6 +179,15 @@ +--- a/net/ipv4/netfilter/Kconfig ++++ b/net/ipv4/netfilter/Kconfig +@@ -145,6 +145,17 @@   	  To compile it as a module, choose M here.  If unsure, say N. -+config IP6_NF_TARGET_IMQ -+	tristate "IMQ target support" -+	depends on IP6_NF_MANGLE -+	help -+          This option adds a `IMQ' target which is used to specify if and -+          to which imq device packets should get enqueued/dequeued. ++config IP_NF_TARGET_IMQ ++       tristate "IMQ target support" ++       depends on IP_NF_MANGLE && IMQ ++       help ++         This option adds a `IMQ' target which is used to specify if and ++         to which IMQ device packets should get enqueued/dequeued.  + -+          To compile it as a module, choose M here.  If unsure, say N. ++	 For more information visit: http://www.linuximq.net/  + - config IP6_NF_TARGET_HL - 	tristate  'HL (hoplimit) target support' - 	depends on IP6_NF_MANGLE ---- a/net/ipv6/netfilter/Makefile -+++ b/net/ipv6/netfilter/Makefile -@@ -6,6 +6,7 @@ - obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o - obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o - obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o -+obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o - obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o - obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o -  ++         To compile it as a module, choose M here.  If unsure, say N. ++ + config IP_NF_TARGET_REJECT + 	tristate "REJECT target support" + 	depends on IP_NF_FILTER +--- a/net/ipv4/netfilter/Makefile ++++ b/net/ipv4/netfilter/Makefile +@@ -55,6 +55,7 @@ + obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o + obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o + obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o ++obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o + obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o + obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o + obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o  --- /dev/null  +++ b/net/ipv6/netfilter/ip6t_IMQ.c  @@ -0,0 +1,69 @@ @@ -930,6 +874,34 @@  +MODULE_AUTHOR("http://www.linuximq.net");  +MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");  +MODULE_LICENSE("GPL"); +--- a/net/ipv6/netfilter/Kconfig ++++ b/net/ipv6/netfilter/Kconfig +@@ -179,6 +179,15 @@ +  + 	  To compile it as a module, choose M here.  If unsure, say N. +  ++config IP6_NF_TARGET_IMQ ++	tristate "IMQ target support" ++	depends on IP6_NF_MANGLE && IMQ ++	help ++          This option adds a `IMQ' target which is used to specify if and ++          to which imq device packets should get enqueued/dequeued. ++ ++          To compile it as a module, choose M here.  If unsure, say N. ++ + config IP6_NF_TARGET_HL + 	tristate  'HL (hoplimit) target support' + 	depends on IP6_NF_MANGLE +--- a/net/ipv6/netfilter/Makefile ++++ b/net/ipv6/netfilter/Makefile +@@ -6,6 +6,7 @@ + obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o + obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o + obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o ++obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o + obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o + obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o +   --- a/net/sched/sch_generic.c  +++ b/net/sched/sch_generic.c  @@ -203,6 +203,7 @@ diff --git a/target/linux/generic-2.6/patches-2.6.26/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.26/150-netfilter_imq.patch index c99a30d23..cd05e0f6e 100644 --- a/target/linux/generic-2.6/patches-2.6.26/150-netfilter_imq.patch +++ b/target/linux/generic-2.6/patches-2.6.26/150-netfilter_imq.patch @@ -1,173 +1,3 @@ - - ---- - - drivers/net/Kconfig                     |  123 ++++++++ - drivers/net/Makefile                    |    1  - drivers/net/imq.c                       |  474 +++++++++++++++++++++++++++++++ - include/linux/imq.h                     |    9 + - include/linux/netfilter_ipv4/ipt_IMQ.h  |    8 + - include/linux/netfilter_ipv6/ip6t_IMQ.h |    8 + - include/linux/skbuff.h                  |    8 + - net/core/dev.c                          |    9 + - net/ipv4/netfilter/Kconfig              |   11 + - net/ipv4/netfilter/Makefile             |    1  - net/ipv4/netfilter/ipt_IMQ.c            |   69 +++++ - net/ipv6/netfilter/Kconfig              |    9 + - net/ipv6/netfilter/Makefile             |    1  - net/ipv6/netfilter/ip6t_IMQ.c           |   69 +++++ - net/sched/sch_generic.c                 |    1  - 15 files changed, 800 insertions(+), 1 deletions(-) - create mode 100644 drivers/net/imq.c - create mode 100644 include/linux/imq.h - create mode 100644 include/linux/netfilter_ipv4/ipt_IMQ.h - create mode 100644 include/linux/netfilter_ipv6/ip6t_IMQ.h - create mode 100644 net/ipv4/netfilter/ipt_IMQ.c - create mode 100644 net/ipv6/netfilter/ip6t_IMQ.c - - ---- a/drivers/net/Kconfig -+++ b/drivers/net/Kconfig -@@ -117,6 +117,129 @@ - 	  To compile this driver as a module, choose M here: the module - 	  will be called eql.  If unsure, say N. -  -+config IMQ -+	tristate "IMQ (intermediate queueing device) support" -+	depends on NETDEVICES && NETFILTER -+	---help--- -+	  The IMQ device(s) is used as placeholder for QoS queueing -+	  disciplines. Every packet entering/leaving the IP stack can be -+	  directed through the IMQ device where it's enqueued/dequeued to the -+	  attached qdisc. This allows you to treat network devices as classes -+	  and distribute bandwidth among them. Iptables is used to specify -+	  through which IMQ device, if any, packets travel. -+ -+	  More information at: http://www.linuximq.net/ -+ -+	  To compile this driver as a module, choose M here: the module -+	  will be called imq.  If unsure, say N. -+ -+choice -+	prompt "IMQ behavior (PRE/POSTROUTING)" -+	depends on IMQ -+	default IMQ_BEHAVIOR_BB -+	help -+ -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		IMQ can work in any of the following ways: -+ -+		    PREROUTING   |      POSTROUTING -+		-----------------|------------------- -+		#1  After NAT    |      After NAT -+		#2  After NAT    |      Before NAT -+		#3  Before NAT   |      After NAT -+		#4  Before NAT   |      Before NAT -+ -+		The default behavior is to hook before NAT on PREROUTING -+		and after NAT on POSTROUTING (#3). -+ -+		This settings are specially usefull when trying to use IMQ -+		to shape NATed clients. -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_AA -+	bool "IMQ AA" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   After NAT -+		POSTROUTING:  After NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_AB -+	bool "IMQ AB" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   After NAT -+		POSTROUTING:  Before NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_BA -+	bool "IMQ BA" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   Before NAT -+		POSTROUTING:  After NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+config IMQ_BEHAVIOR_BB -+	bool "IMQ BB" -+	help -+		This settings defines how IMQ behaves in respect to its -+		hooking in PREROUTING and POSTROUTING. -+ -+		Choosing this option will make IMQ hook like this: -+ -+		PREROUTING:   Before NAT -+		POSTROUTING:  Before NAT -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ -+endchoice -+ -+config IMQ_NUM_DEVS -+ -+	int "Number of IMQ devices" -+	range 2 16 -+	depends on IMQ -+	default "16" -+	help -+ -+		This settings defines how many IMQ devices will be -+		created. -+ -+		The default value is 16. -+ -+		More information can be found at: www.linuximq.net -+ -+		If not sure leave the default settings alone. -+ - config TUN - 	tristate "Universal TUN/TAP device driver support" - 	select CRC32 ---- a/drivers/net/Makefile -+++ b/drivers/net/Makefile -@@ -142,6 +142,7 @@ - obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o -  - obj-$(CONFIG_DUMMY) += dummy.o -+obj-$(CONFIG_IMQ) += imq.o - obj-$(CONFIG_IFB) += ifb.o - obj-$(CONFIG_MACVLAN) += macvlan.o - obj-$(CONFIG_DE600) += de600.o  --- /dev/null  +++ b/drivers/net/imq.c  @@ -0,0 +1,474 @@ @@ -220,13 +50,13 @@  + *             I didn't forget anybody). I apologize again for my lack of time.  + *  + * -+ *             2008/06/07 - Changed imq.c to use qdisc_run() instead of -+ *             qdisc_restart() and moved qdisc_run() to tasklet to avoid -+ *             recursive locking. (Jussi Kivilinna) -+ * -+ *             2008/06/14 - New initialization routines to fix 'rmmod' not -+ *             working anymore. Used code from ifb.c (Jussi Kivilinna) -+ * ++ *             2008/06/17 - 2.6.25 - Changed imq.c to use qdisc_run() instead  ++ *	       of qdisc_restart() and moved qdisc_run() to tasklet to avoid ++ *             recursive locking. New initialization routines to fix 'rmmod' not ++ *             working anymore. Used code from ifb.c. (Jussi Kivilinna) ++ *	        ++ *	       Also, many thanks to pablo Sebastian Greco for making the initial ++ *	       patch and to those who helped the testing.  + *  + *             More info at: http://www.linuximq.net/ (Andre Correa)  + */ @@ -645,6 +475,148 @@  +MODULE_LICENSE("GPL");  +MODULE_ALIAS_RTNL_LINK("imq");  + +--- a/drivers/net/Kconfig ++++ b/drivers/net/Kconfig +@@ -117,6 +117,129 @@ + 	  To compile this driver as a module, choose M here: the module + 	  will be called eql.  If unsure, say N. +  ++config IMQ ++	tristate "IMQ (intermediate queueing device) support" ++	depends on NETDEVICES && NETFILTER ++	---help--- ++	  The IMQ device(s) is used as placeholder for QoS queueing ++	  disciplines. Every packet entering/leaving the IP stack can be ++	  directed through the IMQ device where it's enqueued/dequeued to the ++	  attached qdisc. This allows you to treat network devices as classes ++	  and distribute bandwidth among them. Iptables is used to specify ++	  through which IMQ device, if any, packets travel. ++ ++	  More information at: http://www.linuximq.net/ ++ ++	  To compile this driver as a module, choose M here: the module ++	  will be called imq.  If unsure, say N. ++ ++choice ++	prompt "IMQ behavior (PRE/POSTROUTING)" ++	depends on IMQ ++	default IMQ_BEHAVIOR_AB ++	help ++ ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		IMQ can work in any of the following ways: ++ ++		    PREROUTING   |      POSTROUTING ++		-----------------|------------------- ++		#1  After NAT    |      After NAT ++		#2  After NAT    |      Before NAT ++		#3  Before NAT   |      After NAT ++		#4  Before NAT   |      Before NAT ++ ++		The default behavior is to hook before NAT on PREROUTING ++		and after NAT on POSTROUTING (#3). ++ ++		This settings are specially usefull when trying to use IMQ ++		to shape NATed clients. ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AA ++	bool "IMQ AA" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   After NAT ++		POSTROUTING:  After NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_AB ++	bool "IMQ AB" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   After NAT ++		POSTROUTING:  Before NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BA ++	bool "IMQ BA" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   Before NAT ++		POSTROUTING:  After NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++config IMQ_BEHAVIOR_BB ++	bool "IMQ BB" ++	help ++		This settings defines how IMQ behaves in respect to its ++		hooking in PREROUTING and POSTROUTING. ++ ++		Choosing this option will make IMQ hook like this: ++ ++		PREROUTING:   Before NAT ++		POSTROUTING:  Before NAT ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ ++endchoice ++ ++config IMQ_NUM_DEVS ++ ++	int "Number of IMQ devices" ++	range 2 16 ++	depends on IMQ ++	default "16" ++	help ++ ++		This settings defines how many IMQ devices will be ++		created. ++ ++		The default value is 16. ++ ++		More information can be found at: www.linuximq.net ++ ++		If not sure leave the default settings alone. ++ + config TUN + 	tristate "Universal TUN/TAP device driver support" + 	select CRC32 +--- a/drivers/net/Makefile ++++ b/drivers/net/Makefile +@@ -142,6 +142,7 @@ + obj-$(CONFIG_XEN_NETDEV_FRONTEND) += xen-netfront.o +  + obj-$(CONFIG_DUMMY) += dummy.o ++obj-$(CONFIG_IMQ) += imq.o + obj-$(CONFIG_IFB) += ifb.o + obj-$(CONFIG_MACVLAN) += macvlan.o + obj-$(CONFIG_DE600) += de600.o  --- /dev/null  +++ b/include/linux/imq.h  @@ -0,0 +1,9 @@ @@ -728,36 +700,6 @@   			dev_queue_xmit_nit(skb, dev);   		if (netif_needs_gso(dev, skb)) { ---- a/net/ipv4/netfilter/Kconfig -+++ b/net/ipv4/netfilter/Kconfig -@@ -145,6 +145,17 @@ -  - 	  To compile it as a module, choose M here.  If unsure, say N. -  -+config IP_NF_TARGET_IMQ -+       tristate "IMQ target support" -+       depends on IP_NF_MANGLE -+       help -+         This option adds a `IMQ' target which is used to specify if and -+         to which IMQ device packets should get enqueued/dequeued. -+ -+	 For more information visit: http://www.linuximq.net/ -+ -+         To compile it as a module, choose M here.  If unsure, say N. -+ - config IP_NF_TARGET_REJECT - 	tristate "REJECT target support" - 	depends on IP_NF_FILTER ---- a/net/ipv4/netfilter/Makefile -+++ b/net/ipv4/netfilter/Makefile -@@ -58,6 +58,7 @@ - obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o - obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o - obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o -+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o - obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o - obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o - obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o  --- /dev/null  +++ b/net/ipv4/netfilter/ipt_IMQ.c  @@ -0,0 +1,69 @@ @@ -830,34 +772,36 @@  +MODULE_AUTHOR("http://www.linuximq.net");  +MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");  +MODULE_LICENSE("GPL"); ---- a/net/ipv6/netfilter/Kconfig -+++ b/net/ipv6/netfilter/Kconfig -@@ -179,6 +179,15 @@ +--- a/net/ipv4/netfilter/Kconfig ++++ b/net/ipv4/netfilter/Kconfig +@@ -145,6 +145,17 @@   	  To compile it as a module, choose M here.  If unsure, say N. -+config IP6_NF_TARGET_IMQ -+	tristate "IMQ target support" -+	depends on IP6_NF_MANGLE -+	help -+          This option adds a `IMQ' target which is used to specify if and -+          to which imq device packets should get enqueued/dequeued. ++config IP_NF_TARGET_IMQ ++       tristate "IMQ target support" ++       depends on IP_NF_MANGLE && IMQ ++       help ++         This option adds a `IMQ' target which is used to specify if and ++         to which IMQ device packets should get enqueued/dequeued.  + -+          To compile it as a module, choose M here.  If unsure, say N. ++	 For more information visit: http://www.linuximq.net/  + - config IP6_NF_TARGET_HL - 	tristate  'HL (hoplimit) target support' - 	depends on IP6_NF_MANGLE ---- a/net/ipv6/netfilter/Makefile -+++ b/net/ipv6/netfilter/Makefile -@@ -6,6 +6,7 @@ - obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o - obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o - obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o -+obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o - obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o - obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o -  ++         To compile it as a module, choose M here.  If unsure, say N. ++ + config IP_NF_TARGET_REJECT + 	tristate "REJECT target support" + 	depends on IP_NF_FILTER +--- a/net/ipv4/netfilter/Makefile ++++ b/net/ipv4/netfilter/Makefile +@@ -58,6 +58,7 @@ + obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o + obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o + obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o ++obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o + obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o + obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o + obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o  --- /dev/null  +++ b/net/ipv6/netfilter/ip6t_IMQ.c  @@ -0,0 +1,69 @@ @@ -930,6 +874,34 @@  +MODULE_AUTHOR("http://www.linuximq.net");  +MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See http://www.linuximq.net/ for more information.");  +MODULE_LICENSE("GPL"); +--- a/net/ipv6/netfilter/Kconfig ++++ b/net/ipv6/netfilter/Kconfig +@@ -179,6 +179,15 @@ +  + 	  To compile it as a module, choose M here.  If unsure, say N. +  ++config IP6_NF_TARGET_IMQ ++	tristate "IMQ target support" ++	depends on IP6_NF_MANGLE && IMQ ++	help ++          This option adds a `IMQ' target which is used to specify if and ++          to which imq device packets should get enqueued/dequeued. ++ ++          To compile it as a module, choose M here.  If unsure, say N. ++ + config IP6_NF_TARGET_HL + 	tristate  'HL (hoplimit) target support' + 	depends on IP6_NF_MANGLE +--- a/net/ipv6/netfilter/Makefile ++++ b/net/ipv6/netfilter/Makefile +@@ -6,6 +6,7 @@ + obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o + obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o + obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o ++obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o + obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o + obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o +   --- a/net/sched/sch_generic.c  +++ b/net/sched/sch_generic.c  @@ -203,6 +203,7 @@  | 
