144d362409d5469aed47d19e7908d19bd194493aThomas Graf#ifndef __LINUX_PKT_SCHED_H
244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define __LINUX_PKT_SCHED_H
344d362409d5469aed47d19e7908d19bd194493aThomas Graf
444d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Logical priority bands not depending on specific packet scheduler.
544d362409d5469aed47d19e7908d19bd194493aThomas Graf   Every scheduler will map them to real traffic classes, if it has
644d362409d5469aed47d19e7908d19bd194493aThomas Graf   no more precise mechanism to classify packets.
744d362409d5469aed47d19e7908d19bd194493aThomas Graf
844d362409d5469aed47d19e7908d19bd194493aThomas Graf   These numbers have no special meaning, though their coincidence
944d362409d5469aed47d19e7908d19bd194493aThomas Graf   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
1044d362409d5469aed47d19e7908d19bd194493aThomas Graf   preferred full anarchy inspired by diffserv group.
1144d362409d5469aed47d19e7908d19bd194493aThomas Graf
1244d362409d5469aed47d19e7908d19bd194493aThomas Graf   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
1344d362409d5469aed47d19e7908d19bd194493aThomas Graf   class, actually, as rule it will be handled with more care than
1444d362409d5469aed47d19e7908d19bd194493aThomas Graf   filler or even bulk.
1544d362409d5469aed47d19e7908d19bd194493aThomas Graf */
1644d362409d5469aed47d19e7908d19bd194493aThomas Graf
1744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_BESTEFFORT		0
1844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_FILLER			1
1944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_BULK			2
2044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_INTERACTIVE_BULK	4
2144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_INTERACTIVE		6
2244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_CONTROL			7
2344d362409d5469aed47d19e7908d19bd194493aThomas Graf
2444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_PRIO_MAX			15
2544d362409d5469aed47d19e7908d19bd194493aThomas Graf
2644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Generic queue statistics, available for all the elements.
2744d362409d5469aed47d19e7908d19bd194493aThomas Graf   Particular schedulers may have also their private records.
2844d362409d5469aed47d19e7908d19bd194493aThomas Graf */
2944d362409d5469aed47d19e7908d19bd194493aThomas Graf
3044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_stats
3144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
3244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64	bytes;			/* NUmber of enqueues bytes */
3344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	packets;		/* Number of enqueued packets	*/
3444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	drops;			/* Packets dropped because of lack of resources */
3544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	overlimits;		/* Number of throttle events when this
3644d362409d5469aed47d19e7908d19bd194493aThomas Graf					 * flow goes out of allocated bandwidth */
3744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	bps;			/* Current flow byte rate */
3844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	pps;			/* Current flow packet rate */
3944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	qlen;
4044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	backlog;
4144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
4244d362409d5469aed47d19e7908d19bd194493aThomas Graf
4344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_estimator
4444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
4544d362409d5469aed47d19e7908d19bd194493aThomas Graf	signed char	interval;
4644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	ewma_log;
4744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
4844d362409d5469aed47d19e7908d19bd194493aThomas Graf
4944d362409d5469aed47d19e7908d19bd194493aThomas Graf/* "Handles"
5044d362409d5469aed47d19e7908d19bd194493aThomas Graf   ---------
5144d362409d5469aed47d19e7908d19bd194493aThomas Graf
5244d362409d5469aed47d19e7908d19bd194493aThomas Graf    All the traffic control objects have 32bit identifiers, or "handles".
5344d362409d5469aed47d19e7908d19bd194493aThomas Graf
5444d362409d5469aed47d19e7908d19bd194493aThomas Graf    They can be considered as opaque numbers from user API viewpoint,
5544d362409d5469aed47d19e7908d19bd194493aThomas Graf    but actually they always consist of two fields: major and
5644d362409d5469aed47d19e7908d19bd194493aThomas Graf    minor numbers, which are interpreted by kernel specially,
5744d362409d5469aed47d19e7908d19bd194493aThomas Graf    that may be used by applications, though not recommended.
5844d362409d5469aed47d19e7908d19bd194493aThomas Graf
5944d362409d5469aed47d19e7908d19bd194493aThomas Graf    F.e. qdisc handles always have minor number equal to zero,
6044d362409d5469aed47d19e7908d19bd194493aThomas Graf    classes (or flows) have major equal to parent qdisc major, and
6144d362409d5469aed47d19e7908d19bd194493aThomas Graf    minor uniquely identifying class inside qdisc.
6244d362409d5469aed47d19e7908d19bd194493aThomas Graf
6344d362409d5469aed47d19e7908d19bd194493aThomas Graf    Macros to manipulate handles:
6444d362409d5469aed47d19e7908d19bd194493aThomas Graf */
6544d362409d5469aed47d19e7908d19bd194493aThomas Graf
6644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_MAJ_MASK (0xFFFF0000U)
6744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_MIN_MASK (0x0000FFFFU)
6844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK)
6944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK)
7044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK))
7144d362409d5469aed47d19e7908d19bd194493aThomas Graf
7244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_UNSPEC	(0U)
7344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_ROOT	(0xFFFFFFFFU)
7444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_H_INGRESS    (0xFFFFFFF1U)
7544d362409d5469aed47d19e7908d19bd194493aThomas Graf
7644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_ratespec
7744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
7844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	cell_log;
7944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	__reserved;
8044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	feature;
8144d362409d5469aed47d19e7908d19bd194493aThomas Graf	short		addend;
8244d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	mpu;
8344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		rate;
8444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
8544d362409d5469aed47d19e7908d19bd194493aThomas Graf
8644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* FIFO section */
8744d362409d5469aed47d19e7908d19bd194493aThomas Graf
8844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_fifo_qopt
8944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
9044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	limit;	/* Queue length: bytes for bfifo, packets for pfifo */
9144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
9244d362409d5469aed47d19e7908d19bd194493aThomas Graf
9344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* PRIO section */
9444d362409d5469aed47d19e7908d19bd194493aThomas Graf
9544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCQ_PRIO_BANDS	16
9644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCQ_MIN_PRIO_BANDS 2
9744d362409d5469aed47d19e7908d19bd194493aThomas Graf
9844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_prio_qopt
9944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
10044d362409d5469aed47d19e7908d19bd194493aThomas Graf	int	bands;			/* Number of bands */
10144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8	priomap[TC_PRIO_MAX+1];	/* Map: logical priority -> PRIO band */
10244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
10344d362409d5469aed47d19e7908d19bd194493aThomas Graf
10444d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
10544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
10644d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_PRIO_UNSPEC,
10744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_PRIO_MQ,
10844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_PRIO_MAX
10944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
11044d362409d5469aed47d19e7908d19bd194493aThomas Graf
11144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_PRIO_MAX    (__TCA_PRIO_MAX - 1)
11244d362409d5469aed47d19e7908d19bd194493aThomas Graf
11344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* TBF section */
11444d362409d5469aed47d19e7908d19bd194493aThomas Graf
11544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_tbf_qopt
11644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
11744d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec rate;
11844d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec peakrate;
11944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		limit;
12044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		buffer;
12144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		mtu;
12244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
12344d362409d5469aed47d19e7908d19bd194493aThomas Graf
12444d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
12544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
12644d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_TBF_UNSPEC,
12744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_TBF_PARMS,
12844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_TBF_RTAB,
12944d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_TBF_PTAB,
13044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_TBF_MAX,
13144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
13244d362409d5469aed47d19e7908d19bd194493aThomas Graf
13344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_TBF_MAX (__TCA_TBF_MAX - 1)
13444d362409d5469aed47d19e7908d19bd194493aThomas Graf
13544d362409d5469aed47d19e7908d19bd194493aThomas Graf
13644d362409d5469aed47d19e7908d19bd194493aThomas Graf/* TEQL section */
13744d362409d5469aed47d19e7908d19bd194493aThomas Graf
13844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* TEQL does not require any parameters */
13944d362409d5469aed47d19e7908d19bd194493aThomas Graf
14044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* SFQ section */
14144d362409d5469aed47d19e7908d19bd194493aThomas Graf
14244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_sfq_qopt
14344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
14444d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned	quantum;	/* Bytes per round allocated to flow */
14544d362409d5469aed47d19e7908d19bd194493aThomas Graf	int		perturb_period;	/* Period of hash perturbation */
14644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		limit;		/* Maximal packets in queue */
14744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned	divisor;	/* Hash divisor  */
14844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned	flows;		/* Maximal number of flows  */
14944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
15044d362409d5469aed47d19e7908d19bd194493aThomas Graf
15144d362409d5469aed47d19e7908d19bd194493aThomas Graf/*
15244d362409d5469aed47d19e7908d19bd194493aThomas Graf *  NOTE: limit, divisor and flows are hardwired to code at the moment.
15344d362409d5469aed47d19e7908d19bd194493aThomas Graf *
15444d362409d5469aed47d19e7908d19bd194493aThomas Graf *	limit=flows=128, divisor=1024;
15544d362409d5469aed47d19e7908d19bd194493aThomas Graf *
15644d362409d5469aed47d19e7908d19bd194493aThomas Graf *	The only reason for this is efficiency, it is possible
15744d362409d5469aed47d19e7908d19bd194493aThomas Graf *	to change these parameters in compile time.
15844d362409d5469aed47d19e7908d19bd194493aThomas Graf */
15944d362409d5469aed47d19e7908d19bd194493aThomas Graf
16044d362409d5469aed47d19e7908d19bd194493aThomas Graf/* RED section */
16144d362409d5469aed47d19e7908d19bd194493aThomas Graf
16244d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
16344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
16444d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_RED_UNSPEC,
16544d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_RED_PARMS,
16644d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_RED_STAB,
16744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_RED_MAX,
16844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
16944d362409d5469aed47d19e7908d19bd194493aThomas Graf
17044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_RED_MAX (__TCA_RED_MAX - 1)
17144d362409d5469aed47d19e7908d19bd194493aThomas Graf
17244d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_red_qopt
17344d362409d5469aed47d19e7908d19bd194493aThomas Graf{
17444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		limit;		/* HARD maximal queue length (bytes)	*/
17544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		qth_min;	/* Min average length threshold (bytes) */
17644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		qth_max;	/* Max average length threshold (bytes) */
17744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char   Wlog;		/* log(W)		*/
17844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char   Plog;		/* log(P_max/(qth_max-qth_min))	*/
17944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char   Scell_log;	/* cell size for idle damping */
18044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	flags;
18144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_RED_ECN	1
18244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_RED_HARDDROP	2
18344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
18444d362409d5469aed47d19e7908d19bd194493aThomas Graf
18544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_red_xstats
18644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
18744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32           early;          /* Early drops */
18844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32           pdrop;          /* Drops due to queue limits */
18944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32           other;          /* Drops due to drop() calls */
19044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32           marked;         /* Marked packets */
19144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
19244d362409d5469aed47d19e7908d19bd194493aThomas Graf
19344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* GRED section */
19444d362409d5469aed47d19e7908d19bd194493aThomas Graf
19544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define MAX_DPs 16
19644d362409d5469aed47d19e7908d19bd194493aThomas Graf
19744d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
19844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
19944d362409d5469aed47d19e7908d19bd194493aThomas Graf       TCA_GRED_UNSPEC,
20044d362409d5469aed47d19e7908d19bd194493aThomas Graf       TCA_GRED_PARMS,
20144d362409d5469aed47d19e7908d19bd194493aThomas Graf       TCA_GRED_STAB,
20244d362409d5469aed47d19e7908d19bd194493aThomas Graf       TCA_GRED_DPS,
20344d362409d5469aed47d19e7908d19bd194493aThomas Graf	   __TCA_GRED_MAX,
20444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
20544d362409d5469aed47d19e7908d19bd194493aThomas Graf
20644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
20744d362409d5469aed47d19e7908d19bd194493aThomas Graf
20844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_gred_qopt
20944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
21044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		limit;        /* HARD maximal queue length (bytes)    */
21144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		qth_min;      /* Min average length threshold (bytes) */
21244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		qth_max;      /* Max average length threshold (bytes) */
21344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		DP;           /* upto 2^32 DPs */
21444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		backlog;
21544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		qave;
21644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		forced;
21744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		early;
21844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		other;
21944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		pdrop;
22044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		Wlog;         /* log(W)               */
22144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		Plog;         /* log(P_max/(qth_max-qth_min)) */
22244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		Scell_log;    /* cell size for idle damping */
22344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		prio;         /* prio of this VQ */
22444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		packets;
22544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		bytesin;
22644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
22744d362409d5469aed47d19e7908d19bd194493aThomas Graf
22844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* gred setup */
22944d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_gred_sopt
23044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
23144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		DPs;
23244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		def_DP;
23344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		grio;
23444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u8		flags;
23544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		pad1;
23644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
23744d362409d5469aed47d19e7908d19bd194493aThomas Graf
23844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* HTB section */
23944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_HTB_NUMPRIO		8
24044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_HTB_MAXDEPTH		8
24144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_HTB_PROTOVER		3 /* the same as HTB and TC's major */
24244d362409d5469aed47d19e7908d19bd194493aThomas Graf
24344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_htb_opt
24444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
24544d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec 	rate;
24644d362409d5469aed47d19e7908d19bd194493aThomas Graf	struct tc_ratespec 	ceil;
24744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	buffer;
24844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	cbuffer;
24944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	quantum;
25044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	level;		/* out only */
25144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	prio;
25244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
25344d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_htb_glob
25444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
25544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 version;		/* to match HTB/TC */
25644d362409d5469aed47d19e7908d19bd194493aThomas Graf    	__u32 rate2quantum;	/* bps->quantum divisor */
25744d362409d5469aed47d19e7908d19bd194493aThomas Graf    	__u32 defcls;		/* default class number */
25844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 debug;		/* debug flags */
25944d362409d5469aed47d19e7908d19bd194493aThomas Graf
26044d362409d5469aed47d19e7908d19bd194493aThomas Graf	/* stats */
26144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 direct_pkts; /* count of non shapped packets */
26244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
26344d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
26444d362409d5469aed47d19e7908d19bd194493aThomas Graf{
26544d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HTB_UNSPEC,
26644d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HTB_PARMS,
26744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HTB_INIT,
26844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HTB_CTAB,
26944d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HTB_RTAB,
27044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_HTB_MAX,
27144d362409d5469aed47d19e7908d19bd194493aThomas Graf};
27244d362409d5469aed47d19e7908d19bd194493aThomas Graf
27344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
27444d362409d5469aed47d19e7908d19bd194493aThomas Graf
27544d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_htb_xstats
27644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
27744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 lends;
27844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 borrows;
27944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 giants;	/* too big packets (rate will not be accurate) */
28044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 tokens;
28144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32 ctokens;
28244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
28344d362409d5469aed47d19e7908d19bd194493aThomas Graf
28444d362409d5469aed47d19e7908d19bd194493aThomas Graf/* HFSC section */
28544d362409d5469aed47d19e7908d19bd194493aThomas Graf
28644d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_hfsc_qopt
28744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
28844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16	defcls;		/* default class */
28944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
29044d362409d5469aed47d19e7908d19bd194493aThomas Graf
29144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_service_curve
29244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
29344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	m1;		/* slope of the first segment in bps */
29444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	d;		/* x-projection of the first segment in us */
29544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	m2;		/* slope of the second segment in bps */
29644d362409d5469aed47d19e7908d19bd194493aThomas Graf};
29744d362409d5469aed47d19e7908d19bd194493aThomas Graf
29844d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_hfsc_stats
29944d362409d5469aed47d19e7908d19bd194493aThomas Graf{
30044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64	work;		/* total work done */
30144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u64	rtwork;		/* work done by real-time criteria */
30244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	period;		/* current period */
30344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	level;		/* class level in hierarchy */
30444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
30544d362409d5469aed47d19e7908d19bd194493aThomas Graf
30644d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
30744d362409d5469aed47d19e7908d19bd194493aThomas Graf{
30844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HFSC_UNSPEC,
30944d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HFSC_RSC,
31044d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HFSC_FSC,
31144d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_HFSC_USC,
31244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_HFSC_MAX,
31344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
31444d362409d5469aed47d19e7908d19bd194493aThomas Graf
31544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
31644d362409d5469aed47d19e7908d19bd194493aThomas Graf
31744d362409d5469aed47d19e7908d19bd194493aThomas Graf
31844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* CBQ section */
31944d362409d5469aed47d19e7908d19bd194493aThomas Graf
32044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_CBQ_MAXPRIO		8
32144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_CBQ_MAXLEVEL		8
32244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TC_CBQ_DEF_EWMA		5
32344d362409d5469aed47d19e7908d19bd194493aThomas Graf
32444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_cbq_lssopt
32544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
32644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	change;
32744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	flags;
32844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_BOUNDED	1
32944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_ISOLATED	2
33044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char  	ewma_log;
33144d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char  	level;
33244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_FLAGS	1
33344d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_EWMA	2
33444d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_MAXIDLE	4
33544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_MINIDLE	8
33644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_OFFTIME	0x10
33744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCF_CBQ_LSS_AVPKT	0x20
33844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		maxidle;
33944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		minidle;
34044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		offtime;
34144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		avpkt;
34244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
34344d362409d5469aed47d19e7908d19bd194493aThomas Graf
34444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_cbq_wrropt
34544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
34644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	flags;
34744d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	priority;
34844d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	cpriority;
34944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	__reserved;
35044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		allot;
35144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		weight;
35244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
35344d362409d5469aed47d19e7908d19bd194493aThomas Graf
35444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_cbq_ovl
35544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
35644d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	strategy;
35744d362409d5469aed47d19e7908d19bd194493aThomas Graf#define	TC_CBQ_OVL_CLASSIC	0
35844d362409d5469aed47d19e7908d19bd194493aThomas Graf#define	TC_CBQ_OVL_DELAY	1
35944d362409d5469aed47d19e7908d19bd194493aThomas Graf#define	TC_CBQ_OVL_LOWPRIO	2
36044d362409d5469aed47d19e7908d19bd194493aThomas Graf#define	TC_CBQ_OVL_DROP		3
36144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define	TC_CBQ_OVL_RCLASSIC	4
36244d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	priority2;
36344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u16		pad;
36444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		penalty;
36544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
36644d362409d5469aed47d19e7908d19bd194493aThomas Graf
36744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_cbq_police
36844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
36944d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	police;
37044d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned char	__res1;
37144d362409d5469aed47d19e7908d19bd194493aThomas Graf	unsigned short	__res2;
37244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
37344d362409d5469aed47d19e7908d19bd194493aThomas Graf
37444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_cbq_fopt
37544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
37644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		split;
37744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		defmap;
37844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		defchange;
37944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
38044d362409d5469aed47d19e7908d19bd194493aThomas Graf
38144d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_cbq_xstats
38244d362409d5469aed47d19e7908d19bd194493aThomas Graf{
38344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		borrows;
38444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32		overactions;
38544d362409d5469aed47d19e7908d19bd194493aThomas Graf	__s32		avgidle;
38644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__s32		undertime;
38744d362409d5469aed47d19e7908d19bd194493aThomas Graf};
38844d362409d5469aed47d19e7908d19bd194493aThomas Graf
38944d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
39044d362409d5469aed47d19e7908d19bd194493aThomas Graf{
39144d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_UNSPEC,
39244d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_LSSOPT,
39344d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_WRROPT,
39444d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_FOPT,
39544d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_OVL_STRATEGY,
39644d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_RATE,
39744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_RTAB,
39844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_CBQ_POLICE,
39944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_CBQ_MAX,
40044d362409d5469aed47d19e7908d19bd194493aThomas Graf};
40144d362409d5469aed47d19e7908d19bd194493aThomas Graf
40244d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_CBQ_MAX	(__TCA_CBQ_MAX - 1)
40344d362409d5469aed47d19e7908d19bd194493aThomas Graf
40444d362409d5469aed47d19e7908d19bd194493aThomas Graf/* dsmark section */
40544d362409d5469aed47d19e7908d19bd194493aThomas Graf
40644d362409d5469aed47d19e7908d19bd194493aThomas Grafenum {
40744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_DSMARK_UNSPEC,
40844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_DSMARK_INDICES,
40944d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_DSMARK_DEFAULT_INDEX,
41044d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_DSMARK_SET_TC_INDEX,
41144d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_DSMARK_MASK,
41244d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_DSMARK_VALUE,
41344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_DSMARK_MAX,
41444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
41544d362409d5469aed47d19e7908d19bd194493aThomas Graf
41644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
41744d362409d5469aed47d19e7908d19bd194493aThomas Graf
41844d362409d5469aed47d19e7908d19bd194493aThomas Graf/* ATM  section */
41944d362409d5469aed47d19e7908d19bd194493aThomas Graf
42044d362409d5469aed47d19e7908d19bd194493aThomas Grafenum {
42144d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_UNSPEC,
42244d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_FD,		/* file/socket descriptor */
42344d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_PTR,		/* pointer to descriptor - later */
42444d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_HDR,		/* LL header */
42544d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_EXCESS,		/* excess traffic class (0 for CLP)  */
42644d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_ADDR,		/* PVC address (for output only) */
42744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_ATM_STATE,		/* VC state (ATM_VS_*; for output only) */
42844d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_ATM_MAX,
42944d362409d5469aed47d19e7908d19bd194493aThomas Graf};
43044d362409d5469aed47d19e7908d19bd194493aThomas Graf
43144d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_ATM_MAX	(__TCA_ATM_MAX - 1)
43244d362409d5469aed47d19e7908d19bd194493aThomas Graf
43344d362409d5469aed47d19e7908d19bd194493aThomas Graf/* Network emulator */
43444d362409d5469aed47d19e7908d19bd194493aThomas Graf
43544d362409d5469aed47d19e7908d19bd194493aThomas Grafenum
43644d362409d5469aed47d19e7908d19bd194493aThomas Graf{
43744d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_NETEM_UNSPEC,
43844d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_NETEM_CORR,
43944d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_NETEM_DELAY_DIST,
44044d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_NETEM_REORDER,
44144d362409d5469aed47d19e7908d19bd194493aThomas Graf	TCA_NETEM_CORRUPT,
44244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__TCA_NETEM_MAX,
44344d362409d5469aed47d19e7908d19bd194493aThomas Graf};
44444d362409d5469aed47d19e7908d19bd194493aThomas Graf
44544d362409d5469aed47d19e7908d19bd194493aThomas Graf#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
44644d362409d5469aed47d19e7908d19bd194493aThomas Graf
44744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_netem_qopt
44844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
44944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	latency;	/* added delay (us) */
45044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32   limit;		/* fifo limit (packets) */
45144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	loss;		/* random packet loss (0=none ~0=100%) */
45244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	gap;		/* re-ordering gap (0 for none) */
45344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32   duplicate;	/* random packet dup  (0=none ~0=100%) */
45444d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	jitter;		/* random jitter in latency (us) */
45544d362409d5469aed47d19e7908d19bd194493aThomas Graf};
45644d362409d5469aed47d19e7908d19bd194493aThomas Graf
45744d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_netem_corr
45844d362409d5469aed47d19e7908d19bd194493aThomas Graf{
45944d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	delay_corr;	/* delay correlation */
46044d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	loss_corr;	/* packet loss correlation */
46144d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	dup_corr;	/* duplicate correlation  */
46244d362409d5469aed47d19e7908d19bd194493aThomas Graf};
46344d362409d5469aed47d19e7908d19bd194493aThomas Graf
46444d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_netem_reorder
46544d362409d5469aed47d19e7908d19bd194493aThomas Graf{
46644d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	probability;
46744d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	correlation;
46844d362409d5469aed47d19e7908d19bd194493aThomas Graf};
46944d362409d5469aed47d19e7908d19bd194493aThomas Graf
47044d362409d5469aed47d19e7908d19bd194493aThomas Grafstruct tc_netem_corrupt
47144d362409d5469aed47d19e7908d19bd194493aThomas Graf{
47244d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	probability;
47344d362409d5469aed47d19e7908d19bd194493aThomas Graf	__u32	correlation;
47444d362409d5469aed47d19e7908d19bd194493aThomas Graf};
47544d362409d5469aed47d19e7908d19bd194493aThomas Graf
47644d362409d5469aed47d19e7908d19bd194493aThomas Graf#define NETEM_DIST_SCALE	8192
47744d362409d5469aed47d19e7908d19bd194493aThomas Graf
47844d362409d5469aed47d19e7908d19bd194493aThomas Graf#endif
479