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