1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 #ifndef __LINUX_PKT_SCHED_H 3 #define __LINUX_PKT_SCHED_H 4 5 #include <linux/types.h> 6 7 /* Logical priority bands not depending on specific packet scheduler. 8 Every scheduler will map them to real traffic classes, if it has 9 no more precise mechanism to classify packets. 10 11 These numbers have no special meaning, though their coincidence 12 with obsolete IPv6 values is not occasional :-). New IPv6 drafts 13 preferred full anarchy inspired by diffserv group. 14 15 Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy 16 class, actually, as rule it will be handled with more care than 17 filler or even bulk. 18 */ 19 20 #define TC_PRIO_BESTEFFORT 0 21 #define TC_PRIO_FILLER 1 22 #define TC_PRIO_BULK 2 23 #define TC_PRIO_INTERACTIVE_BULK 4 24 #define TC_PRIO_INTERACTIVE 6 25 #define TC_PRIO_CONTROL 7 26 27 #define TC_PRIO_MAX 15 28 29 /* Generic queue statistics, available for all the elements. 30 Particular schedulers may have also their private records. 31 */ 32 33 struct tc_stats { 34 __u64 bytes; /* Number of enqueued bytes */ 35 __u32 packets; /* Number of enqueued packets */ 36 __u32 drops; /* Packets dropped because of lack of resources */ 37 __u32 overlimits; /* Number of throttle events when this 38 * flow goes out of allocated bandwidth */ 39 __u32 bps; /* Current flow byte rate */ 40 __u32 pps; /* Current flow packet rate */ 41 __u32 qlen; 42 __u32 backlog; 43 }; 44 45 struct tc_estimator { 46 signed char interval; 47 unsigned char ewma_log; 48 }; 49 50 /* "Handles" 51 --------- 52 53 All the traffic control objects have 32bit identifiers, or "handles". 54 55 They can be considered as opaque numbers from user API viewpoint, 56 but actually they always consist of two fields: major and 57 minor numbers, which are interpreted by kernel specially, 58 that may be used by applications, though not recommended. 59 60 F.e. qdisc handles always have minor number equal to zero, 61 classes (or flows) have major equal to parent qdisc major, and 62 minor uniquely identifying class inside qdisc. 63 64 Macros to manipulate handles: 65 */ 66 67 #define TC_H_MAJ_MASK (0xFFFF0000U) 68 #define TC_H_MIN_MASK (0x0000FFFFU) 69 #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) 70 #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) 71 #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) 72 73 #define TC_H_UNSPEC (0U) 74 #define TC_H_ROOT (0xFFFFFFFFU) 75 #define TC_H_INGRESS (0xFFFFFFF1U) 76 #define TC_H_CLSACT TC_H_INGRESS 77 78 #define TC_H_MIN_PRIORITY 0xFFE0U 79 #define TC_H_MIN_INGRESS 0xFFF2U 80 #define TC_H_MIN_EGRESS 0xFFF3U 81 82 /* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */ 83 enum tc_link_layer { 84 TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */ 85 TC_LINKLAYER_ETHERNET, 86 TC_LINKLAYER_ATM, 87 }; 88 #define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */ 89 90 struct tc_ratespec { 91 unsigned char cell_log; 92 __u8 linklayer; /* lower 4 bits */ 93 unsigned short overhead; 94 short cell_align; 95 unsigned short mpu; 96 __u32 rate; 97 }; 98 99 #define TC_RTAB_SIZE 1024 100 101 struct tc_sizespec { 102 unsigned char cell_log; 103 unsigned char size_log; 104 short cell_align; 105 int overhead; 106 unsigned int linklayer; 107 unsigned int mpu; 108 unsigned int mtu; 109 unsigned int tsize; 110 }; 111 112 enum { 113 TCA_STAB_UNSPEC, 114 TCA_STAB_BASE, 115 TCA_STAB_DATA, 116 __TCA_STAB_MAX 117 }; 118 119 #define TCA_STAB_MAX (__TCA_STAB_MAX - 1) 120 121 /* FIFO section */ 122 123 struct tc_fifo_qopt { 124 __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ 125 }; 126 127 /* SKBPRIO section */ 128 129 /* 130 * Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1). 131 * SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able 132 * to map one to one the DS field of IPV4 and IPV6 headers. 133 * Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY. 134 */ 135 136 #define SKBPRIO_MAX_PRIORITY 64 137 138 struct tc_skbprio_qopt { 139 __u32 limit; /* Queue length in packets. */ 140 }; 141 142 /* PRIO section */ 143 144 #define TCQ_PRIO_BANDS 16 145 #define TCQ_MIN_PRIO_BANDS 2 146 147 struct tc_prio_qopt { 148 int bands; /* Number of bands */ 149 __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ 150 }; 151 152 /* MULTIQ section */ 153 154 struct tc_multiq_qopt { 155 __u16 bands; /* Number of bands */ 156 __u16 max_bands; /* Maximum number of queues */ 157 }; 158 159 /* PLUG section */ 160 161 #define TCQ_PLUG_BUFFER 0 162 #define TCQ_PLUG_RELEASE_ONE 1 163 #define TCQ_PLUG_RELEASE_INDEFINITE 2 164 #define TCQ_PLUG_LIMIT 3 165 166 struct tc_plug_qopt { 167 /* TCQ_PLUG_BUFFER: Inset a plug into the queue and 168 * buffer any incoming packets 169 * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head 170 * to beginning of the next plug. 171 * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue. 172 * Stop buffering packets until the next TCQ_PLUG_BUFFER 173 * command is received (just act as a pass-thru queue). 174 * TCQ_PLUG_LIMIT: Increase/decrease queue size 175 */ 176 int action; 177 __u32 limit; 178 }; 179 180 /* TBF section */ 181 182 struct tc_tbf_qopt { 183 struct tc_ratespec rate; 184 struct tc_ratespec peakrate; 185 __u32 limit; 186 __u32 buffer; 187 __u32 mtu; 188 }; 189 190 enum { 191 TCA_TBF_UNSPEC, 192 TCA_TBF_PARMS, 193 TCA_TBF_RTAB, 194 TCA_TBF_PTAB, 195 TCA_TBF_RATE64, 196 TCA_TBF_PRATE64, 197 TCA_TBF_BURST, 198 TCA_TBF_PBURST, 199 TCA_TBF_PAD, 200 __TCA_TBF_MAX, 201 }; 202 203 #define TCA_TBF_MAX (__TCA_TBF_MAX - 1) 204 205 206 /* TEQL section */ 207 208 /* TEQL does not require any parameters */ 209 210 /* SFQ section */ 211 212 struct tc_sfq_qopt { 213 unsigned quantum; /* Bytes per round allocated to flow */ 214 int perturb_period; /* Period of hash perturbation */ 215 __u32 limit; /* Maximal packets in queue */ 216 unsigned divisor; /* Hash divisor */ 217 unsigned flows; /* Maximal number of flows */ 218 }; 219 220 struct tc_sfqred_stats { 221 __u32 prob_drop; /* Early drops, below max threshold */ 222 __u32 forced_drop; /* Early drops, after max threshold */ 223 __u32 prob_mark; /* Marked packets, below max threshold */ 224 __u32 forced_mark; /* Marked packets, after max threshold */ 225 __u32 prob_mark_head; /* Marked packets, below max threshold */ 226 __u32 forced_mark_head;/* Marked packets, after max threshold */ 227 }; 228 229 struct tc_sfq_qopt_v1 { 230 struct tc_sfq_qopt v0; 231 unsigned int depth; /* max number of packets per flow */ 232 unsigned int headdrop; 233 /* SFQRED parameters */ 234 __u32 limit; /* HARD maximal flow queue length (bytes) */ 235 __u32 qth_min; /* Min average length threshold (bytes) */ 236 __u32 qth_max; /* Max average length threshold (bytes) */ 237 unsigned char Wlog; /* log(W) */ 238 unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 239 unsigned char Scell_log; /* cell size for idle damping */ 240 unsigned char flags; 241 __u32 max_P; /* probability, high resolution */ 242 /* SFQRED stats */ 243 struct tc_sfqred_stats stats; 244 }; 245 246 247 struct tc_sfq_xstats { 248 __s32 allot; 249 }; 250 251 /* RED section */ 252 253 enum { 254 TCA_RED_UNSPEC, 255 TCA_RED_PARMS, 256 TCA_RED_STAB, 257 TCA_RED_MAX_P, 258 __TCA_RED_MAX, 259 }; 260 261 #define TCA_RED_MAX (__TCA_RED_MAX - 1) 262 263 struct tc_red_qopt { 264 __u32 limit; /* HARD maximal queue length (bytes) */ 265 __u32 qth_min; /* Min average length threshold (bytes) */ 266 __u32 qth_max; /* Max average length threshold (bytes) */ 267 unsigned char Wlog; /* log(W) */ 268 unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 269 unsigned char Scell_log; /* cell size for idle damping */ 270 unsigned char flags; 271 #define TC_RED_ECN 1 272 #define TC_RED_HARDDROP 2 273 #define TC_RED_ADAPTATIVE 4 274 }; 275 276 struct tc_red_xstats { 277 __u32 early; /* Early drops */ 278 __u32 pdrop; /* Drops due to queue limits */ 279 __u32 other; /* Drops due to drop() calls */ 280 __u32 marked; /* Marked packets */ 281 }; 282 283 /* GRED section */ 284 285 #define MAX_DPs 16 286 287 enum { 288 TCA_GRED_UNSPEC, 289 TCA_GRED_PARMS, 290 TCA_GRED_STAB, 291 TCA_GRED_DPS, 292 TCA_GRED_MAX_P, 293 TCA_GRED_LIMIT, 294 __TCA_GRED_MAX, 295 }; 296 297 #define TCA_GRED_MAX (__TCA_GRED_MAX - 1) 298 299 struct tc_gred_qopt { 300 __u32 limit; /* HARD maximal queue length (bytes) */ 301 __u32 qth_min; /* Min average length threshold (bytes) */ 302 __u32 qth_max; /* Max average length threshold (bytes) */ 303 __u32 DP; /* up to 2^32 DPs */ 304 __u32 backlog; 305 __u32 qave; 306 __u32 forced; 307 __u32 early; 308 __u32 other; 309 __u32 pdrop; 310 __u8 Wlog; /* log(W) */ 311 __u8 Plog; /* log(P_max/(qth_max-qth_min)) */ 312 __u8 Scell_log; /* cell size for idle damping */ 313 __u8 prio; /* prio of this VQ */ 314 __u32 packets; 315 __u32 bytesin; 316 }; 317 318 /* gred setup */ 319 struct tc_gred_sopt { 320 __u32 DPs; 321 __u32 def_DP; 322 __u8 grio; 323 __u8 flags; 324 __u16 pad1; 325 }; 326 327 /* CHOKe section */ 328 329 enum { 330 TCA_CHOKE_UNSPEC, 331 TCA_CHOKE_PARMS, 332 TCA_CHOKE_STAB, 333 TCA_CHOKE_MAX_P, 334 __TCA_CHOKE_MAX, 335 }; 336 337 #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1) 338 339 struct tc_choke_qopt { 340 __u32 limit; /* Hard queue length (packets) */ 341 __u32 qth_min; /* Min average threshold (packets) */ 342 __u32 qth_max; /* Max average threshold (packets) */ 343 unsigned char Wlog; /* log(W) */ 344 unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 345 unsigned char Scell_log; /* cell size for idle damping */ 346 unsigned char flags; /* see RED flags */ 347 }; 348 349 struct tc_choke_xstats { 350 __u32 early; /* Early drops */ 351 __u32 pdrop; /* Drops due to queue limits */ 352 __u32 other; /* Drops due to drop() calls */ 353 __u32 marked; /* Marked packets */ 354 __u32 matched; /* Drops due to flow match */ 355 }; 356 357 /* HTB section */ 358 #define TC_HTB_NUMPRIO 8 359 #define TC_HTB_MAXDEPTH 8 360 #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ 361 362 struct tc_htb_opt { 363 struct tc_ratespec rate; 364 struct tc_ratespec ceil; 365 __u32 buffer; 366 __u32 cbuffer; 367 __u32 quantum; 368 __u32 level; /* out only */ 369 __u32 prio; 370 }; 371 struct tc_htb_glob { 372 __u32 version; /* to match HTB/TC */ 373 __u32 rate2quantum; /* bps->quantum divisor */ 374 __u32 defcls; /* default class number */ 375 __u32 debug; /* debug flags */ 376 377 /* stats */ 378 __u32 direct_pkts; /* count of non shaped packets */ 379 }; 380 enum { 381 TCA_HTB_UNSPEC, 382 TCA_HTB_PARMS, 383 TCA_HTB_INIT, 384 TCA_HTB_CTAB, 385 TCA_HTB_RTAB, 386 TCA_HTB_DIRECT_QLEN, 387 TCA_HTB_RATE64, 388 TCA_HTB_CEIL64, 389 TCA_HTB_PAD, 390 __TCA_HTB_MAX, 391 }; 392 393 #define TCA_HTB_MAX (__TCA_HTB_MAX - 1) 394 395 struct tc_htb_xstats { 396 __u32 lends; 397 __u32 borrows; 398 __u32 giants; /* too big packets (rate will not be accurate) */ 399 __u32 tokens; 400 __u32 ctokens; 401 }; 402 403 /* HFSC section */ 404 405 struct tc_hfsc_qopt { 406 __u16 defcls; /* default class */ 407 }; 408 409 struct tc_service_curve { 410 __u32 m1; /* slope of the first segment in bps */ 411 __u32 d; /* x-projection of the first segment in us */ 412 __u32 m2; /* slope of the second segment in bps */ 413 }; 414 415 struct tc_hfsc_stats { 416 __u64 work; /* total work done */ 417 __u64 rtwork; /* work done by real-time criteria */ 418 __u32 period; /* current period */ 419 __u32 level; /* class level in hierarchy */ 420 }; 421 422 enum { 423 TCA_HFSC_UNSPEC, 424 TCA_HFSC_RSC, 425 TCA_HFSC_FSC, 426 TCA_HFSC_USC, 427 __TCA_HFSC_MAX, 428 }; 429 430 #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1) 431 432 433 /* CBQ section */ 434 435 #define TC_CBQ_MAXPRIO 8 436 #define TC_CBQ_MAXLEVEL 8 437 #define TC_CBQ_DEF_EWMA 5 438 439 struct tc_cbq_lssopt { 440 unsigned char change; 441 unsigned char flags; 442 #define TCF_CBQ_LSS_BOUNDED 1 443 #define TCF_CBQ_LSS_ISOLATED 2 444 unsigned char ewma_log; 445 unsigned char level; 446 #define TCF_CBQ_LSS_FLAGS 1 447 #define TCF_CBQ_LSS_EWMA 2 448 #define TCF_CBQ_LSS_MAXIDLE 4 449 #define TCF_CBQ_LSS_MINIDLE 8 450 #define TCF_CBQ_LSS_OFFTIME 0x10 451 #define TCF_CBQ_LSS_AVPKT 0x20 452 __u32 maxidle; 453 __u32 minidle; 454 __u32 offtime; 455 __u32 avpkt; 456 }; 457 458 struct tc_cbq_wrropt { 459 unsigned char flags; 460 unsigned char priority; 461 unsigned char cpriority; 462 unsigned char __reserved; 463 __u32 allot; 464 __u32 weight; 465 }; 466 467 struct tc_cbq_ovl { 468 unsigned char strategy; 469 #define TC_CBQ_OVL_CLASSIC 0 470 #define TC_CBQ_OVL_DELAY 1 471 #define TC_CBQ_OVL_LOWPRIO 2 472 #define TC_CBQ_OVL_DROP 3 473 #define TC_CBQ_OVL_RCLASSIC 4 474 unsigned char priority2; 475 __u16 pad; 476 __u32 penalty; 477 }; 478 479 struct tc_cbq_police { 480 unsigned char police; 481 unsigned char __res1; 482 unsigned short __res2; 483 }; 484 485 struct tc_cbq_fopt { 486 __u32 split; 487 __u32 defmap; 488 __u32 defchange; 489 }; 490 491 struct tc_cbq_xstats { 492 __u32 borrows; 493 __u32 overactions; 494 __s32 avgidle; 495 __s32 undertime; 496 }; 497 498 enum { 499 TCA_CBQ_UNSPEC, 500 TCA_CBQ_LSSOPT, 501 TCA_CBQ_WRROPT, 502 TCA_CBQ_FOPT, 503 TCA_CBQ_OVL_STRATEGY, 504 TCA_CBQ_RATE, 505 TCA_CBQ_RTAB, 506 TCA_CBQ_POLICE, 507 __TCA_CBQ_MAX, 508 }; 509 510 #define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1) 511 512 /* dsmark section */ 513 514 enum { 515 TCA_DSMARK_UNSPEC, 516 TCA_DSMARK_INDICES, 517 TCA_DSMARK_DEFAULT_INDEX, 518 TCA_DSMARK_SET_TC_INDEX, 519 TCA_DSMARK_MASK, 520 TCA_DSMARK_VALUE, 521 __TCA_DSMARK_MAX, 522 }; 523 524 #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1) 525 526 /* ATM section */ 527 528 enum { 529 TCA_ATM_UNSPEC, 530 TCA_ATM_FD, /* file/socket descriptor */ 531 TCA_ATM_PTR, /* pointer to descriptor - later */ 532 TCA_ATM_HDR, /* LL header */ 533 TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */ 534 TCA_ATM_ADDR, /* PVC address (for output only) */ 535 TCA_ATM_STATE, /* VC state (ATM_VS_*; for output only) */ 536 __TCA_ATM_MAX, 537 }; 538 539 #define TCA_ATM_MAX (__TCA_ATM_MAX - 1) 540 541 /* Network emulator */ 542 543 enum { 544 TCA_NETEM_UNSPEC, 545 TCA_NETEM_CORR, 546 TCA_NETEM_DELAY_DIST, 547 TCA_NETEM_REORDER, 548 TCA_NETEM_CORRUPT, 549 TCA_NETEM_LOSS, 550 TCA_NETEM_RATE, 551 TCA_NETEM_ECN, 552 TCA_NETEM_RATE64, 553 TCA_NETEM_PAD, 554 TCA_NETEM_LATENCY64, 555 TCA_NETEM_JITTER64, 556 TCA_NETEM_SLOT, 557 TCA_NETEM_SLOT_DIST, 558 __TCA_NETEM_MAX, 559 }; 560 561 #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) 562 563 struct tc_netem_qopt { 564 __u32 latency; /* added delay (us) */ 565 __u32 limit; /* fifo limit (packets) */ 566 __u32 loss; /* random packet loss (0=none ~0=100%) */ 567 __u32 gap; /* re-ordering gap (0 for none) */ 568 __u32 duplicate; /* random packet dup (0=none ~0=100%) */ 569 __u32 jitter; /* random jitter in latency (us) */ 570 }; 571 572 struct tc_netem_corr { 573 __u32 delay_corr; /* delay correlation */ 574 __u32 loss_corr; /* packet loss correlation */ 575 __u32 dup_corr; /* duplicate correlation */ 576 }; 577 578 struct tc_netem_reorder { 579 __u32 probability; 580 __u32 correlation; 581 }; 582 583 struct tc_netem_corrupt { 584 __u32 probability; 585 __u32 correlation; 586 }; 587 588 struct tc_netem_rate { 589 __u32 rate; /* byte/s */ 590 __s32 packet_overhead; 591 __u32 cell_size; 592 __s32 cell_overhead; 593 }; 594 595 struct tc_netem_slot { 596 __s64 min_delay; /* nsec */ 597 __s64 max_delay; 598 __s32 max_packets; 599 __s32 max_bytes; 600 __s64 dist_delay; /* nsec */ 601 __s64 dist_jitter; /* nsec */ 602 }; 603 604 enum { 605 NETEM_LOSS_UNSPEC, 606 NETEM_LOSS_GI, /* General Intuitive - 4 state model */ 607 NETEM_LOSS_GE, /* Gilbert Elliot models */ 608 __NETEM_LOSS_MAX 609 }; 610 #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1) 611 612 /* State transition probabilities for 4 state model */ 613 struct tc_netem_gimodel { 614 __u32 p13; 615 __u32 p31; 616 __u32 p32; 617 __u32 p14; 618 __u32 p23; 619 }; 620 621 /* Gilbert-Elliot models */ 622 struct tc_netem_gemodel { 623 __u32 p; 624 __u32 r; 625 __u32 h; 626 __u32 k1; 627 }; 628 629 #define NETEM_DIST_SCALE 8192 630 #define NETEM_DIST_MAX 16384 631 632 /* DRR */ 633 634 enum { 635 TCA_DRR_UNSPEC, 636 TCA_DRR_QUANTUM, 637 __TCA_DRR_MAX 638 }; 639 640 #define TCA_DRR_MAX (__TCA_DRR_MAX - 1) 641 642 struct tc_drr_stats { 643 __u32 deficit; 644 }; 645 646 /* MQPRIO */ 647 #define TC_QOPT_BITMASK 15 648 #define TC_QOPT_MAX_QUEUE 16 649 650 enum { 651 TC_MQPRIO_HW_OFFLOAD_NONE, /* no offload requested */ 652 TC_MQPRIO_HW_OFFLOAD_TCS, /* offload TCs, no queue counts */ 653 __TC_MQPRIO_HW_OFFLOAD_MAX 654 }; 655 656 #define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1) 657 658 enum { 659 TC_MQPRIO_MODE_DCB, 660 TC_MQPRIO_MODE_CHANNEL, 661 __TC_MQPRIO_MODE_MAX 662 }; 663 664 #define __TC_MQPRIO_MODE_MAX (__TC_MQPRIO_MODE_MAX - 1) 665 666 enum { 667 TC_MQPRIO_SHAPER_DCB, 668 TC_MQPRIO_SHAPER_BW_RATE, /* Add new shapers below */ 669 __TC_MQPRIO_SHAPER_MAX 670 }; 671 672 #define __TC_MQPRIO_SHAPER_MAX (__TC_MQPRIO_SHAPER_MAX - 1) 673 674 struct tc_mqprio_qopt { 675 __u8 num_tc; 676 __u8 prio_tc_map[TC_QOPT_BITMASK + 1]; 677 __u8 hw; 678 __u16 count[TC_QOPT_MAX_QUEUE]; 679 __u16 offset[TC_QOPT_MAX_QUEUE]; 680 }; 681 682 #define TC_MQPRIO_F_MODE 0x1 683 #define TC_MQPRIO_F_SHAPER 0x2 684 #define TC_MQPRIO_F_MIN_RATE 0x4 685 #define TC_MQPRIO_F_MAX_RATE 0x8 686 687 enum { 688 TCA_MQPRIO_UNSPEC, 689 TCA_MQPRIO_MODE, 690 TCA_MQPRIO_SHAPER, 691 TCA_MQPRIO_MIN_RATE64, 692 TCA_MQPRIO_MAX_RATE64, 693 __TCA_MQPRIO_MAX, 694 }; 695 696 #define TCA_MQPRIO_MAX (__TCA_MQPRIO_MAX - 1) 697 698 /* SFB */ 699 700 enum { 701 TCA_SFB_UNSPEC, 702 TCA_SFB_PARMS, 703 __TCA_SFB_MAX, 704 }; 705 706 #define TCA_SFB_MAX (__TCA_SFB_MAX - 1) 707 708 /* 709 * Note: increment, decrement are Q0.16 fixed-point values. 710 */ 711 struct tc_sfb_qopt { 712 __u32 rehash_interval; /* delay between hash move, in ms */ 713 __u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */ 714 __u32 max; /* max len of qlen_min */ 715 __u32 bin_size; /* maximum queue length per bin */ 716 __u32 increment; /* probability increment, (d1 in Blue) */ 717 __u32 decrement; /* probability decrement, (d2 in Blue) */ 718 __u32 limit; /* max SFB queue length */ 719 __u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */ 720 __u32 penalty_burst; 721 }; 722 723 struct tc_sfb_xstats { 724 __u32 earlydrop; 725 __u32 penaltydrop; 726 __u32 bucketdrop; 727 __u32 queuedrop; 728 __u32 childdrop; /* drops in child qdisc */ 729 __u32 marked; 730 __u32 maxqlen; 731 __u32 maxprob; 732 __u32 avgprob; 733 }; 734 735 #define SFB_MAX_PROB 0xFFFF 736 737 /* QFQ */ 738 enum { 739 TCA_QFQ_UNSPEC, 740 TCA_QFQ_WEIGHT, 741 TCA_QFQ_LMAX, 742 __TCA_QFQ_MAX 743 }; 744 745 #define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1) 746 747 struct tc_qfq_stats { 748 __u32 weight; 749 __u32 lmax; 750 }; 751 752 /* CODEL */ 753 754 enum { 755 TCA_CODEL_UNSPEC, 756 TCA_CODEL_TARGET, 757 TCA_CODEL_LIMIT, 758 TCA_CODEL_INTERVAL, 759 TCA_CODEL_ECN, 760 TCA_CODEL_CE_THRESHOLD, 761 __TCA_CODEL_MAX 762 }; 763 764 #define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1) 765 766 struct tc_codel_xstats { 767 __u32 maxpacket; /* largest packet we've seen so far */ 768 __u32 count; /* how many drops we've done since the last time we 769 * entered dropping state 770 */ 771 __u32 lastcount; /* count at entry to dropping state */ 772 __u32 ldelay; /* in-queue delay seen by most recently dequeued packet */ 773 __s32 drop_next; /* time to drop next packet */ 774 __u32 drop_overlimit; /* number of time max qdisc packet limit was hit */ 775 __u32 ecn_mark; /* number of packets we ECN marked instead of dropped */ 776 __u32 dropping; /* are we in dropping state ? */ 777 __u32 ce_mark; /* number of CE marked packets because of ce_threshold */ 778 }; 779 780 /* FQ_CODEL */ 781 782 #define FQ_CODEL_QUANTUM_MAX (1 << 20) 783 784 enum { 785 TCA_FQ_CODEL_UNSPEC, 786 TCA_FQ_CODEL_TARGET, 787 TCA_FQ_CODEL_LIMIT, 788 TCA_FQ_CODEL_INTERVAL, 789 TCA_FQ_CODEL_ECN, 790 TCA_FQ_CODEL_FLOWS, 791 TCA_FQ_CODEL_QUANTUM, 792 TCA_FQ_CODEL_CE_THRESHOLD, 793 TCA_FQ_CODEL_DROP_BATCH_SIZE, 794 TCA_FQ_CODEL_MEMORY_LIMIT, 795 __TCA_FQ_CODEL_MAX 796 }; 797 798 #define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1) 799 800 enum { 801 TCA_FQ_CODEL_XSTATS_QDISC, 802 TCA_FQ_CODEL_XSTATS_CLASS, 803 }; 804 805 struct tc_fq_codel_qd_stats { 806 __u32 maxpacket; /* largest packet we've seen so far */ 807 __u32 drop_overlimit; /* number of time max qdisc 808 * packet limit was hit 809 */ 810 __u32 ecn_mark; /* number of packets we ECN marked 811 * instead of being dropped 812 */ 813 __u32 new_flow_count; /* number of time packets 814 * created a 'new flow' 815 */ 816 __u32 new_flows_len; /* count of flows in new list */ 817 __u32 old_flows_len; /* count of flows in old list */ 818 __u32 ce_mark; /* packets above ce_threshold */ 819 __u32 memory_usage; /* in bytes */ 820 __u32 drop_overmemory; 821 }; 822 823 struct tc_fq_codel_cl_stats { 824 __s32 deficit; 825 __u32 ldelay; /* in-queue delay seen by most recently 826 * dequeued packet 827 */ 828 __u32 count; 829 __u32 lastcount; 830 __u32 dropping; 831 __s32 drop_next; 832 }; 833 834 struct tc_fq_codel_xstats { 835 __u32 type; 836 union { 837 struct tc_fq_codel_qd_stats qdisc_stats; 838 struct tc_fq_codel_cl_stats class_stats; 839 }; 840 }; 841 842 /* FQ */ 843 844 enum { 845 TCA_FQ_UNSPEC, 846 847 TCA_FQ_PLIMIT, /* limit of total number of packets in queue */ 848 849 TCA_FQ_FLOW_PLIMIT, /* limit of packets per flow */ 850 851 TCA_FQ_QUANTUM, /* RR quantum */ 852 853 TCA_FQ_INITIAL_QUANTUM, /* RR quantum for new flow */ 854 855 TCA_FQ_RATE_ENABLE, /* enable/disable rate limiting */ 856 857 TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */ 858 859 TCA_FQ_FLOW_MAX_RATE, /* per flow max rate */ 860 861 TCA_FQ_BUCKETS_LOG, /* log2(number of buckets) */ 862 863 TCA_FQ_FLOW_REFILL_DELAY, /* flow credit refill delay in usec */ 864 865 TCA_FQ_ORPHAN_MASK, /* mask applied to orphaned skb hashes */ 866 867 TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */ 868 869 __TCA_FQ_MAX 870 }; 871 872 #define TCA_FQ_MAX (__TCA_FQ_MAX - 1) 873 874 struct tc_fq_qd_stats { 875 __u64 gc_flows; 876 __u64 highprio_packets; 877 __u64 tcp_retrans; 878 __u64 throttled; 879 __u64 flows_plimit; 880 __u64 pkts_too_long; 881 __u64 allocation_errors; 882 __s64 time_next_delayed_flow; 883 __u32 flows; 884 __u32 inactive_flows; 885 __u32 throttled_flows; 886 __u32 unthrottle_latency_ns; 887 }; 888 889 /* Heavy-Hitter Filter */ 890 891 enum { 892 TCA_HHF_UNSPEC, 893 TCA_HHF_BACKLOG_LIMIT, 894 TCA_HHF_QUANTUM, 895 TCA_HHF_HH_FLOWS_LIMIT, 896 TCA_HHF_RESET_TIMEOUT, 897 TCA_HHF_ADMIT_BYTES, 898 TCA_HHF_EVICT_TIMEOUT, 899 TCA_HHF_NON_HH_WEIGHT, 900 __TCA_HHF_MAX 901 }; 902 903 #define TCA_HHF_MAX (__TCA_HHF_MAX - 1) 904 905 struct tc_hhf_xstats { 906 __u32 drop_overlimit; /* number of times max qdisc packet limit 907 * was hit 908 */ 909 __u32 hh_overlimit; /* number of times max heavy-hitters was hit */ 910 __u32 hh_tot_count; /* number of captured heavy-hitters so far */ 911 __u32 hh_cur_count; /* number of current heavy-hitters */ 912 }; 913 914 /* PIE */ 915 enum { 916 TCA_PIE_UNSPEC, 917 TCA_PIE_TARGET, 918 TCA_PIE_LIMIT, 919 TCA_PIE_TUPDATE, 920 TCA_PIE_ALPHA, 921 TCA_PIE_BETA, 922 TCA_PIE_ECN, 923 TCA_PIE_BYTEMODE, 924 __TCA_PIE_MAX 925 }; 926 #define TCA_PIE_MAX (__TCA_PIE_MAX - 1) 927 928 struct tc_pie_xstats { 929 __u32 prob; /* current probability */ 930 __u32 delay; /* current delay in ms */ 931 __u32 avg_dq_rate; /* current average dq_rate in bits/pie_time */ 932 __u32 packets_in; /* total number of packets enqueued */ 933 __u32 dropped; /* packets dropped due to pie_action */ 934 __u32 overlimit; /* dropped due to lack of space in queue */ 935 __u32 maxq; /* maximum queue size */ 936 __u32 ecn_mark; /* packets marked with ecn*/ 937 }; 938 939 /* CBS */ 940 struct tc_cbs_qopt { 941 __u8 offload; 942 __u8 _pad[3]; 943 __s32 hicredit; 944 __s32 locredit; 945 __s32 idleslope; 946 __s32 sendslope; 947 }; 948 949 enum { 950 TCA_CBS_UNSPEC, 951 TCA_CBS_PARMS, 952 __TCA_CBS_MAX, 953 }; 954 955 #define TCA_CBS_MAX (__TCA_CBS_MAX - 1) 956 957 958 /* ETF */ 959 struct tc_etf_qopt { 960 __s32 delta; 961 __s32 clockid; 962 __u32 flags; 963 #define TC_ETF_DEADLINE_MODE_ON BIT(0) 964 #define TC_ETF_OFFLOAD_ON BIT(1) 965 }; 966 967 enum { 968 TCA_ETF_UNSPEC, 969 TCA_ETF_PARMS, 970 __TCA_ETF_MAX, 971 }; 972 973 #define TCA_ETF_MAX (__TCA_ETF_MAX - 1) 974 975 976 /* CAKE */ 977 enum { 978 TCA_CAKE_UNSPEC, 979 TCA_CAKE_PAD, 980 TCA_CAKE_BASE_RATE64, 981 TCA_CAKE_DIFFSERV_MODE, 982 TCA_CAKE_ATM, 983 TCA_CAKE_FLOW_MODE, 984 TCA_CAKE_OVERHEAD, 985 TCA_CAKE_RTT, 986 TCA_CAKE_TARGET, 987 TCA_CAKE_AUTORATE, 988 TCA_CAKE_MEMORY, 989 TCA_CAKE_NAT, 990 TCA_CAKE_RAW, 991 TCA_CAKE_WASH, 992 TCA_CAKE_MPU, 993 TCA_CAKE_INGRESS, 994 TCA_CAKE_ACK_FILTER, 995 TCA_CAKE_SPLIT_GSO, 996 __TCA_CAKE_MAX 997 }; 998 #define TCA_CAKE_MAX (__TCA_CAKE_MAX - 1) 999 1000 enum { 1001 __TCA_CAKE_STATS_INVALID, 1002 TCA_CAKE_STATS_PAD, 1003 TCA_CAKE_STATS_CAPACITY_ESTIMATE64, 1004 TCA_CAKE_STATS_MEMORY_LIMIT, 1005 TCA_CAKE_STATS_MEMORY_USED, 1006 TCA_CAKE_STATS_AVG_NETOFF, 1007 TCA_CAKE_STATS_MIN_NETLEN, 1008 TCA_CAKE_STATS_MAX_NETLEN, 1009 TCA_CAKE_STATS_MIN_ADJLEN, 1010 TCA_CAKE_STATS_MAX_ADJLEN, 1011 TCA_CAKE_STATS_TIN_STATS, 1012 TCA_CAKE_STATS_DEFICIT, 1013 TCA_CAKE_STATS_COBALT_COUNT, 1014 TCA_CAKE_STATS_DROPPING, 1015 TCA_CAKE_STATS_DROP_NEXT_US, 1016 TCA_CAKE_STATS_P_DROP, 1017 TCA_CAKE_STATS_BLUE_TIMER_US, 1018 __TCA_CAKE_STATS_MAX 1019 }; 1020 #define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1) 1021 1022 enum { 1023 __TCA_CAKE_TIN_STATS_INVALID, 1024 TCA_CAKE_TIN_STATS_PAD, 1025 TCA_CAKE_TIN_STATS_SENT_PACKETS, 1026 TCA_CAKE_TIN_STATS_SENT_BYTES64, 1027 TCA_CAKE_TIN_STATS_DROPPED_PACKETS, 1028 TCA_CAKE_TIN_STATS_DROPPED_BYTES64, 1029 TCA_CAKE_TIN_STATS_ACKS_DROPPED_PACKETS, 1030 TCA_CAKE_TIN_STATS_ACKS_DROPPED_BYTES64, 1031 TCA_CAKE_TIN_STATS_ECN_MARKED_PACKETS, 1032 TCA_CAKE_TIN_STATS_ECN_MARKED_BYTES64, 1033 TCA_CAKE_TIN_STATS_BACKLOG_PACKETS, 1034 TCA_CAKE_TIN_STATS_BACKLOG_BYTES, 1035 TCA_CAKE_TIN_STATS_THRESHOLD_RATE64, 1036 TCA_CAKE_TIN_STATS_TARGET_US, 1037 TCA_CAKE_TIN_STATS_INTERVAL_US, 1038 TCA_CAKE_TIN_STATS_WAY_INDIRECT_HITS, 1039 TCA_CAKE_TIN_STATS_WAY_MISSES, 1040 TCA_CAKE_TIN_STATS_WAY_COLLISIONS, 1041 TCA_CAKE_TIN_STATS_PEAK_DELAY_US, 1042 TCA_CAKE_TIN_STATS_AVG_DELAY_US, 1043 TCA_CAKE_TIN_STATS_BASE_DELAY_US, 1044 TCA_CAKE_TIN_STATS_SPARSE_FLOWS, 1045 TCA_CAKE_TIN_STATS_BULK_FLOWS, 1046 TCA_CAKE_TIN_STATS_UNRESPONSIVE_FLOWS, 1047 TCA_CAKE_TIN_STATS_MAX_SKBLEN, 1048 TCA_CAKE_TIN_STATS_FLOW_QUANTUM, 1049 __TCA_CAKE_TIN_STATS_MAX 1050 }; 1051 #define TCA_CAKE_TIN_STATS_MAX (__TCA_CAKE_TIN_STATS_MAX - 1) 1052 #define TC_CAKE_MAX_TINS (8) 1053 1054 enum { 1055 CAKE_FLOW_NONE = 0, 1056 CAKE_FLOW_SRC_IP, 1057 CAKE_FLOW_DST_IP, 1058 CAKE_FLOW_HOSTS, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_DST_IP */ 1059 CAKE_FLOW_FLOWS, 1060 CAKE_FLOW_DUAL_SRC, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_FLOWS */ 1061 CAKE_FLOW_DUAL_DST, /* = CAKE_FLOW_DST_IP | CAKE_FLOW_FLOWS */ 1062 CAKE_FLOW_TRIPLE, /* = CAKE_FLOW_HOSTS | CAKE_FLOW_FLOWS */ 1063 CAKE_FLOW_MAX, 1064 }; 1065 1066 enum { 1067 CAKE_DIFFSERV_DIFFSERV3 = 0, 1068 CAKE_DIFFSERV_DIFFSERV4, 1069 CAKE_DIFFSERV_DIFFSERV8, 1070 CAKE_DIFFSERV_BESTEFFORT, 1071 CAKE_DIFFSERV_PRECEDENCE, 1072 CAKE_DIFFSERV_MAX 1073 }; 1074 1075 enum { 1076 CAKE_ACK_NONE = 0, 1077 CAKE_ACK_FILTER, 1078 CAKE_ACK_AGGRESSIVE, 1079 CAKE_ACK_MAX 1080 }; 1081 1082 enum { 1083 CAKE_ATM_NONE = 0, 1084 CAKE_ATM_ATM, 1085 CAKE_ATM_PTM, 1086 CAKE_ATM_MAX 1087 }; 1088 1089 #endif 1090