Home | History | Annotate | Download | only in linux
      1 #ifndef __LINUX_PKT_SCHED_H
      2 #define __LINUX_PKT_SCHED_H
      3 
      4 #include <linux/types.h>
      5 
      6 /* Logical priority bands not depending on specific packet scheduler.
      7    Every scheduler will map them to real traffic classes, if it has
      8    no more precise mechanism to classify packets.
      9 
     10    These numbers have no special meaning, though their coincidence
     11    with obsolete IPv6 values is not occasional :-). New IPv6 drafts
     12    preferred full anarchy inspired by diffserv group.
     13 
     14    Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
     15    class, actually, as rule it will be handled with more care than
     16    filler or even bulk.
     17  */
     18 
     19 #define TC_PRIO_BESTEFFORT		0
     20 #define TC_PRIO_FILLER			1
     21 #define TC_PRIO_BULK			2
     22 #define TC_PRIO_INTERACTIVE_BULK	4
     23 #define TC_PRIO_INTERACTIVE		6
     24 #define TC_PRIO_CONTROL			7
     25 
     26 #define TC_PRIO_MAX			15
     27 
     28 /* Generic queue statistics, available for all the elements.
     29    Particular schedulers may have also their private records.
     30  */
     31 
     32 struct tc_stats {
     33 	__u64	bytes;			/* Number of enqueued bytes */
     34 	__u32	packets;		/* Number of enqueued packets	*/
     35 	__u32	drops;			/* Packets dropped because of lack of resources */
     36 	__u32	overlimits;		/* Number of throttle events when this
     37 					 * flow goes out of allocated bandwidth */
     38 	__u32	bps;			/* Current flow byte rate */
     39 	__u32	pps;			/* Current flow packet rate */
     40 	__u32	qlen;
     41 	__u32	backlog;
     42 };
     43 
     44 struct tc_estimator {
     45 	signed char	interval;
     46 	unsigned char	ewma_log;
     47 };
     48 
     49 /* "Handles"
     50    ---------
     51 
     52     All the traffic control objects have 32bit identifiers, or "handles".
     53 
     54     They can be considered as opaque numbers from user API viewpoint,
     55     but actually they always consist of two fields: major and
     56     minor numbers, which are interpreted by kernel specially,
     57     that may be used by applications, though not recommended.
     58 
     59     F.e. qdisc handles always have minor number equal to zero,
     60     classes (or flows) have major equal to parent qdisc major, and
     61     minor uniquely identifying class inside qdisc.
     62 
     63     Macros to manipulate handles:
     64  */
     65 
     66 #define TC_H_MAJ_MASK (0xFFFF0000U)
     67 #define TC_H_MIN_MASK (0x0000FFFFU)
     68 #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
     69 #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
     70 #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
     71 
     72 #define TC_H_UNSPEC	(0U)
     73 #define TC_H_ROOT	(0xFFFFFFFFU)
     74 #define TC_H_INGRESS    (0xFFFFFFF1U)
     75 
     76 /* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
     77 enum tc_link_layer {
     78 	TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */
     79 	TC_LINKLAYER_ETHERNET,
     80 	TC_LINKLAYER_ATM,
     81 };
     82 #define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */
     83 
     84 struct tc_ratespec {
     85 	unsigned char	cell_log;
     86 	__u8		linklayer; /* lower 4 bits */
     87 	unsigned short	overhead;
     88 	short		cell_align;
     89 	unsigned short	mpu;
     90 	__u32		rate;
     91 };
     92 
     93 #define TC_RTAB_SIZE	1024
     94 
     95 struct tc_sizespec {
     96 	unsigned char	cell_log;
     97 	unsigned char	size_log;
     98 	short		cell_align;
     99 	int		overhead;
    100 	unsigned int	linklayer;
    101 	unsigned int	mpu;
    102 	unsigned int	mtu;
    103 	unsigned int	tsize;
    104 };
    105 
    106 enum {
    107 	TCA_STAB_UNSPEC,
    108 	TCA_STAB_BASE,
    109 	TCA_STAB_DATA,
    110 	__TCA_STAB_MAX
    111 };
    112 
    113 #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
    114 
    115 /* FIFO section */
    116 
    117 struct tc_fifo_qopt {
    118 	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
    119 };
    120 
    121 /* PRIO section */
    122 
    123 #define TCQ_PRIO_BANDS	16
    124 #define TCQ_MIN_PRIO_BANDS 2
    125 
    126 struct tc_prio_qopt {
    127 	int	bands;			/* Number of bands */
    128 	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
    129 };
    130 
    131 /* MULTIQ section */
    132 
    133 struct tc_multiq_qopt {
    134 	__u16	bands;			/* Number of bands */
    135 	__u16	max_bands;		/* Maximum number of queues */
    136 };
    137 
    138 /* PLUG section */
    139 
    140 #define TCQ_PLUG_BUFFER                0
    141 #define TCQ_PLUG_RELEASE_ONE           1
    142 #define TCQ_PLUG_RELEASE_INDEFINITE    2
    143 #define TCQ_PLUG_LIMIT                 3
    144 
    145 struct tc_plug_qopt {
    146 	/* TCQ_PLUG_BUFFER: Inset a plug into the queue and
    147 	 *  buffer any incoming packets
    148 	 * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head
    149 	 *   to beginning of the next plug.
    150 	 * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue.
    151 	 *   Stop buffering packets until the next TCQ_PLUG_BUFFER
    152 	 *   command is received (just act as a pass-thru queue).
    153 	 * TCQ_PLUG_LIMIT: Increase/decrease queue size
    154 	 */
    155 	int             action;
    156 	__u32           limit;
    157 };
    158 
    159 /* TBF section */
    160 
    161 struct tc_tbf_qopt {
    162 	struct tc_ratespec rate;
    163 	struct tc_ratespec peakrate;
    164 	__u32		limit;
    165 	__u32		buffer;
    166 	__u32		mtu;
    167 };
    168 
    169 enum {
    170 	TCA_TBF_UNSPEC,
    171 	TCA_TBF_PARMS,
    172 	TCA_TBF_RTAB,
    173 	TCA_TBF_PTAB,
    174 	TCA_TBF_RATE64,
    175 	TCA_TBF_PRATE64,
    176 	TCA_TBF_BURST,
    177 	TCA_TBF_PBURST,
    178 	__TCA_TBF_MAX,
    179 };
    180 
    181 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
    182 
    183 
    184 /* TEQL section */
    185 
    186 /* TEQL does not require any parameters */
    187 
    188 /* SFQ section */
    189 
    190 struct tc_sfq_qopt {
    191 	unsigned	quantum;	/* Bytes per round allocated to flow */
    192 	int		perturb_period;	/* Period of hash perturbation */
    193 	__u32		limit;		/* Maximal packets in queue */
    194 	unsigned	divisor;	/* Hash divisor  */
    195 	unsigned	flows;		/* Maximal number of flows  */
    196 };
    197 
    198 struct tc_sfqred_stats {
    199 	__u32           prob_drop;      /* Early drops, below max threshold */
    200 	__u32           forced_drop;	/* Early drops, after max threshold */
    201 	__u32           prob_mark;      /* Marked packets, below max threshold */
    202 	__u32           forced_mark;    /* Marked packets, after max threshold */
    203 	__u32           prob_mark_head; /* Marked packets, below max threshold */
    204 	__u32           forced_mark_head;/* Marked packets, after max threshold */
    205 };
    206 
    207 struct tc_sfq_qopt_v1 {
    208 	struct tc_sfq_qopt v0;
    209 	unsigned int	depth;		/* max number of packets per flow */
    210 	unsigned int	headdrop;
    211 /* SFQRED parameters */
    212 	__u32		limit;		/* HARD maximal flow queue length (bytes) */
    213 	__u32		qth_min;	/* Min average length threshold (bytes) */
    214 	__u32		qth_max;	/* Max average length threshold (bytes) */
    215 	unsigned char   Wlog;		/* log(W)		*/
    216 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
    217 	unsigned char   Scell_log;	/* cell size for idle damping */
    218 	unsigned char	flags;
    219 	__u32		max_P;		/* probability, high resolution */
    220 /* SFQRED stats */
    221 	struct tc_sfqred_stats stats;
    222 };
    223 
    224 
    225 struct tc_sfq_xstats {
    226 	__s32		allot;
    227 };
    228 
    229 /* RED section */
    230 
    231 enum {
    232 	TCA_RED_UNSPEC,
    233 	TCA_RED_PARMS,
    234 	TCA_RED_STAB,
    235 	TCA_RED_MAX_P,
    236 	__TCA_RED_MAX,
    237 };
    238 
    239 #define TCA_RED_MAX (__TCA_RED_MAX - 1)
    240 
    241 struct tc_red_qopt {
    242 	__u32		limit;		/* HARD maximal queue length (bytes)	*/
    243 	__u32		qth_min;	/* Min average length threshold (bytes) */
    244 	__u32		qth_max;	/* Max average length threshold (bytes) */
    245 	unsigned char   Wlog;		/* log(W)		*/
    246 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
    247 	unsigned char   Scell_log;	/* cell size for idle damping */
    248 	unsigned char	flags;
    249 #define TC_RED_ECN		1
    250 #define TC_RED_HARDDROP		2
    251 #define TC_RED_ADAPTATIVE	4
    252 };
    253 
    254 struct tc_red_xstats {
    255 	__u32           early;          /* Early drops */
    256 	__u32           pdrop;          /* Drops due to queue limits */
    257 	__u32           other;          /* Drops due to drop() calls */
    258 	__u32           marked;         /* Marked packets */
    259 };
    260 
    261 /* GRED section */
    262 
    263 #define MAX_DPs 16
    264 
    265 enum {
    266        TCA_GRED_UNSPEC,
    267        TCA_GRED_PARMS,
    268        TCA_GRED_STAB,
    269        TCA_GRED_DPS,
    270        TCA_GRED_MAX_P,
    271        TCA_GRED_LIMIT,
    272        __TCA_GRED_MAX,
    273 };
    274 
    275 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
    276 
    277 struct tc_gred_qopt {
    278 	__u32		limit;        /* HARD maximal queue length (bytes)    */
    279 	__u32		qth_min;      /* Min average length threshold (bytes) */
    280 	__u32		qth_max;      /* Max average length threshold (bytes) */
    281 	__u32		DP;           /* up to 2^32 DPs */
    282 	__u32		backlog;
    283 	__u32		qave;
    284 	__u32		forced;
    285 	__u32		early;
    286 	__u32		other;
    287 	__u32		pdrop;
    288 	__u8		Wlog;         /* log(W)               */
    289 	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
    290 	__u8		Scell_log;    /* cell size for idle damping */
    291 	__u8		prio;         /* prio of this VQ */
    292 	__u32		packets;
    293 	__u32		bytesin;
    294 };
    295 
    296 /* gred setup */
    297 struct tc_gred_sopt {
    298 	__u32		DPs;
    299 	__u32		def_DP;
    300 	__u8		grio;
    301 	__u8		flags;
    302 	__u16		pad1;
    303 };
    304 
    305 /* CHOKe section */
    306 
    307 enum {
    308 	TCA_CHOKE_UNSPEC,
    309 	TCA_CHOKE_PARMS,
    310 	TCA_CHOKE_STAB,
    311 	TCA_CHOKE_MAX_P,
    312 	__TCA_CHOKE_MAX,
    313 };
    314 
    315 #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
    316 
    317 struct tc_choke_qopt {
    318 	__u32		limit;		/* Hard queue length (packets)	*/
    319 	__u32		qth_min;	/* Min average threshold (packets) */
    320 	__u32		qth_max;	/* Max average threshold (packets) */
    321 	unsigned char   Wlog;		/* log(W)		*/
    322 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
    323 	unsigned char   Scell_log;	/* cell size for idle damping */
    324 	unsigned char	flags;		/* see RED flags */
    325 };
    326 
    327 struct tc_choke_xstats {
    328 	__u32		early;          /* Early drops */
    329 	__u32		pdrop;          /* Drops due to queue limits */
    330 	__u32		other;          /* Drops due to drop() calls */
    331 	__u32		marked;         /* Marked packets */
    332 	__u32		matched;	/* Drops due to flow match */
    333 };
    334 
    335 /* HTB section */
    336 #define TC_HTB_NUMPRIO		8
    337 #define TC_HTB_MAXDEPTH		8
    338 #define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
    339 
    340 struct tc_htb_opt {
    341 	struct tc_ratespec 	rate;
    342 	struct tc_ratespec 	ceil;
    343 	__u32	buffer;
    344 	__u32	cbuffer;
    345 	__u32	quantum;
    346 	__u32	level;		/* out only */
    347 	__u32	prio;
    348 };
    349 struct tc_htb_glob {
    350 	__u32 version;		/* to match HTB/TC */
    351     	__u32 rate2quantum;	/* bps->quantum divisor */
    352     	__u32 defcls;		/* default class number */
    353 	__u32 debug;		/* debug flags */
    354 
    355 	/* stats */
    356 	__u32 direct_pkts; /* count of non shaped packets */
    357 };
    358 enum {
    359 	TCA_HTB_UNSPEC,
    360 	TCA_HTB_PARMS,
    361 	TCA_HTB_INIT,
    362 	TCA_HTB_CTAB,
    363 	TCA_HTB_RTAB,
    364 	TCA_HTB_DIRECT_QLEN,
    365 	TCA_HTB_RATE64,
    366 	TCA_HTB_CEIL64,
    367 	__TCA_HTB_MAX,
    368 };
    369 
    370 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
    371 
    372 struct tc_htb_xstats {
    373 	__u32 lends;
    374 	__u32 borrows;
    375 	__u32 giants;	/* too big packets (rate will not be accurate) */
    376 	__u32 tokens;
    377 	__u32 ctokens;
    378 };
    379 
    380 /* HFSC section */
    381 
    382 struct tc_hfsc_qopt {
    383 	__u16	defcls;		/* default class */
    384 };
    385 
    386 struct tc_service_curve {
    387 	__u32	m1;		/* slope of the first segment in bps */
    388 	__u32	d;		/* x-projection of the first segment in us */
    389 	__u32	m2;		/* slope of the second segment in bps */
    390 };
    391 
    392 struct tc_hfsc_stats {
    393 	__u64	work;		/* total work done */
    394 	__u64	rtwork;		/* work done by real-time criteria */
    395 	__u32	period;		/* current period */
    396 	__u32	level;		/* class level in hierarchy */
    397 };
    398 
    399 enum {
    400 	TCA_HFSC_UNSPEC,
    401 	TCA_HFSC_RSC,
    402 	TCA_HFSC_FSC,
    403 	TCA_HFSC_USC,
    404 	__TCA_HFSC_MAX,
    405 };
    406 
    407 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
    408 
    409 
    410 /* CBQ section */
    411 
    412 #define TC_CBQ_MAXPRIO		8
    413 #define TC_CBQ_MAXLEVEL		8
    414 #define TC_CBQ_DEF_EWMA		5
    415 
    416 struct tc_cbq_lssopt {
    417 	unsigned char	change;
    418 	unsigned char	flags;
    419 #define TCF_CBQ_LSS_BOUNDED	1
    420 #define TCF_CBQ_LSS_ISOLATED	2
    421 	unsigned char  	ewma_log;
    422 	unsigned char  	level;
    423 #define TCF_CBQ_LSS_FLAGS	1
    424 #define TCF_CBQ_LSS_EWMA	2
    425 #define TCF_CBQ_LSS_MAXIDLE	4
    426 #define TCF_CBQ_LSS_MINIDLE	8
    427 #define TCF_CBQ_LSS_OFFTIME	0x10
    428 #define TCF_CBQ_LSS_AVPKT	0x20
    429 	__u32		maxidle;
    430 	__u32		minidle;
    431 	__u32		offtime;
    432 	__u32		avpkt;
    433 };
    434 
    435 struct tc_cbq_wrropt {
    436 	unsigned char	flags;
    437 	unsigned char	priority;
    438 	unsigned char	cpriority;
    439 	unsigned char	__reserved;
    440 	__u32		allot;
    441 	__u32		weight;
    442 };
    443 
    444 struct tc_cbq_ovl {
    445 	unsigned char	strategy;
    446 #define	TC_CBQ_OVL_CLASSIC	0
    447 #define	TC_CBQ_OVL_DELAY	1
    448 #define	TC_CBQ_OVL_LOWPRIO	2
    449 #define	TC_CBQ_OVL_DROP		3
    450 #define	TC_CBQ_OVL_RCLASSIC	4
    451 	unsigned char	priority2;
    452 	__u16		pad;
    453 	__u32		penalty;
    454 };
    455 
    456 struct tc_cbq_police {
    457 	unsigned char	police;
    458 	unsigned char	__res1;
    459 	unsigned short	__res2;
    460 };
    461 
    462 struct tc_cbq_fopt {
    463 	__u32		split;
    464 	__u32		defmap;
    465 	__u32		defchange;
    466 };
    467 
    468 struct tc_cbq_xstats {
    469 	__u32		borrows;
    470 	__u32		overactions;
    471 	__s32		avgidle;
    472 	__s32		undertime;
    473 };
    474 
    475 enum {
    476 	TCA_CBQ_UNSPEC,
    477 	TCA_CBQ_LSSOPT,
    478 	TCA_CBQ_WRROPT,
    479 	TCA_CBQ_FOPT,
    480 	TCA_CBQ_OVL_STRATEGY,
    481 	TCA_CBQ_RATE,
    482 	TCA_CBQ_RTAB,
    483 	TCA_CBQ_POLICE,
    484 	__TCA_CBQ_MAX,
    485 };
    486 
    487 #define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
    488 
    489 /* dsmark section */
    490 
    491 enum {
    492 	TCA_DSMARK_UNSPEC,
    493 	TCA_DSMARK_INDICES,
    494 	TCA_DSMARK_DEFAULT_INDEX,
    495 	TCA_DSMARK_SET_TC_INDEX,
    496 	TCA_DSMARK_MASK,
    497 	TCA_DSMARK_VALUE,
    498 	__TCA_DSMARK_MAX,
    499 };
    500 
    501 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
    502 
    503 /* ATM  section */
    504 
    505 enum {
    506 	TCA_ATM_UNSPEC,
    507 	TCA_ATM_FD,		/* file/socket descriptor */
    508 	TCA_ATM_PTR,		/* pointer to descriptor - later */
    509 	TCA_ATM_HDR,		/* LL header */
    510 	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
    511 	TCA_ATM_ADDR,		/* PVC address (for output only) */
    512 	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
    513 	__TCA_ATM_MAX,
    514 };
    515 
    516 #define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
    517 
    518 /* Network emulator */
    519 
    520 enum {
    521 	TCA_NETEM_UNSPEC,
    522 	TCA_NETEM_CORR,
    523 	TCA_NETEM_DELAY_DIST,
    524 	TCA_NETEM_REORDER,
    525 	TCA_NETEM_CORRUPT,
    526 	TCA_NETEM_LOSS,
    527 	TCA_NETEM_RATE,
    528 	TCA_NETEM_ECN,
    529 	TCA_NETEM_RATE64,
    530 	__TCA_NETEM_MAX,
    531 };
    532 
    533 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
    534 
    535 struct tc_netem_qopt {
    536 	__u32	latency;	/* added delay (us) */
    537 	__u32   limit;		/* fifo limit (packets) */
    538 	__u32	loss;		/* random packet loss (0=none ~0=100%) */
    539 	__u32	gap;		/* re-ordering gap (0 for none) */
    540 	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
    541 	__u32	jitter;		/* random jitter in latency (us) */
    542 };
    543 
    544 struct tc_netem_corr {
    545 	__u32	delay_corr;	/* delay correlation */
    546 	__u32	loss_corr;	/* packet loss correlation */
    547 	__u32	dup_corr;	/* duplicate correlation  */
    548 };
    549 
    550 struct tc_netem_reorder {
    551 	__u32	probability;
    552 	__u32	correlation;
    553 };
    554 
    555 struct tc_netem_corrupt {
    556 	__u32	probability;
    557 	__u32	correlation;
    558 };
    559 
    560 struct tc_netem_rate {
    561 	__u32	rate;	/* byte/s */
    562 	__s32	packet_overhead;
    563 	__u32	cell_size;
    564 	__s32	cell_overhead;
    565 };
    566 
    567 enum {
    568 	NETEM_LOSS_UNSPEC,
    569 	NETEM_LOSS_GI,		/* General Intuitive - 4 state model */
    570 	NETEM_LOSS_GE,		/* Gilbert Elliot models */
    571 	__NETEM_LOSS_MAX
    572 };
    573 #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
    574 
    575 /* State transition probabilities for 4 state model */
    576 struct tc_netem_gimodel {
    577 	__u32	p13;
    578 	__u32	p31;
    579 	__u32	p32;
    580 	__u32	p14;
    581 	__u32	p23;
    582 };
    583 
    584 /* Gilbert-Elliot models */
    585 struct tc_netem_gemodel {
    586 	__u32 p;
    587 	__u32 r;
    588 	__u32 h;
    589 	__u32 k1;
    590 };
    591 
    592 #define NETEM_DIST_SCALE	8192
    593 #define NETEM_DIST_MAX		16384
    594 
    595 /* DRR */
    596 
    597 enum {
    598 	TCA_DRR_UNSPEC,
    599 	TCA_DRR_QUANTUM,
    600 	__TCA_DRR_MAX
    601 };
    602 
    603 #define TCA_DRR_MAX	(__TCA_DRR_MAX - 1)
    604 
    605 struct tc_drr_stats {
    606 	__u32	deficit;
    607 };
    608 
    609 /* MQPRIO */
    610 #define TC_QOPT_BITMASK 15
    611 #define TC_QOPT_MAX_QUEUE 16
    612 
    613 struct tc_mqprio_qopt {
    614 	__u8	num_tc;
    615 	__u8	prio_tc_map[TC_QOPT_BITMASK + 1];
    616 	__u8	hw;
    617 	__u16	count[TC_QOPT_MAX_QUEUE];
    618 	__u16	offset[TC_QOPT_MAX_QUEUE];
    619 };
    620 
    621 /* SFB */
    622 
    623 enum {
    624 	TCA_SFB_UNSPEC,
    625 	TCA_SFB_PARMS,
    626 	__TCA_SFB_MAX,
    627 };
    628 
    629 #define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
    630 
    631 /*
    632  * Note: increment, decrement are Q0.16 fixed-point values.
    633  */
    634 struct tc_sfb_qopt {
    635 	__u32 rehash_interval;	/* delay between hash move, in ms */
    636 	__u32 warmup_time;	/* double buffering warmup time in ms (warmup_time < rehash_interval) */
    637 	__u32 max;		/* max len of qlen_min */
    638 	__u32 bin_size;		/* maximum queue length per bin */
    639 	__u32 increment;	/* probability increment, (d1 in Blue) */
    640 	__u32 decrement;	/* probability decrement, (d2 in Blue) */
    641 	__u32 limit;		/* max SFB queue length */
    642 	__u32 penalty_rate;	/* inelastic flows are rate limited to 'rate' pps */
    643 	__u32 penalty_burst;
    644 };
    645 
    646 struct tc_sfb_xstats {
    647 	__u32 earlydrop;
    648 	__u32 penaltydrop;
    649 	__u32 bucketdrop;
    650 	__u32 queuedrop;
    651 	__u32 childdrop; /* drops in child qdisc */
    652 	__u32 marked;
    653 	__u32 maxqlen;
    654 	__u32 maxprob;
    655 	__u32 avgprob;
    656 };
    657 
    658 #define SFB_MAX_PROB 0xFFFF
    659 
    660 /* QFQ */
    661 enum {
    662 	TCA_QFQ_UNSPEC,
    663 	TCA_QFQ_WEIGHT,
    664 	TCA_QFQ_LMAX,
    665 	__TCA_QFQ_MAX
    666 };
    667 
    668 #define TCA_QFQ_MAX	(__TCA_QFQ_MAX - 1)
    669 
    670 struct tc_qfq_stats {
    671 	__u32 weight;
    672 	__u32 lmax;
    673 };
    674 
    675 /* CODEL */
    676 
    677 enum {
    678 	TCA_CODEL_UNSPEC,
    679 	TCA_CODEL_TARGET,
    680 	TCA_CODEL_LIMIT,
    681 	TCA_CODEL_INTERVAL,
    682 	TCA_CODEL_ECN,
    683 	TCA_CODEL_CE_THRESHOLD,
    684 	__TCA_CODEL_MAX
    685 };
    686 
    687 #define TCA_CODEL_MAX	(__TCA_CODEL_MAX - 1)
    688 
    689 struct tc_codel_xstats {
    690 	__u32	maxpacket; /* largest packet we've seen so far */
    691 	__u32	count;	   /* how many drops we've done since the last time we
    692 			    * entered dropping state
    693 			    */
    694 	__u32	lastcount; /* count at entry to dropping state */
    695 	__u32	ldelay;    /* in-queue delay seen by most recently dequeued packet */
    696 	__s32	drop_next; /* time to drop next packet */
    697 	__u32	drop_overlimit; /* number of time max qdisc packet limit was hit */
    698 	__u32	ecn_mark;  /* number of packets we ECN marked instead of dropped */
    699 	__u32	dropping;  /* are we in dropping state ? */
    700 	__u32	ce_mark;   /* number of CE marked packets because of ce_threshold */
    701 };
    702 
    703 /* FQ_CODEL */
    704 
    705 enum {
    706 	TCA_FQ_CODEL_UNSPEC,
    707 	TCA_FQ_CODEL_TARGET,
    708 	TCA_FQ_CODEL_LIMIT,
    709 	TCA_FQ_CODEL_INTERVAL,
    710 	TCA_FQ_CODEL_ECN,
    711 	TCA_FQ_CODEL_FLOWS,
    712 	TCA_FQ_CODEL_QUANTUM,
    713 	TCA_FQ_CODEL_CE_THRESHOLD,
    714 	__TCA_FQ_CODEL_MAX
    715 };
    716 
    717 #define TCA_FQ_CODEL_MAX	(__TCA_FQ_CODEL_MAX - 1)
    718 
    719 enum {
    720 	TCA_FQ_CODEL_XSTATS_QDISC,
    721 	TCA_FQ_CODEL_XSTATS_CLASS,
    722 };
    723 
    724 struct tc_fq_codel_qd_stats {
    725 	__u32	maxpacket;	/* largest packet we've seen so far */
    726 	__u32	drop_overlimit; /* number of time max qdisc
    727 				 * packet limit was hit
    728 				 */
    729 	__u32	ecn_mark;	/* number of packets we ECN marked
    730 				 * instead of being dropped
    731 				 */
    732 	__u32	new_flow_count; /* number of time packets
    733 				 * created a 'new flow'
    734 				 */
    735 	__u32	new_flows_len;	/* count of flows in new list */
    736 	__u32	old_flows_len;	/* count of flows in old list */
    737 	__u32	ce_mark;	/* packets above ce_threshold */
    738 };
    739 
    740 struct tc_fq_codel_cl_stats {
    741 	__s32	deficit;
    742 	__u32	ldelay;		/* in-queue delay seen by most recently
    743 				 * dequeued packet
    744 				 */
    745 	__u32	count;
    746 	__u32	lastcount;
    747 	__u32	dropping;
    748 	__s32	drop_next;
    749 };
    750 
    751 struct tc_fq_codel_xstats {
    752 	__u32	type;
    753 	union {
    754 		struct tc_fq_codel_qd_stats qdisc_stats;
    755 		struct tc_fq_codel_cl_stats class_stats;
    756 	};
    757 };
    758 
    759 /* FQ */
    760 
    761 enum {
    762 	TCA_FQ_UNSPEC,
    763 
    764 	TCA_FQ_PLIMIT,		/* limit of total number of packets in queue */
    765 
    766 	TCA_FQ_FLOW_PLIMIT,	/* limit of packets per flow */
    767 
    768 	TCA_FQ_QUANTUM,		/* RR quantum */
    769 
    770 	TCA_FQ_INITIAL_QUANTUM,		/* RR quantum for new flow */
    771 
    772 	TCA_FQ_RATE_ENABLE,	/* enable/disable rate limiting */
    773 
    774 	TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */
    775 
    776 	TCA_FQ_FLOW_MAX_RATE,	/* per flow max rate */
    777 
    778 	TCA_FQ_BUCKETS_LOG,	/* log2(number of buckets) */
    779 
    780 	TCA_FQ_FLOW_REFILL_DELAY,	/* flow credit refill delay in usec */
    781 
    782 	TCA_FQ_ORPHAN_MASK,	/* mask applied to orphaned skb hashes */
    783 
    784 	__TCA_FQ_MAX
    785 };
    786 
    787 #define TCA_FQ_MAX	(__TCA_FQ_MAX - 1)
    788 
    789 struct tc_fq_qd_stats {
    790 	__u64	gc_flows;
    791 	__u64	highprio_packets;
    792 	__u64	tcp_retrans;
    793 	__u64	throttled;
    794 	__u64	flows_plimit;
    795 	__u64	pkts_too_long;
    796 	__u64	allocation_errors;
    797 	__s64	time_next_delayed_flow;
    798 	__u32	flows;
    799 	__u32	inactive_flows;
    800 	__u32	throttled_flows;
    801 	__u32	pad;
    802 };
    803 
    804 /* Heavy-Hitter Filter */
    805 
    806 enum {
    807 	TCA_HHF_UNSPEC,
    808 	TCA_HHF_BACKLOG_LIMIT,
    809 	TCA_HHF_QUANTUM,
    810 	TCA_HHF_HH_FLOWS_LIMIT,
    811 	TCA_HHF_RESET_TIMEOUT,
    812 	TCA_HHF_ADMIT_BYTES,
    813 	TCA_HHF_EVICT_TIMEOUT,
    814 	TCA_HHF_NON_HH_WEIGHT,
    815 	__TCA_HHF_MAX
    816 };
    817 
    818 #define TCA_HHF_MAX	(__TCA_HHF_MAX - 1)
    819 
    820 struct tc_hhf_xstats {
    821 	__u32	drop_overlimit; /* number of times max qdisc packet limit
    822 				 * was hit
    823 				 */
    824 	__u32	hh_overlimit;   /* number of times max heavy-hitters was hit */
    825 	__u32	hh_tot_count;   /* number of captured heavy-hitters so far */
    826 	__u32	hh_cur_count;   /* number of current heavy-hitters */
    827 };
    828 
    829 /* PIE */
    830 enum {
    831 	TCA_PIE_UNSPEC,
    832 	TCA_PIE_TARGET,
    833 	TCA_PIE_LIMIT,
    834 	TCA_PIE_TUPDATE,
    835 	TCA_PIE_ALPHA,
    836 	TCA_PIE_BETA,
    837 	TCA_PIE_ECN,
    838 	TCA_PIE_BYTEMODE,
    839 	__TCA_PIE_MAX
    840 };
    841 #define TCA_PIE_MAX   (__TCA_PIE_MAX - 1)
    842 
    843 struct tc_pie_xstats {
    844 	__u32 prob;             /* current probability */
    845 	__u32 delay;            /* current delay in ms */
    846 	__u32 avg_dq_rate;      /* current average dq_rate in bits/pie_time */
    847 	__u32 packets_in;       /* total number of packets enqueued */
    848 	__u32 dropped;          /* packets dropped due to pie_action */
    849 	__u32 overlimit;        /* dropped due to lack of space in queue */
    850 	__u32 maxq;             /* maximum queue size */
    851 	__u32 ecn_mark;         /* packets marked with ecn*/
    852 };
    853 #endif
    854