mac80211: backport latest version from trunk (as of r37265)
[openwrt/svn-archive/archive.git] / package / iproute2 / patches / 006-iproute2-tc_esfq.patch
index 7d528cac5563f443a1aeb50bdda053be48f3f688..8016dbb96295894b2bdd2a6bcaa041bfe72d3b7f 100644 (file)
@@ -1,48 +1,12 @@
-diff -Naur iproute-2.6.20-070313.orig/include/linux/pkt_sched.h iproute-2.6.20-070313/include/linux/pkt_sched.h
---- iproute-2.6.20-070313.orig/include/linux/pkt_sched.h       2007-03-13 14:50:56.000000000 -0700
-+++ iproute-2.6.20-070313/include/linux/pkt_sched.h    2007-06-09 11:32:22.000000000 -0700
-@@ -146,8 +146,37 @@
-  *
-  *    The only reason for this is efficiency, it is possible
-  *    to change these parameters in compile time.
-+ *
-+ *    If you need to play with these values, use esfq instead.
-  */
-+/* ESFQ section */
-+
-+enum
-+{
-+      /* traditional */
-+      TCA_SFQ_HASH_CLASSIC,
-+      TCA_SFQ_HASH_DST,
-+      TCA_SFQ_HASH_SRC,
-+      TCA_SFQ_HASH_FWMARK,
-+      /* conntrack */
-+      TCA_SFQ_HASH_CTORIGDST,
-+      TCA_SFQ_HASH_CTORIGSRC,
-+      TCA_SFQ_HASH_CTREPLDST,
-+      TCA_SFQ_HASH_CTREPLSRC,
-+      TCA_SFQ_HASH_CTNATCHG,
-+};
-+
-+struct tc_esfq_qopt
-+{
-+      unsigned        quantum;        /* Bytes per round allocated to flow */
-+      int             perturb_period; /* Period of hash perturbation */
-+      __u32           limit;          /* Maximal packets in queue */
-+      unsigned        divisor;        /* Hash divisor  */
-+      unsigned        flows;          /* Maximal number of flows  */
-+      unsigned        hash_kind;      /* Hash function to use for flow identification */
-+};
-+
- /* RED section */
- enum
-diff -Naur iproute-2.6.20-070313.orig/tc/Makefile iproute-2.6.20-070313/tc/Makefile
---- iproute-2.6.20-070313.orig/tc/Makefile     2007-03-13 14:50:56.000000000 -0700
-+++ iproute-2.6.20-070313/tc/Makefile  2007-06-09 00:39:44.000000000 -0700
-@@ -7,6 +7,7 @@
+---
+ include/linux/pkt_sched.h |   59 +++++++++++++
+ tc/Makefile               |    1 
+ tc/q_esfq.c               |  200 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 260 insertions(+)
+
+--- a/tc/Makefile
++++ b/tc/Makefile
+@@ -8,6 +8,7 @@ SHARED_LIBS ?= y
  TCMODULES :=
  TCMODULES += q_fifo.o
  TCMODULES += q_sfq.o
@@ -50,10 +14,9 @@ diff -Naur iproute-2.6.20-070313.orig/tc/Makefile iproute-2.6.20-070313/tc/Makef
  TCMODULES += q_red.o
  TCMODULES += q_prio.o
  TCMODULES += q_tbf.o
-diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esfq.c
---- iproute-2.6.20-070313.orig/tc/q_esfq.c     1969-12-31 16:00:00.000000000 -0800
-+++ iproute-2.6.20-070313/tc/q_esfq.c  2007-06-09 11:38:59.000000000 -0700
-@@ -0,0 +1,198 @@
+--- /dev/null
++++ b/tc/q_esfq.c
+@@ -0,0 +1,200 @@
 +/*
 + * q_esfq.c           ESFQ.
 + *
@@ -75,7 +38,7 @@ diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esf
 +#include <unistd.h>
 +#include <syslog.h>
 +#include <fcntl.h>
-+#include <math.h> 
++#include <math.h>
 +#include <sys/socket.h>
 +#include <netinet/in.h>
 +#include <arpa/inet.h>
@@ -88,7 +51,7 @@ diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esf
 +{
 +      fprintf(stderr, "Usage: ... esfq [ perturb SECS ] [ quantum BYTES ] [ depth FLOWS ]\n\t[ divisor HASHBITS ] [ limit PKTS ] [ hash HASHTYPE]\n");
 +      fprintf(stderr,"Where: \n");
-+      fprintf(stderr,"HASHTYPE := { classic | src | dst | fwmark | ctorigdst | ctorigsrc | ctrepldst | ctreplsrc | ctnatchg}\n");
++      fprintf(stderr,"HASHTYPE := { classic | src | dst | ctorigdst | ctorigsrc | ctrepldst | ctreplsrc | ctnatchg }\n");
 +}
 +
 +#define usage() return(-1)
@@ -101,7 +64,7 @@ diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esf
 +      memset(&opt, 0, sizeof(opt));
 +
 +      opt.hash_kind= TCA_SFQ_HASH_CLASSIC;
-+      
++
 +      while (argc > 0) {
 +              if (strcmp(*argv, "quantum") == 0) {
 +                      NEXT_ARG();
@@ -130,8 +93,8 @@ diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esf
 +                              fprintf(stderr, "Illegal \"divisor\"\n");
 +                              return -1;
 +                      }
-+                      if(opt.divisor >= 15) {
-+                              fprintf(stderr, "Illegal \"divisor\": must be < 15\n");
++                      if(opt.divisor >= 14) {
++                              fprintf(stderr, "Illegal \"divisor\": must be < 14\n");
 +                              return -1;
 +                      }
 +                      opt.divisor=pow(2,opt.divisor);
@@ -145,24 +108,29 @@ diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esf
 +                      ok++;
 +              } else if (strcmp(*argv, "hash") == 0) {
 +                      NEXT_ARG();
-+                      if (strcmp(*argv, "classic") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_CLASSIC;
-+                      } else if (strcmp(*argv, "dst") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_DST;
-+                      } else if (strcmp(*argv, "src") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_SRC;
-+                      } else if (strcmp(*argv, "fwmark") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_FWMARK;
-+                      } else if (strcmp(*argv, "ctorigsrc") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_CTORIGSRC;
-+                      } else if (strcmp(*argv, "ctorigdst") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_CTORIGDST;
-+                      } else if (strcmp(*argv, "ctreplsrc") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_CTREPLSRC;
-+                      } else if (strcmp(*argv, "ctrepldst") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_CTREPLDST;
-+                      } else if (strcmp(*argv, "ctnatchg") == 0) {
-+                              opt.hash_kind = TCA_SFQ_HASH_CTNATCHG;
++                      if(strcmp(*argv, "classic") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_CLASSIC;
++                      } else
++                      if(strcmp(*argv, "dst") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_DST;
++                      } else
++                      if(strcmp(*argv, "src") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_SRC;
++                      } else
++                      if(strcmp(*argv, "ctorigsrc") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_CTORIGSRC;
++                      } else
++                      if(strcmp(*argv, "ctorigdst") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_CTORIGDST;
++                      } else
++                      if(strcmp(*argv, "ctreplsrc") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_CTREPLSRC;
++                      } else
++                      if(strcmp(*argv, "ctrepldst") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_CTREPLDST;
++                      } else
++                      if(strcmp(*argv, "ctnatchg") == 0) {
++                              opt.hash_kind= TCA_SFQ_HASH_CTNATCHG;
 +                      } else {
 +                              fprintf(stderr, "Illegal \"hash\"\n");
 +                              explain();
@@ -216,9 +184,6 @@ diff -Naur iproute-2.6.20-070313.orig/tc/q_esfq.c iproute-2.6.20-070313/tc/q_esf
 +      case TCA_SFQ_HASH_SRC:
 +              fprintf(f,"src");
 +              break;
-+      case TCA_SFQ_HASH_FWMARK:
-+              fprintf(f,"fwmark");
-+              break;
 +      case TCA_SFQ_HASH_CTORIGSRC:
 +              fprintf(f,"ctorigsrc");
 +              break;