1 #ifndef __LINUX_PKT_SCHED_H 2 #define __LINUX_PKT_SCHED_H 3 4 #include <linux/types.h> 5 6 /* Logical priority bands not depending on specific packet scheduler. 7 Every scheduler will map them to real traffic classes, if it has 8 no more precise mechanism to classify packets. 9 10 These numbers have no special meaning, though their coincidence 11 with obsolete IPv6 values is not occasional :-). New IPv6 drafts 12 preferred full anarchy inspired by diffserv group. 13 14 Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy 15 class, actually, as rule it will be handled with more care than 16 filler or even bulk. 17 */ 18 19 #define TC_PRIO_BESTEFFORT 0 20 #define TC_PRIO_FILLER 1 21 #define TC_PRIO_BULK 2 22 #define TC_PRIO_INTERACTIVE_BULK 4 23 #define TC_PRIO_INTERACTIVE 6 24 #define TC_PRIO_CONTROL 7 25 26 #define TC_PRIO_MAX 15 27 28 /* Generic queue statistics, available for all the elements. 29 Particular schedulers may have also their private records. 30 */ 31 32 struct tc_stats { 33 __u64 bytes; /* NUmber of enqueues bytes */ 34 __u32 packets; /* Number of enqueued packets */ 35 __u32 drops; /* Packets dropped because of lack of resources */ 36 __u32 overlimits; /* Number of throttle events when this 37 * flow goes out of allocated bandwidth */ 38 __u32 bps; /* Current flow byte rate */ 39 __u32 pps; /* Current flow packet rate */ 40 __u32 qlen; 41 __u32 backlog; 42 }; 43 44 struct tc_estimator { 45 signed char interval; 46 unsigned char ewma_log; 47 }; 48 49 /* "Handles" 50 --------- 51 52 All the traffic control objects have 32bit identifiers, or "handles". 53 54 They can be considered as opaque numbers from user API viewpoint, 55 but actually they always consist of two fields: major and 56 minor numbers, which are interpreted by kernel specially, 57 that may be used by applications, though not recommended. 58 59 F.e. qdisc handles always have minor number equal to zero, 60 classes (or flows) have major equal to parent qdisc major, and 61 minor uniquely identifying class inside qdisc. 62 63 Macros to manipulate handles: 64 */ 65 66 #define TC_H_MAJ_MASK (0xFFFF0000U) 67 #define TC_H_MIN_MASK (0x0000FFFFU) 68 #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) 69 #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) 70 #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) 71 72 #define TC_H_UNSPEC (0U) 73 #define TC_H_ROOT (0xFFFFFFFFU) 74 #define TC_H_INGRESS (0xFFFFFFF1U) 75 76 struct tc_ratespec { 77 unsigned char cell_log; 78 unsigned char __reserved; 79 unsigned short overhead; 80 short cell_align; 81 unsigned short mpu; 82 __u32 rate; 83 }; 84 85 #define TC_RTAB_SIZE 1024 86 87 struct tc_sizespec { 88 unsigned char cell_log; 89 unsigned char size_log; 90 short cell_align; 91 int overhead; 92 unsigned int linklayer; 93 unsigned int mpu; 94 unsigned int mtu; 95 unsigned int tsize; 96 }; 97 98 enum { 99 TCA_STAB_UNSPEC, 100 TCA_STAB_BASE, 101 TCA_STAB_DATA, 102 __TCA_STAB_MAX 103 }; 104 105 #define TCA_STAB_MAX (__TCA_STAB_MAX - 1) 106 107 /* FIFO section */ 108 109 struct tc_fifo_qopt { 110 __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ 111 }; 112 113 /* PRIO section */ 114 115 #define TCQ_PRIO_BANDS 16 116 #define TCQ_MIN_PRIO_BANDS 2 117 118 struct tc_prio_qopt { 119 int bands; /* Number of bands */ 120 __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ 121 }; 122 123 /* MULTIQ section */ 124 125 struct tc_multiq_qopt { 126 __u16 bands; /* Number of bands */ 127 __u16 max_bands; /* Maximum number of queues */ 128 }; 129 130 /* PLUG section */ 131 132 #define TCQ_PLUG_BUFFER 0 133 #define TCQ_PLUG_RELEASE_ONE 1 134 #define TCQ_PLUG_RELEASE_INDEFINITE 2 135 #define TCQ_PLUG_LIMIT 3 136 137 struct tc_plug_qopt { 138 /* TCQ_PLUG_BUFFER: Inset a plug into the queue and 139 * buffer any incoming packets 140 * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head 141 * to beginning of the next plug. 142 * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue. 143 * Stop buffering packets until the next TCQ_PLUG_BUFFER 144 * command is received (just act as a pass-thru queue). 145 * TCQ_PLUG_LIMIT: Increase/decrease queue size 146 */ 147 int action; 148 __u32 limit; 149 }; 150 151 /* TBF section */ 152 153 struct tc_tbf_qopt { 154 struct tc_ratespec rate; 155 struct tc_ratespec peakrate; 156 __u32 limit; 157 __u32 buffer; 158 __u32 mtu; 159 }; 160 161 enum { 162 TCA_TBF_UNSPEC, 163 TCA_TBF_PARMS, 164 TCA_TBF_RTAB, 165 TCA_TBF_PTAB, 166 __TCA_TBF_MAX, 167 }; 168 169 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1) 170 171 172 /* TEQL section */ 173 174 /* TEQL does not require any parameters */ 175 176 /* SFQ section */ 177 178 struct tc_sfq_qopt { 179 unsigned quantum; /* Bytes per round allocated to flow */ 180 int perturb_period; /* Period of hash perturbation */ 181 __u32 limit; /* Maximal packets in queue */ 182 unsigned divisor; /* Hash divisor */ 183 unsigned flows; /* Maximal number of flows */ 184 }; 185 186 struct tc_sfq_xstats { 187 __s32 allot; 188 }; 189 190 /* 191 * NOTE: limit, divisor and flows are hardwired to code at the moment. 192 * 193 * limit=flows=128, divisor=1024; 194 * 195 * The only reason for this is efficiency, it is possible 196 * to change these parameters in compile time. 197 */ 198 199 /* RED section */ 200 201 enum { 202 TCA_RED_UNSPEC, 203 TCA_RED_PARMS, 204 TCA_RED_STAB, 205 __TCA_RED_MAX, 206 }; 207 208 #define TCA_RED_MAX (__TCA_RED_MAX - 1) 209 210 struct tc_red_qopt { 211 __u32 limit; /* HARD maximal queue length (bytes) */ 212 __u32 qth_min; /* Min average length threshold (bytes) */ 213 __u32 qth_max; /* Max average length threshold (bytes) */ 214 unsigned char Wlog; /* log(W) */ 215 unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 216 unsigned char Scell_log; /* cell size for idle damping */ 217 unsigned char flags; 218 #define TC_RED_ECN 1 219 #define TC_RED_HARDDROP 2 220 }; 221 222 struct tc_red_xstats { 223 __u32 early; /* Early drops */ 224 __u32 pdrop; /* Drops due to queue limits */ 225 __u32 other; /* Drops due to drop() calls */ 226 __u32 marked; /* Marked packets */ 227 }; 228 229 /* GRED section */ 230 231 #define MAX_DPs 16 232 233 enum { 234 TCA_GRED_UNSPEC, 235 TCA_GRED_PARMS, 236 TCA_GRED_STAB, 237 TCA_GRED_DPS, 238 __TCA_GRED_MAX, 239 }; 240 241 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1) 242 243 struct tc_gred_qopt { 244 __u32 limit; /* HARD maximal queue length (bytes) */ 245 __u32 qth_min; /* Min average length threshold (bytes) */ 246 __u32 qth_max; /* Max average length threshold (bytes) */ 247 __u32 DP; /* up to 2^32 DPs */ 248 __u32 backlog; 249 __u32 qave; 250 __u32 forced; 251 __u32 early; 252 __u32 other; 253 __u32 pdrop; 254 __u8 Wlog; /* log(W) */ 255 __u8 Plog; /* log(P_max/(qth_max-qth_min)) */ 256 __u8 Scell_log; /* cell size for idle damping */ 257 __u8 prio; /* prio of this VQ */ 258 __u32 packets; 259 __u32 bytesin; 260 }; 261 262 /* gred setup */ 263 struct tc_gred_sopt { 264 __u32 DPs; 265 __u32 def_DP; 266 __u8 grio; 267 __u8 flags; 268 __u16 pad1; 269 }; 270 271 /* CHOKe section */ 272 273 enum { 274 TCA_CHOKE_UNSPEC, 275 TCA_CHOKE_PARMS, 276 TCA_CHOKE_STAB, 277 __TCA_CHOKE_MAX, 278 }; 279 280 #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1) 281 282 struct tc_choke_qopt { 283 __u32 limit; /* Hard queue length (packets) */ 284 __u32 qth_min; /* Min average threshold (packets) */ 285 __u32 qth_max; /* Max average threshold (packets) */ 286 unsigned char Wlog; /* log(W) */ 287 unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 288 unsigned char Scell_log; /* cell size for idle damping */ 289 unsigned char flags; /* see RED flags */ 290 }; 291 292 struct tc_choke_xstats { 293 __u32 early; /* Early drops */ 294 __u32 pdrop; /* Drops due to queue limits */ 295 __u32 other; /* Drops due to drop() calls */ 296 __u32 marked; /* Marked packets */ 297 __u32 matched; /* Drops due to flow match */ 298 }; 299 300 /* HTB section */ 301 #define TC_HTB_NUMPRIO 8 302 #define TC_HTB_MAXDEPTH 8 303 #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ 304 305 struct tc_htb_opt { 306 struct tc_ratespec rate; 307 struct tc_ratespec ceil; 308 __u32 buffer; 309 __u32 cbuffer; 310 __u32 quantum; 311 __u32 level; /* out only */ 312 __u32 prio; 313 }; 314 struct tc_htb_glob { 315 __u32 version; /* to match HTB/TC */ 316 __u32 rate2quantum; /* bps->quantum divisor */ 317 __u32 defcls; /* default class number */ 318 __u32 debug; /* debug flags */ 319 320 /* stats */ 321 __u32 direct_pkts; /* count of non shapped packets */ 322 }; 323 enum { 324 TCA_HTB_UNSPEC, 325 TCA_HTB_PARMS, 326 TCA_HTB_INIT, 327 TCA_HTB_CTAB, 328 TCA_HTB_RTAB, 329 __TCA_HTB_MAX, 330 }; 331 332 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1) 333 334 struct tc_htb_xstats { 335 __u32 lends; 336 __u32 borrows; 337 __u32 giants; /* too big packets (rate will not be accurate) */ 338 __u32 tokens; 339 __u32 ctokens; 340 }; 341 342 /* HFSC section */ 343 344 struct tc_hfsc_qopt { 345 __u16 defcls; /* default class */ 346 }; 347 348 struct tc_service_curve { 349 __u32 m1; /* slope of the first segment in bps */ 350 __u32 d; /* x-projection of the first segment in us */ 351 __u32 m2; /* slope of the second segment in bps */ 352 }; 353 354 struct tc_hfsc_stats { 355 __u64 work; /* total work done */ 356 __u64 rtwork; /* work done by real-time criteria */ 357 __u32 period; /* current period */ 358 __u32 level; /* class level in hierarchy */ 359 }; 360 361 enum { 362 TCA_HFSC_UNSPEC, 363 TCA_HFSC_RSC, 364 TCA_HFSC_FSC, 365 TCA_HFSC_USC, 366 __TCA_HFSC_MAX, 367 }; 368 369 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1) 370 371 372 /* CBQ section */ 373 374 #define TC_CBQ_MAXPRIO 8 375 #define TC_CBQ_MAXLEVEL 8 376 #define TC_CBQ_DEF_EWMA 5 377 378 struct tc_cbq_lssopt { 379 unsigned char change; 380 unsigned char flags; 381 #define TCF_CBQ_LSS_BOUNDED 1 382 #define TCF_CBQ_LSS_ISOLATED 2 383 unsigned char ewma_log; 384 unsigned char level; 385 #define TCF_CBQ_LSS_FLAGS 1 386 #define TCF_CBQ_LSS_EWMA 2 387 #define TCF_CBQ_LSS_MAXIDLE 4 388 #define TCF_CBQ_LSS_MINIDLE 8 389 #define TCF_CBQ_LSS_OFFTIME 0x10 390 #define TCF_CBQ_LSS_AVPKT 0x20 391 __u32 maxidle; 392 __u32 minidle; 393 __u32 offtime; 394 __u32 avpkt; 395 }; 396 397 struct tc_cbq_wrropt { 398 unsigned char flags; 399 unsigned char priority; 400 unsigned char cpriority; 401 unsigned char __reserved; 402 __u32 allot; 403 __u32 weight; 404 }; 405 406 struct tc_cbq_ovl { 407 unsigned char strategy; 408 #define TC_CBQ_OVL_CLASSIC 0 409 #define TC_CBQ_OVL_DELAY 1 410 #define TC_CBQ_OVL_LOWPRIO 2 411 #define TC_CBQ_OVL_DROP 3 412 #define TC_CBQ_OVL_RCLASSIC 4 413 unsigned char priority2; 414 __u16 pad; 415 __u32 penalty; 416 }; 417 418 struct tc_cbq_police { 419 unsigned char police; 420 unsigned char __res1; 421 unsigned short __res2; 422 }; 423 424 struct tc_cbq_fopt { 425 __u32 split; 426 __u32 defmap; 427 __u32 defchange; 428 }; 429 430 struct tc_cbq_xstats { 431 __u32 borrows; 432 __u32 overactions; 433 __s32 avgidle; 434 __s32 undertime; 435 }; 436 437 enum { 438 TCA_CBQ_UNSPEC, 439 TCA_CBQ_LSSOPT, 440 TCA_CBQ_WRROPT, 441 TCA_CBQ_FOPT, 442 TCA_CBQ_OVL_STRATEGY, 443 TCA_CBQ_RATE, 444 TCA_CBQ_RTAB, 445 TCA_CBQ_POLICE, 446 __TCA_CBQ_MAX, 447 }; 448 449 #define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1) 450 451 /* dsmark section */ 452 453 enum { 454 TCA_DSMARK_UNSPEC, 455 TCA_DSMARK_INDICES, 456 TCA_DSMARK_DEFAULT_INDEX, 457 TCA_DSMARK_SET_TC_INDEX, 458 TCA_DSMARK_MASK, 459 TCA_DSMARK_VALUE, 460 __TCA_DSMARK_MAX, 461 }; 462 463 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1) 464 465 /* fq_codel section */ 466 467 enum { 468 TCA_FQ_CODEL_UNSPEC, 469 TCA_FQ_CODEL_TARGET, 470 TCA_FQ_CODEL_LIMIT, 471 TCA_FQ_CODEL_INTERVAL, 472 TCA_FQ_CODEL_ECN, 473 TCA_FQ_CODEL_FLOWS, 474 TCA_FQ_CODEL_QUANTUM, 475 __TCA_FQ_CODEL_MAX 476 }; 477 478 #define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1) 479 480 /* ATM section */ 481 482 enum { 483 TCA_ATM_UNSPEC, 484 TCA_ATM_FD, /* file/socket descriptor */ 485 TCA_ATM_PTR, /* pointer to descriptor - later */ 486 TCA_ATM_HDR, /* LL header */ 487 TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */ 488 TCA_ATM_ADDR, /* PVC address (for output only) */ 489 TCA_ATM_STATE, /* VC state (ATM_VS_*; for output only) */ 490 __TCA_ATM_MAX, 491 }; 492 493 #define TCA_ATM_MAX (__TCA_ATM_MAX - 1) 494 495 /* Network emulator */ 496 497 enum { 498 TCA_NETEM_UNSPEC, 499 TCA_NETEM_CORR, 500 TCA_NETEM_DELAY_DIST, 501 TCA_NETEM_REORDER, 502 TCA_NETEM_CORRUPT, 503 TCA_NETEM_LOSS, 504 __TCA_NETEM_MAX, 505 }; 506 507 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) 508 509 struct tc_netem_qopt { 510 __u32 latency; /* added delay (us) */ 511 __u32 limit; /* fifo limit (packets) */ 512 __u32 loss; /* random packet loss (0=none ~0=100%) */ 513 __u32 gap; /* re-ordering gap (0 for none) */ 514 __u32 duplicate; /* random packet dup (0=none ~0=100%) */ 515 __u32 jitter; /* random jitter in latency (us) */ 516 }; 517 518 struct tc_netem_corr { 519 __u32 delay_corr; /* delay correlation */ 520 __u32 loss_corr; /* packet loss correlation */ 521 __u32 dup_corr; /* duplicate correlation */ 522 }; 523 524 struct tc_netem_reorder { 525 __u32 probability; 526 __u32 correlation; 527 }; 528 529 struct tc_netem_corrupt { 530 __u32 probability; 531 __u32 correlation; 532 }; 533 534 enum { 535 NETEM_LOSS_UNSPEC, 536 NETEM_LOSS_GI, /* General Intuitive - 4 state model */ 537 NETEM_LOSS_GE, /* Gilbert Elliot models */ 538 __NETEM_LOSS_MAX 539 }; 540 #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1) 541 542 /* State transition probablities for 4 state model */ 543 struct tc_netem_gimodel { 544 __u32 p13; 545 __u32 p31; 546 __u32 p32; 547 __u32 p14; 548 __u32 p23; 549 }; 550 551 /* Gilbert-Elliot models */ 552 struct tc_netem_gemodel { 553 __u32 p; 554 __u32 r; 555 __u32 h; 556 __u32 k1; 557 }; 558 559 #define NETEM_DIST_SCALE 8192 560 #define NETEM_DIST_MAX 16384 561 562 /* DRR */ 563 564 enum { 565 TCA_DRR_UNSPEC, 566 TCA_DRR_QUANTUM, 567 __TCA_DRR_MAX 568 }; 569 570 #define TCA_DRR_MAX (__TCA_DRR_MAX - 1) 571 572 struct tc_drr_stats { 573 __u32 deficit; 574 }; 575 576 /* MQPRIO */ 577 #define TC_QOPT_BITMASK 15 578 #define TC_QOPT_MAX_QUEUE 16 579 580 struct tc_mqprio_qopt { 581 __u8 num_tc; 582 __u8 prio_tc_map[TC_QOPT_BITMASK + 1]; 583 __u8 hw; 584 __u16 count[TC_QOPT_MAX_QUEUE]; 585 __u16 offset[TC_QOPT_MAX_QUEUE]; 586 }; 587 588 /* SFB */ 589 590 enum { 591 TCA_SFB_UNSPEC, 592 TCA_SFB_PARMS, 593 __TCA_SFB_MAX, 594 }; 595 596 #define TCA_SFB_MAX (__TCA_SFB_MAX - 1) 597 598 /* 599 * Note: increment, decrement are Q0.16 fixed-point values. 600 */ 601 struct tc_sfb_qopt { 602 __u32 rehash_interval; /* delay between hash move, in ms */ 603 __u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */ 604 __u32 max; /* max len of qlen_min */ 605 __u32 bin_size; /* maximum queue length per bin */ 606 __u32 increment; /* probability increment, (d1 in Blue) */ 607 __u32 decrement; /* probability decrement, (d2 in Blue) */ 608 __u32 limit; /* max SFB queue length */ 609 __u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */ 610 __u32 penalty_burst; 611 }; 612 613 struct tc_sfb_xstats { 614 __u32 earlydrop; 615 __u32 penaltydrop; 616 __u32 bucketdrop; 617 __u32 queuedrop; 618 __u32 childdrop; /* drops in child qdisc */ 619 __u32 marked; 620 __u32 maxqlen; 621 __u32 maxprob; 622 __u32 avgprob; 623 }; 624 625 #define SFB_MAX_PROB 0xFFFF 626 627 /* QFQ */ 628 enum { 629 TCA_QFQ_UNSPEC, 630 TCA_QFQ_WEIGHT, 631 TCA_QFQ_LMAX, 632 __TCA_QFQ_MAX 633 }; 634 635 #define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1) 636 637 struct tc_qfq_stats { 638 __u32 weight; 639 __u32 lmax; 640 }; 641 642 #endif 643