122 lines
2.8 KiB
Diff
122 lines
2.8 KiB
Diff
|
--- 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
|