-net: add Intermediate Queueing Device (imq)
-
-From: Jussi Kivilinna <jussi.kivilinna@iki.fi>
-
-This patch is for kernel version 3.12.4+.
-
-See: http://linuximq.net/
-
-Signed-off-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
----
- drivers/net/Kconfig | 119 ++++
- drivers/net/Makefile | 1
- drivers/net/imq.c | 1007 +++++++++++++++++++++++++++++++
- include/linux/imq.h | 13
- include/linux/netfilter/xt_IMQ.h | 9
- include/linux/netfilter_ipv4/ipt_IMQ.h | 10
- include/linux/netfilter_ipv6/ip6t_IMQ.h | 10
- include/linux/skbuff.h | 22 +
- include/net/netfilter/nf_queue.h | 6
- include/uapi/linux/netfilter.h | 3
- net/core/dev.c | 8
- net/core/skbuff.c | 112 +++
- net/ipv6/ip6_output.c | 10
- net/netfilter/Kconfig | 12
- net/netfilter/Makefile | 1
- net/netfilter/core.c | 6
- net/netfilter/nf_internals.h | 2
- net/netfilter/nf_queue.c | 36 +
- net/netfilter/xt_IMQ.c | 72 ++
- 19 files changed, 1449 insertions(+), 10 deletions(-)
- create mode 100644 drivers/net/imq.c
- create mode 100644 include/linux/imq.h
- create mode 100644 include/linux/netfilter/xt_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/netfilter/xt_IMQ.c
-
-diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
-index b45b240..5a20da0 100644
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -203,6 +203,125 @@ config RIONET_RX_SIZE
- depends on RIONET
- default "128"
-
-+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 setting 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 setting 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 setting 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 setting 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 setting 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 setting 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
-diff --git a/drivers/net/Makefile b/drivers/net/Makefile
-index 3fef8a8..12dafc0 100644
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -9,6 +9,7 @@ obj-$(CONFIG_BONDING) += bonding/
- obj-$(CONFIG_DUMMY) += dummy.o
- obj-$(CONFIG_EQUALIZER) += eql.o
- obj-$(CONFIG_IFB) += ifb.o
-+obj-$(CONFIG_IMQ) += imq.o
- obj-$(CONFIG_MACVLAN) += macvlan.o
- obj-$(CONFIG_MACVTAP) += macvtap.o
- obj-$(CONFIG_MII) += mii.o
-diff --git a/drivers/net/imq.c b/drivers/net/imq.c
-new file mode 100644
-index 0000000..801bc8c
---- /dev/null
-+++ b/drivers/net/imq.c
-@@ -0,0 +1,1012 @@