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