mac80211: add a patch for keeping track of the rx bitrate of remote stations
[openwrt.git] / package / iproute2 / patches / 006-iproute2-tc_esfq.patch
index 7d528ca..65dbc4f 100644 (file)
@@ -1,12 +1,17 @@
-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 @@
+---
+ include/linux/pkt_sched.h |   59 +++++++++++++
+ tc/Makefile               |    1 
+ tc/q_esfq.c               |  200 ++++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 260 insertions(+)
+
+--- a/include/linux/pkt_sched.h
++++ b/include/linux/pkt_sched.h
+@@ -174,8 +174,38 @@ struct tc_sfq_qopt
   *
   *    The only reason for this is efficiency, it is possible
   *    to change these parameters in compile time.
 + *
   *
   *    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.
++ *    If you need to play with these values use esfq instead.
   */
  
 +/* ESFQ section */
   */
  
 +/* ESFQ section */
@@ -17,7 +22,6 @@ diff -Naur iproute-2.6.20-070313.orig/include/linux/pkt_sched.h iproute-2.6.20-0
 +      TCA_SFQ_HASH_CLASSIC,
 +      TCA_SFQ_HASH_DST,
 +      TCA_SFQ_HASH_SRC,
 +      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,
 +      /* conntrack */
 +      TCA_SFQ_HASH_CTORIGDST,
 +      TCA_SFQ_HASH_CTORIGSRC,
@@ -35,14 +39,53 @@ diff -Naur iproute-2.6.20-070313.orig/include/linux/pkt_sched.h iproute-2.6.20-0
 +      unsigned        flows;          /* Maximal number of flows  */
 +      unsigned        hash_kind;      /* Hash function to use for flow identification */
 +};
 +      unsigned        flows;          /* Maximal number of flows  */
 +      unsigned        hash_kind;      /* Hash function to use for flow identification */
 +};
++
++
 +
  /* RED section */
  
  enum
 +
  /* 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 @@
+@@ -579,8 +609,37 @@ struct tc_sfq_xstats {
+  *
+  *    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,
++      /* 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 {
+--- a/tc/Makefile
++++ b/tc/Makefile
+@@ -8,6 +8,7 @@ SHARED_LIBS ?= y
  TCMODULES :=
  TCMODULES += q_fifo.o
  TCMODULES += q_sfq.o
  TCMODULES :=
  TCMODULES += q_fifo.o
  TCMODULES += q_sfq.o
@@ -50,10 +93,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
  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.
 + *
 +/*
 + * q_esfq.c           ESFQ.
 + *
@@ -75,7 +117,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 <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>
 +#include <sys/socket.h>
 +#include <netinet/in.h>
 +#include <arpa/inet.h>
@@ -88,7 +130,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, "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)
 +}
 +
 +#define usage() return(-1)
@@ -101,7 +143,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;
 +      memset(&opt, 0, sizeof(opt));
 +
 +      opt.hash_kind= TCA_SFQ_HASH_CLASSIC;
-+      
++
 +      while (argc > 0) {
 +              if (strcmp(*argv, "quantum") == 0) {
 +                      NEXT_ARG();
 +      while (argc > 0) {
 +              if (strcmp(*argv, "quantum") == 0) {
 +                      NEXT_ARG();
@@ -130,8 +172,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;
 +                      }
 +                              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);
 +                              return -1;
 +                      }
 +                      opt.divisor=pow(2,opt.divisor);
@@ -145,24 +187,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();
 +                      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();
 +                      } else {
 +                              fprintf(stderr, "Illegal \"hash\"\n");
 +                              explain();
@@ -216,9 +263,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_SRC:
 +              fprintf(f,"src");
 +              break;
-+      case TCA_SFQ_HASH_FWMARK:
-+              fprintf(f,"fwmark");
-+              break;
 +      case TCA_SFQ_HASH_CTORIGSRC:
 +              fprintf(f,"ctorigsrc");
 +              break;
 +      case TCA_SFQ_HASH_CTORIGSRC:
 +              fprintf(f,"ctorigsrc");
 +              break;
This page took 0.028044 seconds and 4 git commands to generate.