pkt_sched.h revision 05bfd165958d1859275b0158fedcb00cea58ad0d
1cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#ifndef __LINUX_PKT_SCHED_H
2cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com#define __LINUX_PKT_SCHED_H
38cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
4cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com/* Logical priority bands not depending on specific packet scheduler.
5cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com   Every scheduler will map them to real traffic classes, if it has
6cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com   no more precise mechanism to classify packets.
78cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
8cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com   These numbers have no special meaning, though their coincidence
98cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
10cf2cfa174ca878c144e17e9fc60ca8e9070d7dededisonn@google.com   preferred full anarchy inspired by diffserv group.
118cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
128cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
138cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com   class, actually, as rule it will be handled with more care than
148cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com   filler or even bulk.
158cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com */
168cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
178cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_BESTEFFORT		0
188cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_FILLER			1
198cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_BULK			2
208cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_INTERACTIVE_BULK	4
218cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_INTERACTIVE		6
228cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_CONTROL			7
238cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
248cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_PRIO_MAX			15
258cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
268cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com/* Generic queue statistics, available for all the elements.
278cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com   Particular schedulers may have also their private records.
288cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com */
298cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
308cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_stats
318cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com{
328cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u64	bytes;			/* NUmber of enqueues bytes */
338cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	packets;		/* Number of enqueued packets	*/
348cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	drops;			/* Packets dropped because of lack of resources */
358cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	overlimits;		/* Number of throttle events when this
368cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com					 * flow goes out of allocated bandwidth */
378cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	bps;			/* Current flow byte rate */
388cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	pps;			/* Current flow packet rate */
398cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	qlen;
408cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	backlog;
418cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
428cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
438cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_estimator
448cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com{
458cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	signed char	interval;
468cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned char	ewma_log;
478cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
488cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
498cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com/* "Handles"
508cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com   ---------
518cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
528cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    All the traffic control objects have 32bit identifiers, or "handles".
538cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
548cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    They can be considered as opaque numbers from user API viewpoint,
558cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    but actually they always consist of two fields: major and
568cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    minor numbers, which are interpreted by kernel specially,
578cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    that may be used by applications, though not recommended.
588cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
598cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    F.e. qdisc handles always have minor number equal to zero,
608cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    classes (or flows) have major equal to parent qdisc major, and
618cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    minor uniquely identifying class inside qdisc.
628cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
638cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com    Macros to manipulate handles:
648cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com */
658cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
668cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_MAJ_MASK (0xFFFF0000U)
678cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_MIN_MASK (0x0000FFFFU)
688cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
698cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
708cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
718cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
728cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_UNSPEC	(0U)
738cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_ROOT	(0xFFFFFFFFU)
748cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_H_INGRESS    (0xFFFFFFF1U)
758cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
768cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_ratespec
778cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com{
788cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned char	cell_log;
798cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned char	__reserved;
808cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned short	overhead;
818cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	short		cell_align;
828cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned short	mpu;
838cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32		rate;
848cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
858cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
868cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TC_RTAB_SIZE	1024
878cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
888cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_sizespec {
898cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned char	cell_log;
908cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned char	size_log;
918cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	short		cell_align;
928cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	int		overhead;
938cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned int	linklayer;
948cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned int	mpu;
958cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned int	mtu;
968cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	unsigned int	tsize;
978cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
988cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
998cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comenum {
1008cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	TCA_STAB_UNSPEC,
1018cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	TCA_STAB_BASE,
1028cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	TCA_STAB_DATA,
1038cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__TCA_STAB_MAX
1048cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
1058cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1068cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TCA_STAB_MAX (__TCA_STAB_MAX - 1)
1078cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1088cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com/* FIFO section */
1098cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1108cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_fifo_qopt
1118cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com{
1128cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
1138cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
1148cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1158cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com/* PRIO section */
1168cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1178cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TCQ_PRIO_BANDS	16
1188cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com#define TCQ_MIN_PRIO_BANDS 2
1198cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1208cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_prio_qopt
1218cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com{
1228cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	int	bands;			/* Number of bands */
1238cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
1248cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
1258cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1268cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com/* MULTIQ section */
1278cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1288cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_multiq_qopt {
1298cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u16	bands;			/* Number of bands */
1308cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u16	max_bands;		/* Maximum number of queues */
1318cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com};
1328cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1338cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com/* TBF section */
1348cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com
1358cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.comstruct tc_tbf_qopt
1368cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com{
1378cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	struct tc_ratespec rate;
1388cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	struct tc_ratespec peakrate;
1398cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32		limit;
1408cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32		buffer;
1418cee797901763ab0922eb9ef484cfdcbc94bee54edisonn@google.com	__u32		mtu;
142};
143
144enum
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
162struct 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
171struct 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
187enum
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
197struct 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
210struct 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
222enum
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
233struct 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 */
254struct 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
268struct 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};
278struct 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};
288enum
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
300struct 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
311struct tc_hfsc_qopt
312{
313	__u16	defcls;		/* default class */
314};
315
316struct 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
323struct 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
331enum
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
349struct 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
369struct 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
379struct 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
392struct tc_cbq_police
393{
394	unsigned char	police;
395	unsigned char	__res1;
396	unsigned short	__res2;
397};
398
399struct tc_cbq_fopt
400{
401	__u32		split;
402	__u32		defmap;
403	__u32		defchange;
404};
405
406struct tc_cbq_xstats
407{
408	__u32		borrows;
409	__u32		overactions;
410	__s32		avgidle;
411	__s32		undertime;
412};
413
414enum
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
431enum {
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
445enum {
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
460enum
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
472struct 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
482struct 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
489struct tc_netem_reorder
490{
491	__u32	probability;
492	__u32	correlation;
493};
494
495struct tc_netem_corrupt
496{
497	__u32	probability;
498	__u32	correlation;
499};
500
501#define NETEM_DIST_SCALE	8192
502
503#endif
504