linux/include/uapi/linux/pkt_sched.h
<<
>>
Prefs
   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
  32struct tc_stats {
  33        __u64   bytes;                  /* Number of enqueued 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
  44struct 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
  76struct 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
  87struct 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
  98enum {
  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
 109struct 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
 118struct 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
 125struct 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
 137struct 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
 153struct tc_tbf_qopt {
 154        struct tc_ratespec rate;
 155        struct tc_ratespec peakrate;
 156        __u32           limit;
 157        __u32           buffer;
 158        __u32           mtu;
 159};
 160
 161enum {
 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
 178struct 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
 186struct tc_sfqred_stats {
 187        __u32           prob_drop;      /* Early drops, below max threshold */
 188        __u32           forced_drop;    /* Early drops, after max threshold */
 189        __u32           prob_mark;      /* Marked packets, below max threshold */
 190        __u32           forced_mark;    /* Marked packets, after max threshold */
 191        __u32           prob_mark_head; /* Marked packets, below max threshold */
 192        __u32           forced_mark_head;/* Marked packets, after max threshold */
 193};
 194
 195struct tc_sfq_qopt_v1 {
 196        struct tc_sfq_qopt v0;
 197        unsigned int    depth;          /* max number of packets per flow */
 198        unsigned int    headdrop;
 199/* SFQRED parameters */
 200        __u32           limit;          /* HARD maximal flow queue length (bytes) */
 201        __u32           qth_min;        /* Min average length threshold (bytes) */
 202        __u32           qth_max;        /* Max average length threshold (bytes) */
 203        unsigned char   Wlog;           /* log(W)               */
 204        unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
 205        unsigned char   Scell_log;      /* cell size for idle damping */
 206        unsigned char   flags;
 207        __u32           max_P;          /* probability, high resolution */
 208/* SFQRED stats */
 209        struct tc_sfqred_stats stats;
 210};
 211
 212
 213struct tc_sfq_xstats {
 214        __s32           allot;
 215};
 216
 217/* RED section */
 218
 219enum {
 220        TCA_RED_UNSPEC,
 221        TCA_RED_PARMS,
 222        TCA_RED_STAB,
 223        TCA_RED_MAX_P,
 224        __TCA_RED_MAX,
 225};
 226
 227#define TCA_RED_MAX (__TCA_RED_MAX - 1)
 228
 229struct tc_red_qopt {
 230        __u32           limit;          /* HARD maximal queue length (bytes)    */
 231        __u32           qth_min;        /* Min average length threshold (bytes) */
 232        __u32           qth_max;        /* Max average length threshold (bytes) */
 233        unsigned char   Wlog;           /* log(W)               */
 234        unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
 235        unsigned char   Scell_log;      /* cell size for idle damping */
 236        unsigned char   flags;
 237#define TC_RED_ECN              1
 238#define TC_RED_HARDDROP         2
 239#define TC_RED_ADAPTATIVE       4
 240};
 241
 242struct tc_red_xstats {
 243        __u32           early;          /* Early drops */
 244        __u32           pdrop;          /* Drops due to queue limits */
 245        __u32           other;          /* Drops due to drop() calls */
 246        __u32           marked;         /* Marked packets */
 247};
 248
 249/* GRED section */
 250
 251#define MAX_DPs 16
 252
 253enum {
 254       TCA_GRED_UNSPEC,
 255       TCA_GRED_PARMS,
 256       TCA_GRED_STAB,
 257       TCA_GRED_DPS,
 258       TCA_GRED_MAX_P,
 259           __TCA_GRED_MAX,
 260};
 261
 262#define TCA_GRED_MAX (__TCA_GRED_MAX - 1)
 263
 264struct tc_gred_qopt {
 265        __u32           limit;        /* HARD maximal queue length (bytes)    */
 266        __u32           qth_min;      /* Min average length threshold (bytes) */
 267        __u32           qth_max;      /* Max average length threshold (bytes) */
 268        __u32           DP;           /* up to 2^32 DPs */
 269        __u32           backlog;
 270        __u32           qave;
 271        __u32           forced;
 272        __u32           early;
 273        __u32           other;
 274        __u32           pdrop;
 275        __u8            Wlog;         /* log(W)               */
 276        __u8            Plog;         /* log(P_max/(qth_max-qth_min)) */
 277        __u8            Scell_log;    /* cell size for idle damping */
 278        __u8            prio;         /* prio of this VQ */
 279        __u32           packets;
 280        __u32           bytesin;
 281};
 282
 283/* gred setup */
 284struct tc_gred_sopt {
 285        __u32           DPs;
 286        __u32           def_DP;
 287        __u8            grio;
 288        __u8            flags;
 289        __u16           pad1;
 290};
 291
 292/* CHOKe section */
 293
 294enum {
 295        TCA_CHOKE_UNSPEC,
 296        TCA_CHOKE_PARMS,
 297        TCA_CHOKE_STAB,
 298        TCA_CHOKE_MAX_P,
 299        __TCA_CHOKE_MAX,
 300};
 301
 302#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1)
 303
 304struct tc_choke_qopt {
 305        __u32           limit;          /* Hard queue length (packets)  */
 306        __u32           qth_min;        /* Min average threshold (packets) */
 307        __u32           qth_max;        /* Max average threshold (packets) */
 308        unsigned char   Wlog;           /* log(W)               */
 309        unsigned char   Plog;           /* log(P_max/(qth_max-qth_min)) */
 310        unsigned char   Scell_log;      /* cell size for idle damping */
 311        unsigned char   flags;          /* see RED flags */
 312};
 313
 314struct tc_choke_xstats {
 315        __u32           early;          /* Early drops */
 316        __u32           pdrop;          /* Drops due to queue limits */
 317        __u32           other;          /* Drops due to drop() calls */
 318        __u32           marked;         /* Marked packets */
 319        __u32           matched;        /* Drops due to flow match */
 320};
 321
 322/* HTB section */
 323#define TC_HTB_NUMPRIO          8
 324#define TC_HTB_MAXDEPTH         8
 325#define TC_HTB_PROTOVER         3 /* the same as HTB and TC's major */
 326
 327struct tc_htb_opt {
 328        struct tc_ratespec      rate;
 329        struct tc_ratespec      ceil;
 330        __u32   buffer;
 331        __u32   cbuffer;
 332        __u32   quantum;
 333        __u32   level;          /* out only */
 334        __u32   prio;
 335};
 336struct tc_htb_glob {
 337        __u32 version;          /* to match HTB/TC */
 338        __u32 rate2quantum;     /* bps->quantum divisor */
 339        __u32 defcls;           /* default class number */
 340        __u32 debug;            /* debug flags */
 341
 342        /* stats */
 343        __u32 direct_pkts; /* count of non shaped packets */
 344};
 345enum {
 346        TCA_HTB_UNSPEC,
 347        TCA_HTB_PARMS,
 348        TCA_HTB_INIT,
 349        TCA_HTB_CTAB,
 350        TCA_HTB_RTAB,
 351        TCA_HTB_DIRECT_QLEN,
 352        __TCA_HTB_MAX,
 353};
 354
 355#define TCA_HTB_MAX (__TCA_HTB_MAX - 1)
 356
 357struct tc_htb_xstats {
 358        __u32 lends;
 359        __u32 borrows;
 360        __u32 giants;   /* too big packets (rate will not be accurate) */
 361        __u32 tokens;
 362        __u32 ctokens;
 363};
 364
 365/* HFSC section */
 366
 367struct tc_hfsc_qopt {
 368        __u16   defcls;         /* default class */
 369};
 370
 371struct tc_service_curve {
 372        __u32   m1;             /* slope of the first segment in bps */
 373        __u32   d;              /* x-projection of the first segment in us */
 374        __u32   m2;             /* slope of the second segment in bps */
 375};
 376
 377struct tc_hfsc_stats {
 378        __u64   work;           /* total work done */
 379        __u64   rtwork;         /* work done by real-time criteria */
 380        __u32   period;         /* current period */
 381        __u32   level;          /* class level in hierarchy */
 382};
 383
 384enum {
 385        TCA_HFSC_UNSPEC,
 386        TCA_HFSC_RSC,
 387        TCA_HFSC_FSC,
 388        TCA_HFSC_USC,
 389        __TCA_HFSC_MAX,
 390};
 391
 392#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1)
 393
 394
 395/* CBQ section */
 396
 397#define TC_CBQ_MAXPRIO          8
 398#define TC_CBQ_MAXLEVEL         8
 399#define TC_CBQ_DEF_EWMA         5
 400
 401struct tc_cbq_lssopt {
 402        unsigned char   change;
 403        unsigned char   flags;
 404#define TCF_CBQ_LSS_BOUNDED     1
 405#define TCF_CBQ_LSS_ISOLATED    2
 406        unsigned char   ewma_log;
 407        unsigned char   level;
 408#define TCF_CBQ_LSS_FLAGS       1
 409#define TCF_CBQ_LSS_EWMA        2
 410#define TCF_CBQ_LSS_MAXIDLE     4
 411#define TCF_CBQ_LSS_MINIDLE     8
 412#define TCF_CBQ_LSS_OFFTIME     0x10
 413#define TCF_CBQ_LSS_AVPKT       0x20
 414        __u32           maxidle;
 415        __u32           minidle;
 416        __u32           offtime;
 417        __u32           avpkt;
 418};
 419
 420struct tc_cbq_wrropt {
 421        unsigned char   flags;
 422        unsigned char   priority;
 423        unsigned char   cpriority;
 424        unsigned char   __reserved;
 425        __u32           allot;
 426        __u32           weight;
 427};
 428
 429struct tc_cbq_ovl {
 430        unsigned char   strategy;
 431#define TC_CBQ_OVL_CLASSIC      0
 432#define TC_CBQ_OVL_DELAY        1
 433#define TC_CBQ_OVL_LOWPRIO      2
 434#define TC_CBQ_OVL_DROP         3
 435#define TC_CBQ_OVL_RCLASSIC     4
 436        unsigned char   priority2;
 437        __u16           pad;
 438        __u32           penalty;
 439};
 440
 441struct tc_cbq_police {
 442        unsigned char   police;
 443        unsigned char   __res1;
 444        unsigned short  __res2;
 445};
 446
 447struct tc_cbq_fopt {
 448        __u32           split;
 449        __u32           defmap;
 450        __u32           defchange;
 451};
 452
 453struct tc_cbq_xstats {
 454        __u32           borrows;
 455        __u32           overactions;
 456        __s32           avgidle;
 457        __s32           undertime;
 458};
 459
 460enum {
 461        TCA_CBQ_UNSPEC,
 462        TCA_CBQ_LSSOPT,
 463        TCA_CBQ_WRROPT,
 464        TCA_CBQ_FOPT,
 465        TCA_CBQ_OVL_STRATEGY,
 466        TCA_CBQ_RATE,
 467        TCA_CBQ_RTAB,
 468        TCA_CBQ_POLICE,
 469        __TCA_CBQ_MAX,
 470};
 471
 472#define TCA_CBQ_MAX     (__TCA_CBQ_MAX - 1)
 473
 474/* dsmark section */
 475
 476enum {
 477        TCA_DSMARK_UNSPEC,
 478        TCA_DSMARK_INDICES,
 479        TCA_DSMARK_DEFAULT_INDEX,
 480        TCA_DSMARK_SET_TC_INDEX,
 481        TCA_DSMARK_MASK,
 482        TCA_DSMARK_VALUE,
 483        __TCA_DSMARK_MAX,
 484};
 485
 486#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1)
 487
 488/* ATM  section */
 489
 490enum {
 491        TCA_ATM_UNSPEC,
 492        TCA_ATM_FD,             /* file/socket descriptor */
 493        TCA_ATM_PTR,            /* pointer to descriptor - later */
 494        TCA_ATM_HDR,            /* LL header */
 495        TCA_ATM_EXCESS,         /* excess traffic class (0 for CLP)  */
 496        TCA_ATM_ADDR,           /* PVC address (for output only) */
 497        TCA_ATM_STATE,          /* VC state (ATM_VS_*; for output only) */
 498        __TCA_ATM_MAX,
 499};
 500
 501#define TCA_ATM_MAX     (__TCA_ATM_MAX - 1)
 502
 503/* Network emulator */
 504
 505enum {
 506        TCA_NETEM_UNSPEC,
 507        TCA_NETEM_CORR,
 508        TCA_NETEM_DELAY_DIST,
 509        TCA_NETEM_REORDER,
 510        TCA_NETEM_CORRUPT,
 511        TCA_NETEM_LOSS,
 512        TCA_NETEM_RATE,
 513        TCA_NETEM_ECN,
 514        __TCA_NETEM_MAX,
 515};
 516
 517#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1)
 518
 519struct tc_netem_qopt {
 520        __u32   latency;        /* added delay (us) */
 521        __u32   limit;          /* fifo limit (packets) */
 522        __u32   loss;           /* random packet loss (0=none ~0=100%) */
 523        __u32   gap;            /* re-ordering gap (0 for none) */
 524        __u32   duplicate;      /* random packet dup  (0=none ~0=100%) */
 525        __u32   jitter;         /* random jitter in latency (us) */
 526};
 527
 528struct tc_netem_corr {
 529        __u32   delay_corr;     /* delay correlation */
 530        __u32   loss_corr;      /* packet loss correlation */
 531        __u32   dup_corr;       /* duplicate correlation  */
 532};
 533
 534struct tc_netem_reorder {
 535        __u32   probability;
 536        __u32   correlation;
 537};
 538
 539struct tc_netem_corrupt {
 540        __u32   probability;
 541        __u32   correlation;
 542};
 543
 544struct tc_netem_rate {
 545        __u32   rate;   /* byte/s */
 546        __s32   packet_overhead;
 547        __u32   cell_size;
 548        __s32   cell_overhead;
 549};
 550
 551enum {
 552        NETEM_LOSS_UNSPEC,
 553        NETEM_LOSS_GI,          /* General Intuitive - 4 state model */
 554        NETEM_LOSS_GE,          /* Gilbert Elliot models */
 555        __NETEM_LOSS_MAX
 556};
 557#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1)
 558
 559/* State transition probabilities for 4 state model */
 560struct tc_netem_gimodel {
 561        __u32   p13;
 562        __u32   p31;
 563        __u32   p32;
 564        __u32   p14;
 565        __u32   p23;
 566};
 567
 568/* Gilbert-Elliot models */
 569struct tc_netem_gemodel {
 570        __u32 p;
 571        __u32 r;
 572        __u32 h;
 573        __u32 k1;
 574};
 575
 576#define NETEM_DIST_SCALE        8192
 577#define NETEM_DIST_MAX          16384
 578
 579/* DRR */
 580
 581enum {
 582        TCA_DRR_UNSPEC,
 583        TCA_DRR_QUANTUM,
 584        __TCA_DRR_MAX
 585};
 586
 587#define TCA_DRR_MAX     (__TCA_DRR_MAX - 1)
 588
 589struct tc_drr_stats {
 590        __u32   deficit;
 591};
 592
 593/* MQPRIO */
 594#define TC_QOPT_BITMASK 15
 595#define TC_QOPT_MAX_QUEUE 16
 596
 597struct tc_mqprio_qopt {
 598        __u8    num_tc;
 599        __u8    prio_tc_map[TC_QOPT_BITMASK + 1];
 600        __u8    hw;
 601        __u16   count[TC_QOPT_MAX_QUEUE];
 602        __u16   offset[TC_QOPT_MAX_QUEUE];
 603};
 604
 605/* SFB */
 606
 607enum {
 608        TCA_SFB_UNSPEC,
 609        TCA_SFB_PARMS,
 610        __TCA_SFB_MAX,
 611};
 612
 613#define TCA_SFB_MAX (__TCA_SFB_MAX - 1)
 614
 615/*
 616 * Note: increment, decrement are Q0.16 fixed-point values.
 617 */
 618struct tc_sfb_qopt {
 619        __u32 rehash_interval;  /* delay between hash move, in ms */
 620        __u32 warmup_time;      /* double buffering warmup time in ms (warmup_time < rehash_interval) */
 621        __u32 max;              /* max len of qlen_min */
 622        __u32 bin_size;         /* maximum queue length per bin */
 623        __u32 increment;        /* probability increment, (d1 in Blue) */
 624        __u32 decrement;        /* probability decrement, (d2 in Blue) */
 625        __u32 limit;            /* max SFB queue length */
 626        __u32 penalty_rate;     /* inelastic flows are rate limited to 'rate' pps */
 627        __u32 penalty_burst;
 628};
 629
 630struct tc_sfb_xstats {
 631        __u32 earlydrop;
 632        __u32 penaltydrop;
 633        __u32 bucketdrop;
 634        __u32 queuedrop;
 635        __u32 childdrop; /* drops in child qdisc */
 636        __u32 marked;
 637        __u32 maxqlen;
 638        __u32 maxprob;
 639        __u32 avgprob;
 640};
 641
 642#define SFB_MAX_PROB 0xFFFF
 643
 644/* QFQ */
 645enum {
 646        TCA_QFQ_UNSPEC,
 647        TCA_QFQ_WEIGHT,
 648        TCA_QFQ_LMAX,
 649        __TCA_QFQ_MAX
 650};
 651
 652#define TCA_QFQ_MAX     (__TCA_QFQ_MAX - 1)
 653
 654struct tc_qfq_stats {
 655        __u32 weight;
 656        __u32 lmax;
 657};
 658
 659/* CODEL */
 660
 661enum {
 662        TCA_CODEL_UNSPEC,
 663        TCA_CODEL_TARGET,
 664        TCA_CODEL_LIMIT,
 665        TCA_CODEL_INTERVAL,
 666        TCA_CODEL_ECN,
 667        __TCA_CODEL_MAX
 668};
 669
 670#define TCA_CODEL_MAX   (__TCA_CODEL_MAX - 1)
 671
 672struct tc_codel_xstats {
 673        __u32   maxpacket; /* largest packet we've seen so far */
 674        __u32   count;     /* how many drops we've done since the last time we
 675                            * entered dropping state
 676                            */
 677        __u32   lastcount; /* count at entry to dropping state */
 678        __u32   ldelay;    /* in-queue delay seen by most recently dequeued packet */
 679        __s32   drop_next; /* time to drop next packet */
 680        __u32   drop_overlimit; /* number of time max qdisc packet limit was hit */
 681        __u32   ecn_mark;  /* number of packets we ECN marked instead of dropped */
 682        __u32   dropping;  /* are we in dropping state ? */
 683};
 684
 685/* FQ_CODEL */
 686
 687enum {
 688        TCA_FQ_CODEL_UNSPEC,
 689        TCA_FQ_CODEL_TARGET,
 690        TCA_FQ_CODEL_LIMIT,
 691        TCA_FQ_CODEL_INTERVAL,
 692        TCA_FQ_CODEL_ECN,
 693        TCA_FQ_CODEL_FLOWS,
 694        TCA_FQ_CODEL_QUANTUM,
 695        __TCA_FQ_CODEL_MAX
 696};
 697
 698#define TCA_FQ_CODEL_MAX        (__TCA_FQ_CODEL_MAX - 1)
 699
 700enum {
 701        TCA_FQ_CODEL_XSTATS_QDISC,
 702        TCA_FQ_CODEL_XSTATS_CLASS,
 703};
 704
 705struct tc_fq_codel_qd_stats {
 706        __u32   maxpacket;      /* largest packet we've seen so far */
 707        __u32   drop_overlimit; /* number of time max qdisc
 708                                 * packet limit was hit
 709                                 */
 710        __u32   ecn_mark;       /* number of packets we ECN marked
 711                                 * instead of being dropped
 712                                 */
 713        __u32   new_flow_count; /* number of time packets
 714                                 * created a 'new flow'
 715                                 */
 716        __u32   new_flows_len;  /* count of flows in new list */
 717        __u32   old_flows_len;  /* count of flows in old list */
 718};
 719
 720struct tc_fq_codel_cl_stats {
 721        __s32   deficit;
 722        __u32   ldelay;         /* in-queue delay seen by most recently
 723                                 * dequeued packet
 724                                 */
 725        __u32   count;
 726        __u32   lastcount;
 727        __u32   dropping;
 728        __s32   drop_next;
 729};
 730
 731struct tc_fq_codel_xstats {
 732        __u32   type;
 733        union {
 734                struct tc_fq_codel_qd_stats qdisc_stats;
 735                struct tc_fq_codel_cl_stats class_stats;
 736        };
 737};
 738
 739#endif
 740