iproute2: update to 3.3.0, drop a few useless old patches, add codel support
[openwrt/svn-archive/archive.git] / package / iproute2 / patches / 000-sync_pkt_sched_h.patch
diff --git a/package/iproute2/patches/000-sync_pkt_sched_h.patch b/package/iproute2/patches/000-sync_pkt_sched_h.patch
new file mode 100644 (file)
index 0000000..d3315a0
--- /dev/null
@@ -0,0 +1,121 @@
+--- a/include/linux/pkt_sched.h
++++ b/include/linux/pkt_sched.h
+@@ -193,6 +193,33 @@ struct tc_sfq_xstats {
+       __s32           allot;
+ };
++/* 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 {
+@@ -633,4 +660,84 @@ struct tc_qfq_stats {
+       __u32 lmax;
+ };
++/* CODEL */
++
++enum {
++      TCA_CODEL_UNSPEC,
++      TCA_CODEL_TARGET,
++      TCA_CODEL_LIMIT,
++      TCA_CODEL_INTERVAL,
++      TCA_CODEL_ECN,
++      __TCA_CODEL_MAX
++};
++
++#define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1)
++
++struct tc_codel_xstats {
++      __u32   maxpacket; /* largest packet we've seen so far */
++      __u32   count;     /* how many drops we've done since the last time we
++                          * entered dropping state
++                          */
++      __u32   lastcount; /* count at entry to dropping state */
++      __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
++      __s32   drop_next; /* time to drop next packet */
++      __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
++      __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
++      __u32   dropping;  /* are we in dropping state ? */
++};
++
++/* FQ_CODEL */
++
++enum {
++      TCA_FQ_CODEL_UNSPEC,
++      TCA_FQ_CODEL_TARGET,
++      TCA_FQ_CODEL_LIMIT,
++      TCA_FQ_CODEL_INTERVAL,
++      TCA_FQ_CODEL_ECN,
++      TCA_FQ_CODEL_FLOWS,
++      TCA_FQ_CODEL_QUANTUM,
++      __TCA_FQ_CODEL_MAX
++};
++
++#define TCA_FQ_CODEL_MAX      (__TCA_FQ_CODEL_MAX - 1)
++
++enum {
++      TCA_FQ_CODEL_XSTATS_QDISC,
++      TCA_FQ_CODEL_XSTATS_CLASS,
++};
++
++struct tc_fq_codel_qd_stats {
++      __u32   maxpacket;      /* largest packet we've seen so far */
++      __u32   drop_overlimit; /* number of time max qdisc
++                               * packet limit was hit
++                               */
++      __u32   ecn_mark;       /* number of packets we ECN marked
++                               * instead of being dropped
++                               */
++      __u32   new_flow_count; /* number of time packets
++                               * created a 'new flow'
++                               */
++      __u32   new_flows_len;  /* count of flows in new list */
++      __u32   old_flows_len;  /* count of flows in old list */
++};
++
++struct tc_fq_codel_cl_stats {
++      __s32   deficit;
++      __u32   ldelay;         /* in-queue delay seen by most recently
++                               * dequeued packet
++                               */
++      __u32   count;
++      __u32   lastcount;
++      __u32   dropping;
++      __s32   drop_next;
++};
++
++struct tc_fq_codel_xstats {
++      __u32   type;
++      union {
++              struct tc_fq_codel_qd_stats qdisc_stats;
++              struct tc_fq_codel_cl_stats class_stats;
++      };
++};
++
+ #endif