generic: update mips multimachine patch
[openwrt.git] / target / linux / generic-2.6 / patches-2.6.25 / 150-netfilter_imq.patch
index 1524be1..5fcef0a 100644 (file)
@@ -1,180 +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
-
-
-diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
-index 3a0b20a..05c51e7 100644
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -117,6 +117,129 @@ config EQUALIZER
-         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
-diff --git a/drivers/net/Makefile b/drivers/net/Makefile
-index 3b1ea32..17d0575 100644
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -143,6 +143,7 @@ obj-$(CONFIG_SLHC) += slhc.o
- 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
-diff --git a/drivers/net/imq.c b/drivers/net/imq.c
-new file mode 100644
-index 0000000..47c31b4
 --- /dev/null
 +++ b/drivers/net/imq.c
 @@ -0,0 +1,474 @@
@@ -227,13 +50,13 @@ index 0000000..47c31b4
 + *             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)
 + */
@@ -256,7 +79,7 @@ index 0000000..47c31b4
 +
 +struct imq_private {
 +      struct tasklet_struct tasklet;
-+      int tasklet_pending;
++      unsigned long tasklet_pending;
 +};
 +
 +static nf_hookfn imq_nf_hook;
@@ -652,9 +475,148 @@ index 0000000..47c31b4
 +MODULE_LICENSE("GPL");
 +MODULE_ALIAS_RTNL_LINK("imq");
 +
-diff --git a/include/linux/imq.h b/include/linux/imq.h
-new file mode 100644
-index 0000000..1447c4e
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -117,6 +117,129 @@ config EQUALIZER
+         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_SLHC) += slhc.o
+ 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 @@
@@ -667,9 +629,6 @@ index 0000000..1447c4e
 +#define IMQ_F_ENQUEUE  0x80
 +
 +#endif /* _IMQ_H */
-diff --git a/include/linux/netfilter_ipv4/ipt_IMQ.h b/include/linux/netfilter_ipv4/ipt_IMQ.h
-new file mode 100644
-index 0000000..a304991
 --- /dev/null
 +++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
 @@ -0,0 +1,8 @@
@@ -681,9 +640,6 @@ index 0000000..a304991
 +};
 +
 +#endif /* _IPT_IMQ_H */
-diff --git a/include/linux/netfilter_ipv6/ip6t_IMQ.h b/include/linux/netfilter_ipv6/ip6t_IMQ.h
-new file mode 100644
-index 0000000..605f549
 --- /dev/null
 +++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
 @@ -0,0 +1,8 @@
@@ -695,8 +651,6 @@ index 0000000..605f549
 +};
 +
 +#endif /* _IP6T_IMQ_H */
-diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index bbd8d00..f7d6f7e 100644
 --- a/include/linux/skbuff.h
 +++ b/include/linux/skbuff.h
 @@ -296,6 +296,10 @@ struct sk_buff {
@@ -710,7 +664,7 @@ index bbd8d00..f7d6f7e 100644
  #ifdef CONFIG_BRIDGE_NETFILTER
        struct nf_bridge_info   *nf_bridge;
  #endif
-@@ -1736,6 +1740,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src)
+@@ -1736,6 +1740,10 @@ static inline void __nf_copy(struct sk_b
        dst->nfct_reasm = src->nfct_reasm;
        nf_conntrack_get_reasm(src->nfct_reasm);
  #endif
@@ -721,8 +675,6 @@ index bbd8d00..f7d6f7e 100644
  #ifdef CONFIG_BRIDGE_NETFILTER
        dst->nf_bridge  = src->nf_bridge;
        nf_bridge_get(src->nf_bridge);
-diff --git a/net/core/dev.c b/net/core/dev.c
-index 460e7f9..094838b 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -95,6 +95,9 @@
@@ -735,7 +687,7 @@ index 460e7f9..094838b 100644
  #include <linux/proc_fs.h>
  #include <linux/seq_file.h>
  #include <linux/stat.h>
-@@ -1537,7 +1540,11 @@ static int dev_gso_segment(struct sk_buff *skb)
+@@ -1537,7 +1540,11 @@ static int dev_gso_segment(struct sk_buf
  int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
  {
        if (likely(!skb->next)) {
@@ -748,43 +700,6 @@ index 460e7f9..094838b 100644
                        dev_queue_xmit_nit(skb, dev);
  
                if (netif_needs_gso(dev, skb)) {
-diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig
-index 9a077cb..3bde19b 100644
---- a/net/ipv4/netfilter/Kconfig
-+++ b/net/ipv4/netfilter/Kconfig
-@@ -123,6 +123,17 @@ config IP_NF_FILTER
-         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
-diff --git a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile
-index 0c7dc78..7617528 100644
---- a/net/ipv4/netfilter/Makefile
-+++ b/net/ipv4/netfilter/Makefile
-@@ -51,6 +51,7 @@ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
- 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
-diff --git a/net/ipv4/netfilter/ipt_IMQ.c b/net/ipv4/netfilter/ipt_IMQ.c
-new file mode 100644
-index 0000000..cda69a4
 --- /dev/null
 +++ b/net/ipv4/netfilter/ipt_IMQ.c
 @@ -0,0 +1,69 @@
@@ -857,41 +772,36 @@ index 0000000..cda69a4
 +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");
-diff --git a/net/ipv6/netfilter/Kconfig b/net/ipv6/netfilter/Kconfig
-index 6cae547..3b3b610 100644
---- a/net/ipv6/netfilter/Kconfig
-+++ b/net/ipv6/netfilter/Kconfig
-@@ -179,6 +179,15 @@ config IP6_NF_MANGLE
+--- a/net/ipv4/netfilter/Kconfig
++++ b/net/ipv4/netfilter/Kconfig
+@@ -123,6 +123,17 @@ config IP_NF_FILTER
  
          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
-diff --git a/net/ipv6/netfilter/Makefile b/net/ipv6/netfilter/Makefile
-index fbf2c14..dcfe80b 100644
---- 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
-diff --git a/net/ipv6/netfilter/ip6t_IMQ.c b/net/ipv6/netfilter/ip6t_IMQ.c
-new file mode 100644
-index 0000000..5cf7b72
++         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
+@@ -51,6 +51,7 @@ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl
+ 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 @@
@@ -964,8 +874,34 @@ index 0000000..5cf7b72
 +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");
-diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
-index b741618..dcb916e 100644
+--- a/net/ipv6/netfilter/Kconfig
++++ b/net/ipv6/netfilter/Kconfig
+@@ -179,6 +179,15 @@ config IP6_NF_MANGLE
+         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 @@ void __qdisc_run(struct net_device *dev)
This page took 0.033936 seconds and 4 git commands to generate.