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 {
     34 	__u64	bytes;			/* NUmber of enqueues bytes */
     35 	__u32	packets;		/* Number of enqueued packets	*/
     36 	__u32	drops;			/* Packets dropped because of lack of resources */
     37 	__u32	overlimits;		/* Number of throttle events when this
     38 					 * flow goes out of allocated bandwidth */
     39 	__u32	bps;			/* Current flow byte rate */
     40 	__u32	pps;			/* Current flow packet rate */
     41 	__u32	qlen;
     42 	__u32	backlog;
     43 };
     44 
     45 struct tc_estimator
     46 {
     47 	signed char	interval;
     48 	unsigned char	ewma_log;
     49 };
     50 
     51 /* "Handles"
     52    ---------
     53 
     54     All the traffic control objects have 32bit identifiers, or "handles".
     55 
     56     They can be considered as opaque numbers from user API viewpoint,
     57     but actually they always consist of two fields: major and
     58     minor numbers, which are interpreted by kernel specially,
     59     that may be used by applications, though not recommended.
     60 
     61     F.e. qdisc handles always have minor number equal to zero,
     62     classes (or flows) have major equal to parent qdisc major, and
     63     minor uniquely identifying class inside qdisc.
     64 
     65     Macros to manipulate handles:
     66  */
     67 
     68 #define TC_H_MAJ_MASK (0xFFFF0000U)
     69 #define TC_H_MIN_MASK (0x0000FFFFU)
     70 #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
     71 #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
     72 #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
     73 
     74 #define TC_H_UNSPEC	(0U)
     75 #define TC_H_ROOT	(0xFFFFFFFFU)
     76 #define TC_H_INGRESS    (0xFFFFFFF1U)
     77 
     78 struct tc_ratespec
     79 {
     80 	unsigned char	cell_log;
     81 	unsigned char	__reserved;
     82 	unsigned short	overhead;
     83 	short		cell_align;
     84 	unsigned short	mpu;
     85 	__u32		rate;
     86 };
     87 
     88 #define TC_RTAB_SIZE	1024
     89 
     90 struct tc_sizespec {
     91 	unsigned char	cell_log;
     92 	unsigned char	size_log;
     93 	short		cell_align;
     94 	int		overhead;
     95 	unsigned int	linklayer;
     96 	unsigned int	mpu;
     97 	unsigned int	mtu;
     98 	unsigned int	tsize;
     99 };
    100 
    101 enum {
    102 	TCA_STAB_UNSPEC,
    103 	TCA_STAB_BASE,
    104 	TCA_STAB_DATA,
    105 	__TCA_STAB_MAX
    106 };
    107 
    108 #define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
    109 
    110 /* FIFO section */
    111 
    112 struct tc_fifo_qopt
    113 {
    114 	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
    115 };
    116 
    117 /* PRIO section */
    118 
    119 #define TCQ_PRIO_BANDS	16
    120 #define TCQ_MIN_PRIO_BANDS 2
    121 
    122 struct tc_prio_qopt
    123 {
    124 	int	bands;			/* Number of bands */
    125 	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
    126 };
    127 
    128 /* MULTIQ section */
    129 
    130 struct tc_multiq_qopt {
    131 	__u16	bands;			/* Number of bands */
    132 	__u16	max_bands;		/* Maximum number of queues */
    133 };
    134 
    135 /* TBF section */
    136 
    137 struct tc_tbf_qopt
    138 {
    139 	struct tc_ratespec rate;
    140 	struct tc_ratespec peakrate;
    141 	__u32		limit;
    142 	__u32		buffer;
    143 	__u32		mtu;
    144 };
    145 
    146 enum
    147 {
    148 	TCA_TBF_UNSPEC,
    149 	TCA_TBF_PARMS,
    150 	TCA_TBF_RTAB,
    151 	TCA_TBF_PTAB,
    152 	__TCA_TBF_MAX,
    153 };
    154 
    155 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
    156 
    157 
    158 /* TEQL section */
    159 
    160 /* TEQL does not require any parameters */
    161 
    162 /* SFQ section */
    163 
    164 struct tc_sfq_qopt
    165 {
    166 	unsigned	quantum;	/* Bytes per round allocated to flow */
    167 	int		perturb_period;	/* Period of hash perturbation */
    168 	__u32		limit;		/* Maximal packets in queue */
    169 	unsigned	divisor;	/* Hash divisor  */
    170 	unsigned	flows;		/* Maximal number of flows  */
    171 };
    172 
    173 struct tc_sfq_xstats
    174 {
    175 	__s32		allot;
    176 };
    177 
    178 /*
    179  *  NOTE: limit, divisor and flows are hardwired to code at the moment.
    180  *
    181  *	limit=flows=128, divisor=1024;
    182  *
    183  *	The only reason for this is efficiency, it is possible
    184  *	to change these parameters in compile time.
    185  */
    186 
    187 /* RED section */
    188 
    189 enum
    190 {
    191 	TCA_RED_UNSPEC,
    192 	TCA_RED_PARMS,
    193 	TCA_RED_STAB,
    194 	__TCA_RED_MAX,
    195 };
    196 
    197 #define TCA_RED_MAX (__TCA_RED_MAX - 1)
    198 
    199 struct tc_red_qopt
    200 {
    201 	__u32		limit;		/* HARD maximal queue length (bytes)	*/
    202 	__u32		qth_min;	/* Min average length threshold (bytes) */
    203 	__u32		qth_max;	/* Max average length threshold (bytes) */
    204 	unsigned char   Wlog;		/* log(W)		*/
    205 	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
    206 	unsigned char   Scell_log;	/* cell size for idle damping */
    207 	unsigned char	flags;
    208 #define TC_RED_ECN	1
    209 #define TC_RED_HARDDROP	2
    210 };
    211 
    212 struct tc_red_xstats
    213 {
    214 	__u32           early;          /* Early drops */
    215 	__u32           pdrop;          /* Drops due to queue limits */
    216 	__u32           other;          /* Drops due to drop() calls */
    217 	__u32           marked;         /* Marked packets */
    218 };
    219 
    220 /* GRED section */
    221 
    222 #define MAX_DPs 16
    223 
    224 enum
    225 {
    226        TCA_GRED_UNSPEC,
    227        TCA_GRED_PARMS,
    228        TCA_GRED_STAB,
    229        TCA_GRED_DPS,
    230 	   __TCA_GRED_MAX,
    231 };
    232 
    233 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
    234 
    235 struct tc_gred_qopt
    236 {
    237 	__u32		limit;        /* HARD maximal queue length (bytes)    */
    238 	__u32		qth_min;      /* Min average length threshold (bytes) */
    239 	__u32		qth_max;      /* Max average length threshold (bytes) */
    240 	__u32		DP;           /* upto 2^32 DPs */
    241 	__u32		backlog;
    242 	__u32		qave;
    243 	__u32		forced;
    244 	__u32		early;
    245 	__u32		other;
    246 	__u32		pdrop;
    247 	__u8		Wlog;         /* log(W)               */
    248 	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
    249 	__u8		Scell_log;    /* cell size for idle damping */
    250 	__u8		prio;         /* prio of this VQ */
    251 	__u32		packets;
    252 	__u32		bytesin;
    253 };
    254 
    255 /* gred setup */
    256 struct tc_gred_sopt
    257 {
    258 	__u32		DPs;
    259 	__u32		def_DP;
    260 	__u8		grio;
    261 	__u8		flags;
    262 	__u16		pad1;
    263 };
    264 
    265 /* HTB section */
    266 #define TC_HTB_NUMPRIO		8
    267 #define TC_HTB_MAXDEPTH		8
    268 #define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
    269 
    270 struct tc_htb_opt
    271 {
    272 	struct tc_ratespec 	rate;
    273 	struct tc_ratespec 	ceil;
    274 	__u32	buffer;
    275 	__u32	cbuffer;
    276 	__u32	quantum;
    277 	__u32	level;		/* out only */
    278 	__u32	prio;
    279 };
    280 struct tc_htb_glob
    281 {
    282 	__u32 version;		/* to match HTB/TC */
    283     	__u32 rate2quantum;	/* bps->quantum divisor */
    284     	__u32 defcls;		/* default class number */
    285 	__u32 debug;		/* debug flags */
    286 
    287 	/* stats */
    288 	__u32 direct_pkts; /* count of non shapped packets */
    289 };
    290 enum
    291 {
    292 	TCA_HTB_UNSPEC,
    293 	TCA_HTB_PARMS,
    294 	TCA_HTB_INIT,
    295 	TCA_HTB_CTAB,
    296 	TCA_HTB_RTAB,
    297 	__TCA_HTB_MAX,
    298 };
    299 
    300 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
    301 
    302 struct tc_htb_xstats
    303 {
    304 	__u32 lends;
    305 	__u32 borrows;
    306 	__u32 giants;	/* too big packets (rate will not be accurate) */
    307 	__u32 tokens;
    308 	__u32 ctokens;
    309 };
    310 
    311 /* HFSC section */
    312 
    313 struct tc_hfsc_qopt
    314 {
    315 	__u16	defcls;		/* default class */
    316 };
    317 
    318 struct tc_service_curve
    319 {
    320 	__u32	m1;		/* slope of the first segment in bps */
    321 	__u32	d;		/* x-projection of the first segment in us */
    322 	__u32	m2;		/* slope of the second segment in bps */
    323 };
    324 
    325 struct tc_hfsc_stats
    326 {
    327 	__u64	work;		/* total work done */
    328 	__u64	rtwork;		/* work done by real-time criteria */
    329 	__u32	period;		/* current period */
    330 	__u32	level;		/* class level in hierarchy */
    331 };
    332 
    333 enum
    334 {
    335 	TCA_HFSC_UNSPEC,
    336 	TCA_HFSC_RSC,
    337 	TCA_HFSC_FSC,
    338 	TCA_HFSC_USC,
    339 	__TCA_HFSC_MAX,
    340 };
    341 
    342 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
    343 
    344 
    345 /* CBQ section */
    346 
    347 #define TC_CBQ_MAXPRIO		8
    348 #define TC_CBQ_MAXLEVEL		8
    349 #define TC_CBQ_DEF_EWMA		5
    350 
    351 struct tc_cbq_lssopt
    352 {
    353 	unsigned char	change;
    354 	unsigned char	flags;
    355 #define TCF_CBQ_LSS_BOUNDED	1
    356 #define TCF_CBQ_LSS_ISOLATED	2
    357 	unsigned char  	ewma_log;
    358 	unsigned char  	level;
    359 #define TCF_CBQ_LSS_FLAGS	1
    360 #define TCF_CBQ_LSS_EWMA	2
    361 #define TCF_CBQ_LSS_MAXIDLE	4
    362 #define TCF_CBQ_LSS_MINIDLE	8
    363 #define TCF_CBQ_LSS_OFFTIME	0x10
    364 #define TCF_CBQ_LSS_AVPKT	0x20
    365 	__u32		maxidle;
    366 	__u32		minidle;
    367 	__u32		offtime;
    368 	__u32		avpkt;
    369 };
    370 
    371 struct tc_cbq_wrropt
    372 {
    373 	unsigned char	flags;
    374 	unsigned char	priority;
    375 	unsigned char	cpriority;
    376 	unsigned char	__reserved;
    377 	__u32		allot;
    378 	__u32		weight;
    379 };
    380 
    381 struct tc_cbq_ovl
    382 {
    383 	unsigned char	strategy;
    384 #define	TC_CBQ_OVL_CLASSIC	0
    385 #define	TC_CBQ_OVL_DELAY	1
    386 #define	TC_CBQ_OVL_LOWPRIO	2
    387 #define	TC_CBQ_OVL_DROP		3
    388 #define	TC_CBQ_OVL_RCLASSIC	4
    389 	unsigned char	priority2;
    390 	__u16		pad;
    391 	__u32		penalty;
    392 };
    393 
    394 struct tc_cbq_police
    395 {
    396 	unsigned char	police;
    397 	unsigned char	__res1;
    398 	unsigned short	__res2;
    399 };
    400 
    401 struct tc_cbq_fopt
    402 {
    403 	__u32		split;
    404 	__u32		defmap;
    405 	__u32		defchange;
    406 };
    407 
    408 struct tc_cbq_xstats
    409 {
    410 	__u32		borrows;
    411 	__u32		overactions;
    412 	__s32		avgidle;
    413 	__s32		undertime;
    414 };
    415 
    416 enum
    417 {
    418 	TCA_CBQ_UNSPEC,
    419 	TCA_CBQ_LSSOPT,
    420 	TCA_CBQ_WRROPT,
    421 	TCA_CBQ_FOPT,
    422 	TCA_CBQ_OVL_STRATEGY,
    423 	TCA_CBQ_RATE,
    424 	TCA_CBQ_RTAB,
    425 	TCA_CBQ_POLICE,
    426 	__TCA_CBQ_MAX,
    427 };
    428 
    429 #define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
    430 
    431 /* dsmark section */
    432 
    433 enum {
    434 	TCA_DSMARK_UNSPEC,
    435 	TCA_DSMARK_INDICES,
    436 	TCA_DSMARK_DEFAULT_INDEX,
    437 	TCA_DSMARK_SET_TC_INDEX,
    438 	TCA_DSMARK_MASK,
    439 	TCA_DSMARK_VALUE,
    440 	__TCA_DSMARK_MAX,
    441 };
    442 
    443 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
    444 
    445 /* ATM  section */
    446 
    447 enum {
    448 	TCA_ATM_UNSPEC,
    449 	TCA_ATM_FD,		/* file/socket descriptor */
    450 	TCA_ATM_PTR,		/* pointer to descriptor - later */
    451 	TCA_ATM_HDR,		/* LL header */
    452 	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
    453 	TCA_ATM_ADDR,		/* PVC address (for output only) */
    454 	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
    455 	__TCA_ATM_MAX,
    456 };
    457 
    458 #define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
    459 
    460 /* Network emulator */
    461 
    462 enum
    463 {
    464 	TCA_NETEM_UNSPEC,
    465 	TCA_NETEM_CORR,
    466 	TCA_NETEM_DELAY_DIST,
    467 	TCA_NETEM_REORDER,
    468 	TCA_NETEM_CORRUPT,
    469 	__TCA_NETEM_MAX,
    470 };
    471 
    472 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
    473 
    474 struct tc_netem_qopt
    475 {
    476 	__u32	latency;	/* added delay (us) */
    477 	__u32   limit;		/* fifo limit (packets) */
    478 	__u32	loss;		/* random packet loss (0=none ~0=100%) */
    479 	__u32	gap;		/* re-ordering gap (0 for none) */
    480 	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
    481 	__u32	jitter;		/* random jitter in latency (us) */
    482 };
    483 
    484 struct tc_netem_corr
    485 {
    486 	__u32	delay_corr;	/* delay correlation */
    487 	__u32	loss_corr;	/* packet loss correlation */
    488 	__u32	dup_corr;	/* duplicate correlation  */
    489 };
    490 
    491 struct tc_netem_reorder
    492 {
    493 	__u32	probability;
    494 	__u32	correlation;
    495 };
    496 
    497 struct tc_netem_corrupt
    498 {
    499 	__u32	probability;
    500 	__u32	correlation;
    501 };
    502 
    503 #define NETEM_DIST_SCALE	8192
    504 
    505 /* DRR */
    506 
    507 enum
    508 {
    509 	TCA_DRR_UNSPEC,
    510 	TCA_DRR_QUANTUM,
    511 	__TCA_DRR_MAX
    512 };
    513 
    514 #define TCA_DRR_MAX	(__TCA_DRR_MAX - 1)
    515 
    516 struct tc_drr_stats
    517 {
    518 	__u32	deficit;
    519 };
    520 
    521 #endif
    522