-diff -uNr linux-libc-headers-2.6.5.1.orig/include/linux/pkt_sched.h linux-libc-headers-2.6.5.1/include/linux/pkt_sched.h
---- linux-libc-headers-2.6.5.1.orig/include/linux/pkt_sched.h 2004-05-02 23:08:48.000000000 +0200
-+++ linux-libc-headers-2.6.5.1/include/linux/pkt_sched.h 2004-05-07 23:42:56.411761880 +0200
-@@ -157,6 +157,13 @@
-
- /* SFQ section */
+--- linux-3.7/include/uapi/linux/pkt_sched.h.orig 2012-03-19 00:15:34.000000000 +0100
++++ linux-3.7/include/uapi/linux/pkt_sched.h 2012-03-19 17:54:02.813513839 +0100
+@@ -193,6 +193,31 @@
+ __s32 allot;
+ };
++/* ESFQ section */
++
+enum
+{
++ /* traditional */
+ TCA_SFQ_HASH_CLASSIC,
+ TCA_SFQ_HASH_DST,
+ TCA_SFQ_HASH_SRC,
++ TCA_SFQ_HASH_FWMARK,
++ /* direct */
++ TCA_SFQ_HASH_DSTDIR,
++ TCA_SFQ_HASH_SRCDIR,
++ TCA_SFQ_HASH_FWMARKDIR,
+};
+
- struct tc_sfq_qopt
- {
- unsigned quantum; /* Bytes per round allocated to flow */
-@@ -164,6 +171,7 @@
- __u32 limit; /* Maximal packets in queue */
- unsigned divisor; /* Hash divisor */
- unsigned flows; /* Maximal number of flows */
++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 */
- };
-
- /*
-@@ -173,6 +181,8 @@
- *
- * The only reason for this is efficiency, it is possible
- * to change these parameters in compile time.
-+ *
-+ * If you need to play with this values use esfq.
- */
-
++};
++
/* RED section */
+
+ enum {