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