16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2607ca46eSDavid Howells #ifndef __LINUX_PKT_SCHED_H 3607ca46eSDavid Howells #define __LINUX_PKT_SCHED_H 4607ca46eSDavid Howells 5607ca46eSDavid Howells #include <linux/types.h> 6607ca46eSDavid Howells 7607ca46eSDavid Howells /* Logical priority bands not depending on specific packet scheduler. 8607ca46eSDavid Howells Every scheduler will map them to real traffic classes, if it has 9607ca46eSDavid Howells no more precise mechanism to classify packets. 10607ca46eSDavid Howells 11607ca46eSDavid Howells These numbers have no special meaning, though their coincidence 12607ca46eSDavid Howells with obsolete IPv6 values is not occasional :-). New IPv6 drafts 13607ca46eSDavid Howells preferred full anarchy inspired by diffserv group. 14607ca46eSDavid Howells 15607ca46eSDavid Howells Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy 16607ca46eSDavid Howells class, actually, as rule it will be handled with more care than 17607ca46eSDavid Howells filler or even bulk. 18607ca46eSDavid Howells */ 19607ca46eSDavid Howells 20607ca46eSDavid Howells #define TC_PRIO_BESTEFFORT 0 21607ca46eSDavid Howells #define TC_PRIO_FILLER 1 22607ca46eSDavid Howells #define TC_PRIO_BULK 2 23607ca46eSDavid Howells #define TC_PRIO_INTERACTIVE_BULK 4 24607ca46eSDavid Howells #define TC_PRIO_INTERACTIVE 6 25607ca46eSDavid Howells #define TC_PRIO_CONTROL 7 26607ca46eSDavid Howells 27607ca46eSDavid Howells #define TC_PRIO_MAX 15 28607ca46eSDavid Howells 29607ca46eSDavid Howells /* Generic queue statistics, available for all the elements. 30607ca46eSDavid Howells Particular schedulers may have also their private records. 31607ca46eSDavid Howells */ 32607ca46eSDavid Howells 33607ca46eSDavid Howells struct tc_stats { 34607ca46eSDavid Howells __u64 bytes; /* Number of enqueued bytes */ 35607ca46eSDavid Howells __u32 packets; /* Number of enqueued packets */ 36607ca46eSDavid Howells __u32 drops; /* Packets dropped because of lack of resources */ 37607ca46eSDavid Howells __u32 overlimits; /* Number of throttle events when this 38607ca46eSDavid Howells * flow goes out of allocated bandwidth */ 39607ca46eSDavid Howells __u32 bps; /* Current flow byte rate */ 40607ca46eSDavid Howells __u32 pps; /* Current flow packet rate */ 41607ca46eSDavid Howells __u32 qlen; 42607ca46eSDavid Howells __u32 backlog; 43607ca46eSDavid Howells }; 44607ca46eSDavid Howells 45607ca46eSDavid Howells struct tc_estimator { 46607ca46eSDavid Howells signed char interval; 47607ca46eSDavid Howells unsigned char ewma_log; 48607ca46eSDavid Howells }; 49607ca46eSDavid Howells 50607ca46eSDavid Howells /* "Handles" 51607ca46eSDavid Howells --------- 52607ca46eSDavid Howells 53607ca46eSDavid Howells All the traffic control objects have 32bit identifiers, or "handles". 54607ca46eSDavid Howells 55607ca46eSDavid Howells They can be considered as opaque numbers from user API viewpoint, 56607ca46eSDavid Howells but actually they always consist of two fields: major and 57607ca46eSDavid Howells minor numbers, which are interpreted by kernel specially, 58607ca46eSDavid Howells that may be used by applications, though not recommended. 59607ca46eSDavid Howells 60607ca46eSDavid Howells F.e. qdisc handles always have minor number equal to zero, 61607ca46eSDavid Howells classes (or flows) have major equal to parent qdisc major, and 62607ca46eSDavid Howells minor uniquely identifying class inside qdisc. 63607ca46eSDavid Howells 64607ca46eSDavid Howells Macros to manipulate handles: 65607ca46eSDavid Howells */ 66607ca46eSDavid Howells 67607ca46eSDavid Howells #define TC_H_MAJ_MASK (0xFFFF0000U) 68607ca46eSDavid Howells #define TC_H_MIN_MASK (0x0000FFFFU) 69607ca46eSDavid Howells #define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) 70607ca46eSDavid Howells #define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) 71607ca46eSDavid Howells #define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) 72607ca46eSDavid Howells 73607ca46eSDavid Howells #define TC_H_UNSPEC (0U) 74607ca46eSDavid Howells #define TC_H_ROOT (0xFFFFFFFFU) 75607ca46eSDavid Howells #define TC_H_INGRESS (0xFFFFFFF1U) 761f211a1bSDaniel Borkmann #define TC_H_CLSACT TC_H_INGRESS 771f211a1bSDaniel Borkmann 7832302902SAlexander Duyck #define TC_H_MIN_PRIORITY 0xFFE0U 791f211a1bSDaniel Borkmann #define TC_H_MIN_INGRESS 0xFFF2U 801f211a1bSDaniel Borkmann #define TC_H_MIN_EGRESS 0xFFF3U 81607ca46eSDavid Howells 828a8e3d84SJesper Dangaard Brouer /* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */ 838a8e3d84SJesper Dangaard Brouer enum tc_link_layer { 848a8e3d84SJesper Dangaard Brouer TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */ 858a8e3d84SJesper Dangaard Brouer TC_LINKLAYER_ETHERNET, 868a8e3d84SJesper Dangaard Brouer TC_LINKLAYER_ATM, 878a8e3d84SJesper Dangaard Brouer }; 888a8e3d84SJesper Dangaard Brouer #define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */ 898a8e3d84SJesper Dangaard Brouer 90607ca46eSDavid Howells struct tc_ratespec { 91607ca46eSDavid Howells unsigned char cell_log; 928a8e3d84SJesper Dangaard Brouer __u8 linklayer; /* lower 4 bits */ 93607ca46eSDavid Howells unsigned short overhead; 94607ca46eSDavid Howells short cell_align; 95607ca46eSDavid Howells unsigned short mpu; 96607ca46eSDavid Howells __u32 rate; 97607ca46eSDavid Howells }; 98607ca46eSDavid Howells 99607ca46eSDavid Howells #define TC_RTAB_SIZE 1024 100607ca46eSDavid Howells 101607ca46eSDavid Howells struct tc_sizespec { 102607ca46eSDavid Howells unsigned char cell_log; 103607ca46eSDavid Howells unsigned char size_log; 104607ca46eSDavid Howells short cell_align; 105607ca46eSDavid Howells int overhead; 106607ca46eSDavid Howells unsigned int linklayer; 107607ca46eSDavid Howells unsigned int mpu; 108607ca46eSDavid Howells unsigned int mtu; 109607ca46eSDavid Howells unsigned int tsize; 110607ca46eSDavid Howells }; 111607ca46eSDavid Howells 112607ca46eSDavid Howells enum { 113607ca46eSDavid Howells TCA_STAB_UNSPEC, 114607ca46eSDavid Howells TCA_STAB_BASE, 115607ca46eSDavid Howells TCA_STAB_DATA, 116607ca46eSDavid Howells __TCA_STAB_MAX 117607ca46eSDavid Howells }; 118607ca46eSDavid Howells 119607ca46eSDavid Howells #define TCA_STAB_MAX (__TCA_STAB_MAX - 1) 120607ca46eSDavid Howells 121607ca46eSDavid Howells /* FIFO section */ 122607ca46eSDavid Howells 123607ca46eSDavid Howells struct tc_fifo_qopt { 124607ca46eSDavid Howells __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ 125607ca46eSDavid Howells }; 126607ca46eSDavid Howells 127aea5f654SNishanth Devarajan /* SKBPRIO section */ 128aea5f654SNishanth Devarajan 129aea5f654SNishanth Devarajan /* 130aea5f654SNishanth Devarajan * Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1). 131aea5f654SNishanth Devarajan * SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able 132aea5f654SNishanth Devarajan * to map one to one the DS field of IPV4 and IPV6 headers. 133aea5f654SNishanth Devarajan * Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY. 134aea5f654SNishanth Devarajan */ 135aea5f654SNishanth Devarajan 136aea5f654SNishanth Devarajan #define SKBPRIO_MAX_PRIORITY 64 137aea5f654SNishanth Devarajan 138aea5f654SNishanth Devarajan struct tc_skbprio_qopt { 139aea5f654SNishanth Devarajan __u32 limit; /* Queue length in packets. */ 140aea5f654SNishanth Devarajan }; 141aea5f654SNishanth Devarajan 142607ca46eSDavid Howells /* PRIO section */ 143607ca46eSDavid Howells 144607ca46eSDavid Howells #define TCQ_PRIO_BANDS 16 145607ca46eSDavid Howells #define TCQ_MIN_PRIO_BANDS 2 146607ca46eSDavid Howells 147607ca46eSDavid Howells struct tc_prio_qopt { 148607ca46eSDavid Howells int bands; /* Number of bands */ 149607ca46eSDavid Howells __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ 150607ca46eSDavid Howells }; 151607ca46eSDavid Howells 152607ca46eSDavid Howells /* MULTIQ section */ 153607ca46eSDavid Howells 154607ca46eSDavid Howells struct tc_multiq_qopt { 155607ca46eSDavid Howells __u16 bands; /* Number of bands */ 156607ca46eSDavid Howells __u16 max_bands; /* Maximum number of queues */ 157607ca46eSDavid Howells }; 158607ca46eSDavid Howells 159607ca46eSDavid Howells /* PLUG section */ 160607ca46eSDavid Howells 161607ca46eSDavid Howells #define TCQ_PLUG_BUFFER 0 162607ca46eSDavid Howells #define TCQ_PLUG_RELEASE_ONE 1 163607ca46eSDavid Howells #define TCQ_PLUG_RELEASE_INDEFINITE 2 164607ca46eSDavid Howells #define TCQ_PLUG_LIMIT 3 165607ca46eSDavid Howells 166607ca46eSDavid Howells struct tc_plug_qopt { 167607ca46eSDavid Howells /* TCQ_PLUG_BUFFER: Inset a plug into the queue and 168607ca46eSDavid Howells * buffer any incoming packets 169607ca46eSDavid Howells * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head 170607ca46eSDavid Howells * to beginning of the next plug. 171607ca46eSDavid Howells * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue. 172607ca46eSDavid Howells * Stop buffering packets until the next TCQ_PLUG_BUFFER 173607ca46eSDavid Howells * command is received (just act as a pass-thru queue). 174607ca46eSDavid Howells * TCQ_PLUG_LIMIT: Increase/decrease queue size 175607ca46eSDavid Howells */ 176607ca46eSDavid Howells int action; 177607ca46eSDavid Howells __u32 limit; 178607ca46eSDavid Howells }; 179607ca46eSDavid Howells 180607ca46eSDavid Howells /* TBF section */ 181607ca46eSDavid Howells 182607ca46eSDavid Howells struct tc_tbf_qopt { 183607ca46eSDavid Howells struct tc_ratespec rate; 184607ca46eSDavid Howells struct tc_ratespec peakrate; 185607ca46eSDavid Howells __u32 limit; 186607ca46eSDavid Howells __u32 buffer; 187607ca46eSDavid Howells __u32 mtu; 188607ca46eSDavid Howells }; 189607ca46eSDavid Howells 190607ca46eSDavid Howells enum { 191607ca46eSDavid Howells TCA_TBF_UNSPEC, 192607ca46eSDavid Howells TCA_TBF_PARMS, 193607ca46eSDavid Howells TCA_TBF_RTAB, 194607ca46eSDavid Howells TCA_TBF_PTAB, 195a33c4a26SYang Yingliang TCA_TBF_RATE64, 196a33c4a26SYang Yingliang TCA_TBF_PRATE64, 1972e04ad42SYang Yingliang TCA_TBF_BURST, 1982e04ad42SYang Yingliang TCA_TBF_PBURST, 1992a51c1e8SNicolas Dichtel TCA_TBF_PAD, 200607ca46eSDavid Howells __TCA_TBF_MAX, 201607ca46eSDavid Howells }; 202607ca46eSDavid Howells 203607ca46eSDavid Howells #define TCA_TBF_MAX (__TCA_TBF_MAX - 1) 204607ca46eSDavid Howells 205607ca46eSDavid Howells 206607ca46eSDavid Howells /* TEQL section */ 207607ca46eSDavid Howells 208607ca46eSDavid Howells /* TEQL does not require any parameters */ 209607ca46eSDavid Howells 210607ca46eSDavid Howells /* SFQ section */ 211607ca46eSDavid Howells 212607ca46eSDavid Howells struct tc_sfq_qopt { 213607ca46eSDavid Howells unsigned quantum; /* Bytes per round allocated to flow */ 214607ca46eSDavid Howells int perturb_period; /* Period of hash perturbation */ 215607ca46eSDavid Howells __u32 limit; /* Maximal packets in queue */ 216607ca46eSDavid Howells unsigned divisor; /* Hash divisor */ 217607ca46eSDavid Howells unsigned flows; /* Maximal number of flows */ 218607ca46eSDavid Howells }; 219607ca46eSDavid Howells 220607ca46eSDavid Howells struct tc_sfqred_stats { 221607ca46eSDavid Howells __u32 prob_drop; /* Early drops, below max threshold */ 222607ca46eSDavid Howells __u32 forced_drop; /* Early drops, after max threshold */ 223607ca46eSDavid Howells __u32 prob_mark; /* Marked packets, below max threshold */ 224607ca46eSDavid Howells __u32 forced_mark; /* Marked packets, after max threshold */ 225607ca46eSDavid Howells __u32 prob_mark_head; /* Marked packets, below max threshold */ 226607ca46eSDavid Howells __u32 forced_mark_head;/* Marked packets, after max threshold */ 227607ca46eSDavid Howells }; 228607ca46eSDavid Howells 229607ca46eSDavid Howells struct tc_sfq_qopt_v1 { 230607ca46eSDavid Howells struct tc_sfq_qopt v0; 231607ca46eSDavid Howells unsigned int depth; /* max number of packets per flow */ 232607ca46eSDavid Howells unsigned int headdrop; 233607ca46eSDavid Howells /* SFQRED parameters */ 234607ca46eSDavid Howells __u32 limit; /* HARD maximal flow queue length (bytes) */ 235607ca46eSDavid Howells __u32 qth_min; /* Min average length threshold (bytes) */ 236607ca46eSDavid Howells __u32 qth_max; /* Max average length threshold (bytes) */ 237607ca46eSDavid Howells unsigned char Wlog; /* log(W) */ 238607ca46eSDavid Howells unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 239607ca46eSDavid Howells unsigned char Scell_log; /* cell size for idle damping */ 240607ca46eSDavid Howells unsigned char flags; 241607ca46eSDavid Howells __u32 max_P; /* probability, high resolution */ 242607ca46eSDavid Howells /* SFQRED stats */ 243607ca46eSDavid Howells struct tc_sfqred_stats stats; 244607ca46eSDavid Howells }; 245607ca46eSDavid Howells 246607ca46eSDavid Howells 247607ca46eSDavid Howells struct tc_sfq_xstats { 248607ca46eSDavid Howells __s32 allot; 249607ca46eSDavid Howells }; 250607ca46eSDavid Howells 251607ca46eSDavid Howells /* RED section */ 252607ca46eSDavid Howells 253607ca46eSDavid Howells enum { 254607ca46eSDavid Howells TCA_RED_UNSPEC, 255607ca46eSDavid Howells TCA_RED_PARMS, 256607ca46eSDavid Howells TCA_RED_STAB, 257607ca46eSDavid Howells TCA_RED_MAX_P, 258607ca46eSDavid Howells __TCA_RED_MAX, 259607ca46eSDavid Howells }; 260607ca46eSDavid Howells 261607ca46eSDavid Howells #define TCA_RED_MAX (__TCA_RED_MAX - 1) 262607ca46eSDavid Howells 263607ca46eSDavid Howells struct tc_red_qopt { 264607ca46eSDavid Howells __u32 limit; /* HARD maximal queue length (bytes) */ 265607ca46eSDavid Howells __u32 qth_min; /* Min average length threshold (bytes) */ 266607ca46eSDavid Howells __u32 qth_max; /* Max average length threshold (bytes) */ 267607ca46eSDavid Howells unsigned char Wlog; /* log(W) */ 268607ca46eSDavid Howells unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 269607ca46eSDavid Howells unsigned char Scell_log; /* cell size for idle damping */ 270607ca46eSDavid Howells unsigned char flags; 271607ca46eSDavid Howells #define TC_RED_ECN 1 272607ca46eSDavid Howells #define TC_RED_HARDDROP 2 273607ca46eSDavid Howells #define TC_RED_ADAPTATIVE 4 274607ca46eSDavid Howells }; 275607ca46eSDavid Howells 276607ca46eSDavid Howells struct tc_red_xstats { 277607ca46eSDavid Howells __u32 early; /* Early drops */ 278607ca46eSDavid Howells __u32 pdrop; /* Drops due to queue limits */ 279607ca46eSDavid Howells __u32 other; /* Drops due to drop() calls */ 280607ca46eSDavid Howells __u32 marked; /* Marked packets */ 281607ca46eSDavid Howells }; 282607ca46eSDavid Howells 283607ca46eSDavid Howells /* GRED section */ 284607ca46eSDavid Howells 285607ca46eSDavid Howells #define MAX_DPs 16 286607ca46eSDavid Howells 287607ca46eSDavid Howells enum { 288607ca46eSDavid Howells TCA_GRED_UNSPEC, 289607ca46eSDavid Howells TCA_GRED_PARMS, 290607ca46eSDavid Howells TCA_GRED_STAB, 291607ca46eSDavid Howells TCA_GRED_DPS, 292607ca46eSDavid Howells TCA_GRED_MAX_P, 293a3eb95f8SDavid Ward TCA_GRED_LIMIT, 29480e22e96SJakub Kicinski TCA_GRED_VQ_LIST, /* nested TCA_GRED_VQ_ENTRY */ 295607ca46eSDavid Howells __TCA_GRED_MAX, 296607ca46eSDavid Howells }; 297607ca46eSDavid Howells 298607ca46eSDavid Howells #define TCA_GRED_MAX (__TCA_GRED_MAX - 1) 299607ca46eSDavid Howells 30080e22e96SJakub Kicinski enum { 30180e22e96SJakub Kicinski TCA_GRED_VQ_ENTRY_UNSPEC, 30280e22e96SJakub Kicinski TCA_GRED_VQ_ENTRY, /* nested TCA_GRED_VQ_* */ 30380e22e96SJakub Kicinski __TCA_GRED_VQ_ENTRY_MAX, 30480e22e96SJakub Kicinski }; 30580e22e96SJakub Kicinski #define TCA_GRED_VQ_ENTRY_MAX (__TCA_GRED_VQ_ENTRY_MAX - 1) 30680e22e96SJakub Kicinski 30780e22e96SJakub Kicinski enum { 30880e22e96SJakub Kicinski TCA_GRED_VQ_UNSPEC, 30980e22e96SJakub Kicinski TCA_GRED_VQ_PAD, 31080e22e96SJakub Kicinski TCA_GRED_VQ_DP, /* u32 */ 31180e22e96SJakub Kicinski TCA_GRED_VQ_STAT_BYTES, /* u64 */ 31280e22e96SJakub Kicinski TCA_GRED_VQ_STAT_PACKETS, /* u32 */ 31380e22e96SJakub Kicinski TCA_GRED_VQ_STAT_BACKLOG, /* u32 */ 31480e22e96SJakub Kicinski TCA_GRED_VQ_STAT_PROB_DROP, /* u32 */ 31580e22e96SJakub Kicinski TCA_GRED_VQ_STAT_PROB_MARK, /* u32 */ 31680e22e96SJakub Kicinski TCA_GRED_VQ_STAT_FORCED_DROP, /* u32 */ 31780e22e96SJakub Kicinski TCA_GRED_VQ_STAT_FORCED_MARK, /* u32 */ 31880e22e96SJakub Kicinski TCA_GRED_VQ_STAT_PDROP, /* u32 */ 31980e22e96SJakub Kicinski TCA_GRED_VQ_STAT_OTHER, /* u32 */ 32072111015SJakub Kicinski TCA_GRED_VQ_FLAGS, /* u32 */ 32180e22e96SJakub Kicinski __TCA_GRED_VQ_MAX 32280e22e96SJakub Kicinski }; 32380e22e96SJakub Kicinski 32480e22e96SJakub Kicinski #define TCA_GRED_VQ_MAX (__TCA_GRED_VQ_MAX - 1) 32580e22e96SJakub Kicinski 326607ca46eSDavid Howells struct tc_gred_qopt { 327607ca46eSDavid Howells __u32 limit; /* HARD maximal queue length (bytes) */ 328607ca46eSDavid Howells __u32 qth_min; /* Min average length threshold (bytes) */ 329607ca46eSDavid Howells __u32 qth_max; /* Max average length threshold (bytes) */ 330607ca46eSDavid Howells __u32 DP; /* up to 2^32 DPs */ 331607ca46eSDavid Howells __u32 backlog; 332607ca46eSDavid Howells __u32 qave; 333607ca46eSDavid Howells __u32 forced; 334607ca46eSDavid Howells __u32 early; 335607ca46eSDavid Howells __u32 other; 336607ca46eSDavid Howells __u32 pdrop; 337607ca46eSDavid Howells __u8 Wlog; /* log(W) */ 338607ca46eSDavid Howells __u8 Plog; /* log(P_max/(qth_max-qth_min)) */ 339607ca46eSDavid Howells __u8 Scell_log; /* cell size for idle damping */ 340607ca46eSDavid Howells __u8 prio; /* prio of this VQ */ 341607ca46eSDavid Howells __u32 packets; 342607ca46eSDavid Howells __u32 bytesin; 343607ca46eSDavid Howells }; 344607ca46eSDavid Howells 345607ca46eSDavid Howells /* gred setup */ 346607ca46eSDavid Howells struct tc_gred_sopt { 347607ca46eSDavid Howells __u32 DPs; 348607ca46eSDavid Howells __u32 def_DP; 349607ca46eSDavid Howells __u8 grio; 350607ca46eSDavid Howells __u8 flags; 351607ca46eSDavid Howells __u16 pad1; 352607ca46eSDavid Howells }; 353607ca46eSDavid Howells 354607ca46eSDavid Howells /* CHOKe section */ 355607ca46eSDavid Howells 356607ca46eSDavid Howells enum { 357607ca46eSDavid Howells TCA_CHOKE_UNSPEC, 358607ca46eSDavid Howells TCA_CHOKE_PARMS, 359607ca46eSDavid Howells TCA_CHOKE_STAB, 360607ca46eSDavid Howells TCA_CHOKE_MAX_P, 361607ca46eSDavid Howells __TCA_CHOKE_MAX, 362607ca46eSDavid Howells }; 363607ca46eSDavid Howells 364607ca46eSDavid Howells #define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1) 365607ca46eSDavid Howells 366607ca46eSDavid Howells struct tc_choke_qopt { 367607ca46eSDavid Howells __u32 limit; /* Hard queue length (packets) */ 368607ca46eSDavid Howells __u32 qth_min; /* Min average threshold (packets) */ 369607ca46eSDavid Howells __u32 qth_max; /* Max average threshold (packets) */ 370607ca46eSDavid Howells unsigned char Wlog; /* log(W) */ 371607ca46eSDavid Howells unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 372607ca46eSDavid Howells unsigned char Scell_log; /* cell size for idle damping */ 373607ca46eSDavid Howells unsigned char flags; /* see RED flags */ 374607ca46eSDavid Howells }; 375607ca46eSDavid Howells 376607ca46eSDavid Howells struct tc_choke_xstats { 377607ca46eSDavid Howells __u32 early; /* Early drops */ 378607ca46eSDavid Howells __u32 pdrop; /* Drops due to queue limits */ 379607ca46eSDavid Howells __u32 other; /* Drops due to drop() calls */ 380607ca46eSDavid Howells __u32 marked; /* Marked packets */ 381607ca46eSDavid Howells __u32 matched; /* Drops due to flow match */ 382607ca46eSDavid Howells }; 383607ca46eSDavid Howells 384607ca46eSDavid Howells /* HTB section */ 385607ca46eSDavid Howells #define TC_HTB_NUMPRIO 8 386607ca46eSDavid Howells #define TC_HTB_MAXDEPTH 8 387607ca46eSDavid Howells #define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ 388607ca46eSDavid Howells 389607ca46eSDavid Howells struct tc_htb_opt { 390607ca46eSDavid Howells struct tc_ratespec rate; 391607ca46eSDavid Howells struct tc_ratespec ceil; 392607ca46eSDavid Howells __u32 buffer; 393607ca46eSDavid Howells __u32 cbuffer; 394607ca46eSDavid Howells __u32 quantum; 395607ca46eSDavid Howells __u32 level; /* out only */ 396607ca46eSDavid Howells __u32 prio; 397607ca46eSDavid Howells }; 398607ca46eSDavid Howells struct tc_htb_glob { 399607ca46eSDavid Howells __u32 version; /* to match HTB/TC */ 400607ca46eSDavid Howells __u32 rate2quantum; /* bps->quantum divisor */ 401607ca46eSDavid Howells __u32 defcls; /* default class number */ 402607ca46eSDavid Howells __u32 debug; /* debug flags */ 403607ca46eSDavid Howells 404607ca46eSDavid Howells /* stats */ 405607ca46eSDavid Howells __u32 direct_pkts; /* count of non shaped packets */ 406607ca46eSDavid Howells }; 407607ca46eSDavid Howells enum { 408607ca46eSDavid Howells TCA_HTB_UNSPEC, 409607ca46eSDavid Howells TCA_HTB_PARMS, 410607ca46eSDavid Howells TCA_HTB_INIT, 411607ca46eSDavid Howells TCA_HTB_CTAB, 412607ca46eSDavid Howells TCA_HTB_RTAB, 4136906f4edSEric Dumazet TCA_HTB_DIRECT_QLEN, 414df62cdf3SEric Dumazet TCA_HTB_RATE64, 415df62cdf3SEric Dumazet TCA_HTB_CEIL64, 4162a51c1e8SNicolas Dichtel TCA_HTB_PAD, 417607ca46eSDavid Howells __TCA_HTB_MAX, 418607ca46eSDavid Howells }; 419607ca46eSDavid Howells 420607ca46eSDavid Howells #define TCA_HTB_MAX (__TCA_HTB_MAX - 1) 421607ca46eSDavid Howells 422607ca46eSDavid Howells struct tc_htb_xstats { 423607ca46eSDavid Howells __u32 lends; 424607ca46eSDavid Howells __u32 borrows; 425b9de3963SFlorent Fourcot __u32 giants; /* unused since 'Make HTB scheduler work with TSO.' */ 426b9de3963SFlorent Fourcot __s32 tokens; 427b9de3963SFlorent Fourcot __s32 ctokens; 428607ca46eSDavid Howells }; 429607ca46eSDavid Howells 430607ca46eSDavid Howells /* HFSC section */ 431607ca46eSDavid Howells 432607ca46eSDavid Howells struct tc_hfsc_qopt { 433607ca46eSDavid Howells __u16 defcls; /* default class */ 434607ca46eSDavid Howells }; 435607ca46eSDavid Howells 436607ca46eSDavid Howells struct tc_service_curve { 437607ca46eSDavid Howells __u32 m1; /* slope of the first segment in bps */ 438607ca46eSDavid Howells __u32 d; /* x-projection of the first segment in us */ 439607ca46eSDavid Howells __u32 m2; /* slope of the second segment in bps */ 440607ca46eSDavid Howells }; 441607ca46eSDavid Howells 442607ca46eSDavid Howells struct tc_hfsc_stats { 443607ca46eSDavid Howells __u64 work; /* total work done */ 444607ca46eSDavid Howells __u64 rtwork; /* work done by real-time criteria */ 445607ca46eSDavid Howells __u32 period; /* current period */ 446607ca46eSDavid Howells __u32 level; /* class level in hierarchy */ 447607ca46eSDavid Howells }; 448607ca46eSDavid Howells 449607ca46eSDavid Howells enum { 450607ca46eSDavid Howells TCA_HFSC_UNSPEC, 451607ca46eSDavid Howells TCA_HFSC_RSC, 452607ca46eSDavid Howells TCA_HFSC_FSC, 453607ca46eSDavid Howells TCA_HFSC_USC, 454607ca46eSDavid Howells __TCA_HFSC_MAX, 455607ca46eSDavid Howells }; 456607ca46eSDavid Howells 457607ca46eSDavid Howells #define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1) 458607ca46eSDavid Howells 459607ca46eSDavid Howells 460607ca46eSDavid Howells /* CBQ section */ 461607ca46eSDavid Howells 462607ca46eSDavid Howells #define TC_CBQ_MAXPRIO 8 463607ca46eSDavid Howells #define TC_CBQ_MAXLEVEL 8 464607ca46eSDavid Howells #define TC_CBQ_DEF_EWMA 5 465607ca46eSDavid Howells 466607ca46eSDavid Howells struct tc_cbq_lssopt { 467607ca46eSDavid Howells unsigned char change; 468607ca46eSDavid Howells unsigned char flags; 469607ca46eSDavid Howells #define TCF_CBQ_LSS_BOUNDED 1 470607ca46eSDavid Howells #define TCF_CBQ_LSS_ISOLATED 2 471607ca46eSDavid Howells unsigned char ewma_log; 472607ca46eSDavid Howells unsigned char level; 473607ca46eSDavid Howells #define TCF_CBQ_LSS_FLAGS 1 474607ca46eSDavid Howells #define TCF_CBQ_LSS_EWMA 2 475607ca46eSDavid Howells #define TCF_CBQ_LSS_MAXIDLE 4 476607ca46eSDavid Howells #define TCF_CBQ_LSS_MINIDLE 8 477607ca46eSDavid Howells #define TCF_CBQ_LSS_OFFTIME 0x10 478607ca46eSDavid Howells #define TCF_CBQ_LSS_AVPKT 0x20 479607ca46eSDavid Howells __u32 maxidle; 480607ca46eSDavid Howells __u32 minidle; 481607ca46eSDavid Howells __u32 offtime; 482607ca46eSDavid Howells __u32 avpkt; 483607ca46eSDavid Howells }; 484607ca46eSDavid Howells 485607ca46eSDavid Howells struct tc_cbq_wrropt { 486607ca46eSDavid Howells unsigned char flags; 487607ca46eSDavid Howells unsigned char priority; 488607ca46eSDavid Howells unsigned char cpriority; 489607ca46eSDavid Howells unsigned char __reserved; 490607ca46eSDavid Howells __u32 allot; 491607ca46eSDavid Howells __u32 weight; 492607ca46eSDavid Howells }; 493607ca46eSDavid Howells 494607ca46eSDavid Howells struct tc_cbq_ovl { 495607ca46eSDavid Howells unsigned char strategy; 496607ca46eSDavid Howells #define TC_CBQ_OVL_CLASSIC 0 497607ca46eSDavid Howells #define TC_CBQ_OVL_DELAY 1 498607ca46eSDavid Howells #define TC_CBQ_OVL_LOWPRIO 2 499607ca46eSDavid Howells #define TC_CBQ_OVL_DROP 3 500607ca46eSDavid Howells #define TC_CBQ_OVL_RCLASSIC 4 501607ca46eSDavid Howells unsigned char priority2; 502607ca46eSDavid Howells __u16 pad; 503607ca46eSDavid Howells __u32 penalty; 504607ca46eSDavid Howells }; 505607ca46eSDavid Howells 506607ca46eSDavid Howells struct tc_cbq_police { 507607ca46eSDavid Howells unsigned char police; 508607ca46eSDavid Howells unsigned char __res1; 509607ca46eSDavid Howells unsigned short __res2; 510607ca46eSDavid Howells }; 511607ca46eSDavid Howells 512607ca46eSDavid Howells struct tc_cbq_fopt { 513607ca46eSDavid Howells __u32 split; 514607ca46eSDavid Howells __u32 defmap; 515607ca46eSDavid Howells __u32 defchange; 516607ca46eSDavid Howells }; 517607ca46eSDavid Howells 518607ca46eSDavid Howells struct tc_cbq_xstats { 519607ca46eSDavid Howells __u32 borrows; 520607ca46eSDavid Howells __u32 overactions; 521607ca46eSDavid Howells __s32 avgidle; 522607ca46eSDavid Howells __s32 undertime; 523607ca46eSDavid Howells }; 524607ca46eSDavid Howells 525607ca46eSDavid Howells enum { 526607ca46eSDavid Howells TCA_CBQ_UNSPEC, 527607ca46eSDavid Howells TCA_CBQ_LSSOPT, 528607ca46eSDavid Howells TCA_CBQ_WRROPT, 529607ca46eSDavid Howells TCA_CBQ_FOPT, 530607ca46eSDavid Howells TCA_CBQ_OVL_STRATEGY, 531607ca46eSDavid Howells TCA_CBQ_RATE, 532607ca46eSDavid Howells TCA_CBQ_RTAB, 533607ca46eSDavid Howells TCA_CBQ_POLICE, 534607ca46eSDavid Howells __TCA_CBQ_MAX, 535607ca46eSDavid Howells }; 536607ca46eSDavid Howells 537607ca46eSDavid Howells #define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1) 538607ca46eSDavid Howells 539607ca46eSDavid Howells /* dsmark section */ 540607ca46eSDavid Howells 541607ca46eSDavid Howells enum { 542607ca46eSDavid Howells TCA_DSMARK_UNSPEC, 543607ca46eSDavid Howells TCA_DSMARK_INDICES, 544607ca46eSDavid Howells TCA_DSMARK_DEFAULT_INDEX, 545607ca46eSDavid Howells TCA_DSMARK_SET_TC_INDEX, 546607ca46eSDavid Howells TCA_DSMARK_MASK, 547607ca46eSDavid Howells TCA_DSMARK_VALUE, 548607ca46eSDavid Howells __TCA_DSMARK_MAX, 549607ca46eSDavid Howells }; 550607ca46eSDavid Howells 551607ca46eSDavid Howells #define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1) 552607ca46eSDavid Howells 553607ca46eSDavid Howells /* ATM section */ 554607ca46eSDavid Howells 555607ca46eSDavid Howells enum { 556607ca46eSDavid Howells TCA_ATM_UNSPEC, 557607ca46eSDavid Howells TCA_ATM_FD, /* file/socket descriptor */ 558607ca46eSDavid Howells TCA_ATM_PTR, /* pointer to descriptor - later */ 559607ca46eSDavid Howells TCA_ATM_HDR, /* LL header */ 560607ca46eSDavid Howells TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */ 561607ca46eSDavid Howells TCA_ATM_ADDR, /* PVC address (for output only) */ 562607ca46eSDavid Howells TCA_ATM_STATE, /* VC state (ATM_VS_*; for output only) */ 563607ca46eSDavid Howells __TCA_ATM_MAX, 564607ca46eSDavid Howells }; 565607ca46eSDavid Howells 566607ca46eSDavid Howells #define TCA_ATM_MAX (__TCA_ATM_MAX - 1) 567607ca46eSDavid Howells 568607ca46eSDavid Howells /* Network emulator */ 569607ca46eSDavid Howells 570607ca46eSDavid Howells enum { 571607ca46eSDavid Howells TCA_NETEM_UNSPEC, 572607ca46eSDavid Howells TCA_NETEM_CORR, 573607ca46eSDavid Howells TCA_NETEM_DELAY_DIST, 574607ca46eSDavid Howells TCA_NETEM_REORDER, 575607ca46eSDavid Howells TCA_NETEM_CORRUPT, 576607ca46eSDavid Howells TCA_NETEM_LOSS, 577607ca46eSDavid Howells TCA_NETEM_RATE, 578607ca46eSDavid Howells TCA_NETEM_ECN, 5796a031f67SYang Yingliang TCA_NETEM_RATE64, 5802a51c1e8SNicolas Dichtel TCA_NETEM_PAD, 58199803171SDave Taht TCA_NETEM_LATENCY64, 58299803171SDave Taht TCA_NETEM_JITTER64, 583836af83bSDave Taht TCA_NETEM_SLOT, 5840a9fe5c3SYousuk Seung TCA_NETEM_SLOT_DIST, 585607ca46eSDavid Howells __TCA_NETEM_MAX, 586607ca46eSDavid Howells }; 587607ca46eSDavid Howells 588607ca46eSDavid Howells #define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) 589607ca46eSDavid Howells 590607ca46eSDavid Howells struct tc_netem_qopt { 591607ca46eSDavid Howells __u32 latency; /* added delay (us) */ 592607ca46eSDavid Howells __u32 limit; /* fifo limit (packets) */ 593607ca46eSDavid Howells __u32 loss; /* random packet loss (0=none ~0=100%) */ 594607ca46eSDavid Howells __u32 gap; /* re-ordering gap (0 for none) */ 595607ca46eSDavid Howells __u32 duplicate; /* random packet dup (0=none ~0=100%) */ 596607ca46eSDavid Howells __u32 jitter; /* random jitter in latency (us) */ 597607ca46eSDavid Howells }; 598607ca46eSDavid Howells 599607ca46eSDavid Howells struct tc_netem_corr { 600607ca46eSDavid Howells __u32 delay_corr; /* delay correlation */ 601607ca46eSDavid Howells __u32 loss_corr; /* packet loss correlation */ 602607ca46eSDavid Howells __u32 dup_corr; /* duplicate correlation */ 603607ca46eSDavid Howells }; 604607ca46eSDavid Howells 605607ca46eSDavid Howells struct tc_netem_reorder { 606607ca46eSDavid Howells __u32 probability; 607607ca46eSDavid Howells __u32 correlation; 608607ca46eSDavid Howells }; 609607ca46eSDavid Howells 610607ca46eSDavid Howells struct tc_netem_corrupt { 611607ca46eSDavid Howells __u32 probability; 612607ca46eSDavid Howells __u32 correlation; 613607ca46eSDavid Howells }; 614607ca46eSDavid Howells 615607ca46eSDavid Howells struct tc_netem_rate { 616607ca46eSDavid Howells __u32 rate; /* byte/s */ 617607ca46eSDavid Howells __s32 packet_overhead; 618607ca46eSDavid Howells __u32 cell_size; 619607ca46eSDavid Howells __s32 cell_overhead; 620607ca46eSDavid Howells }; 621607ca46eSDavid Howells 622836af83bSDave Taht struct tc_netem_slot { 623836af83bSDave Taht __s64 min_delay; /* nsec */ 624836af83bSDave Taht __s64 max_delay; 625836af83bSDave Taht __s32 max_packets; 626836af83bSDave Taht __s32 max_bytes; 6270a9fe5c3SYousuk Seung __s64 dist_delay; /* nsec */ 6280a9fe5c3SYousuk Seung __s64 dist_jitter; /* nsec */ 629836af83bSDave Taht }; 630836af83bSDave Taht 631607ca46eSDavid Howells enum { 632607ca46eSDavid Howells NETEM_LOSS_UNSPEC, 633607ca46eSDavid Howells NETEM_LOSS_GI, /* General Intuitive - 4 state model */ 634607ca46eSDavid Howells NETEM_LOSS_GE, /* Gilbert Elliot models */ 635607ca46eSDavid Howells __NETEM_LOSS_MAX 636607ca46eSDavid Howells }; 637607ca46eSDavid Howells #define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1) 638607ca46eSDavid Howells 639607ca46eSDavid Howells /* State transition probabilities for 4 state model */ 640607ca46eSDavid Howells struct tc_netem_gimodel { 641607ca46eSDavid Howells __u32 p13; 642607ca46eSDavid Howells __u32 p31; 643607ca46eSDavid Howells __u32 p32; 644607ca46eSDavid Howells __u32 p14; 645607ca46eSDavid Howells __u32 p23; 646607ca46eSDavid Howells }; 647607ca46eSDavid Howells 648607ca46eSDavid Howells /* Gilbert-Elliot models */ 649607ca46eSDavid Howells struct tc_netem_gemodel { 650607ca46eSDavid Howells __u32 p; 651607ca46eSDavid Howells __u32 r; 652607ca46eSDavid Howells __u32 h; 653607ca46eSDavid Howells __u32 k1; 654607ca46eSDavid Howells }; 655607ca46eSDavid Howells 656607ca46eSDavid Howells #define NETEM_DIST_SCALE 8192 657607ca46eSDavid Howells #define NETEM_DIST_MAX 16384 658607ca46eSDavid Howells 659607ca46eSDavid Howells /* DRR */ 660607ca46eSDavid Howells 661607ca46eSDavid Howells enum { 662607ca46eSDavid Howells TCA_DRR_UNSPEC, 663607ca46eSDavid Howells TCA_DRR_QUANTUM, 664607ca46eSDavid Howells __TCA_DRR_MAX 665607ca46eSDavid Howells }; 666607ca46eSDavid Howells 667607ca46eSDavid Howells #define TCA_DRR_MAX (__TCA_DRR_MAX - 1) 668607ca46eSDavid Howells 669607ca46eSDavid Howells struct tc_drr_stats { 670607ca46eSDavid Howells __u32 deficit; 671607ca46eSDavid Howells }; 672607ca46eSDavid Howells 673607ca46eSDavid Howells /* MQPRIO */ 674607ca46eSDavid Howells #define TC_QOPT_BITMASK 15 675607ca46eSDavid Howells #define TC_QOPT_MAX_QUEUE 16 676607ca46eSDavid Howells 6772026fecfSAlexander Duyck enum { 6782026fecfSAlexander Duyck TC_MQPRIO_HW_OFFLOAD_NONE, /* no offload requested */ 6792026fecfSAlexander Duyck TC_MQPRIO_HW_OFFLOAD_TCS, /* offload TCs, no queue counts */ 6802026fecfSAlexander Duyck __TC_MQPRIO_HW_OFFLOAD_MAX 6812026fecfSAlexander Duyck }; 6822026fecfSAlexander Duyck 6832026fecfSAlexander Duyck #define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1) 6842026fecfSAlexander Duyck 6854e8b86c0SAmritha Nambiar enum { 6864e8b86c0SAmritha Nambiar TC_MQPRIO_MODE_DCB, 6874e8b86c0SAmritha Nambiar TC_MQPRIO_MODE_CHANNEL, 6884e8b86c0SAmritha Nambiar __TC_MQPRIO_MODE_MAX 6894e8b86c0SAmritha Nambiar }; 6904e8b86c0SAmritha Nambiar 6914e8b86c0SAmritha Nambiar #define __TC_MQPRIO_MODE_MAX (__TC_MQPRIO_MODE_MAX - 1) 6924e8b86c0SAmritha Nambiar 6934e8b86c0SAmritha Nambiar enum { 6944e8b86c0SAmritha Nambiar TC_MQPRIO_SHAPER_DCB, 6954e8b86c0SAmritha Nambiar TC_MQPRIO_SHAPER_BW_RATE, /* Add new shapers below */ 6964e8b86c0SAmritha Nambiar __TC_MQPRIO_SHAPER_MAX 6974e8b86c0SAmritha Nambiar }; 6984e8b86c0SAmritha Nambiar 6994e8b86c0SAmritha Nambiar #define __TC_MQPRIO_SHAPER_MAX (__TC_MQPRIO_SHAPER_MAX - 1) 7004e8b86c0SAmritha Nambiar 701607ca46eSDavid Howells struct tc_mqprio_qopt { 702607ca46eSDavid Howells __u8 num_tc; 703607ca46eSDavid Howells __u8 prio_tc_map[TC_QOPT_BITMASK + 1]; 704607ca46eSDavid Howells __u8 hw; 705607ca46eSDavid Howells __u16 count[TC_QOPT_MAX_QUEUE]; 706607ca46eSDavid Howells __u16 offset[TC_QOPT_MAX_QUEUE]; 707607ca46eSDavid Howells }; 708607ca46eSDavid Howells 7094e8b86c0SAmritha Nambiar #define TC_MQPRIO_F_MODE 0x1 7104e8b86c0SAmritha Nambiar #define TC_MQPRIO_F_SHAPER 0x2 7114e8b86c0SAmritha Nambiar #define TC_MQPRIO_F_MIN_RATE 0x4 7124e8b86c0SAmritha Nambiar #define TC_MQPRIO_F_MAX_RATE 0x8 7134e8b86c0SAmritha Nambiar 7144e8b86c0SAmritha Nambiar enum { 7154e8b86c0SAmritha Nambiar TCA_MQPRIO_UNSPEC, 7164e8b86c0SAmritha Nambiar TCA_MQPRIO_MODE, 7174e8b86c0SAmritha Nambiar TCA_MQPRIO_SHAPER, 7184e8b86c0SAmritha Nambiar TCA_MQPRIO_MIN_RATE64, 7194e8b86c0SAmritha Nambiar TCA_MQPRIO_MAX_RATE64, 7204e8b86c0SAmritha Nambiar __TCA_MQPRIO_MAX, 7214e8b86c0SAmritha Nambiar }; 7224e8b86c0SAmritha Nambiar 7234e8b86c0SAmritha Nambiar #define TCA_MQPRIO_MAX (__TCA_MQPRIO_MAX - 1) 7244e8b86c0SAmritha Nambiar 725607ca46eSDavid Howells /* SFB */ 726607ca46eSDavid Howells 727607ca46eSDavid Howells enum { 728607ca46eSDavid Howells TCA_SFB_UNSPEC, 729607ca46eSDavid Howells TCA_SFB_PARMS, 730607ca46eSDavid Howells __TCA_SFB_MAX, 731607ca46eSDavid Howells }; 732607ca46eSDavid Howells 733607ca46eSDavid Howells #define TCA_SFB_MAX (__TCA_SFB_MAX - 1) 734607ca46eSDavid Howells 735607ca46eSDavid Howells /* 736607ca46eSDavid Howells * Note: increment, decrement are Q0.16 fixed-point values. 737607ca46eSDavid Howells */ 738607ca46eSDavid Howells struct tc_sfb_qopt { 739607ca46eSDavid Howells __u32 rehash_interval; /* delay between hash move, in ms */ 740607ca46eSDavid Howells __u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */ 741607ca46eSDavid Howells __u32 max; /* max len of qlen_min */ 742607ca46eSDavid Howells __u32 bin_size; /* maximum queue length per bin */ 743607ca46eSDavid Howells __u32 increment; /* probability increment, (d1 in Blue) */ 744607ca46eSDavid Howells __u32 decrement; /* probability decrement, (d2 in Blue) */ 745607ca46eSDavid Howells __u32 limit; /* max SFB queue length */ 746607ca46eSDavid Howells __u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */ 747607ca46eSDavid Howells __u32 penalty_burst; 748607ca46eSDavid Howells }; 749607ca46eSDavid Howells 750607ca46eSDavid Howells struct tc_sfb_xstats { 751607ca46eSDavid Howells __u32 earlydrop; 752607ca46eSDavid Howells __u32 penaltydrop; 753607ca46eSDavid Howells __u32 bucketdrop; 754607ca46eSDavid Howells __u32 queuedrop; 755607ca46eSDavid Howells __u32 childdrop; /* drops in child qdisc */ 756607ca46eSDavid Howells __u32 marked; 757607ca46eSDavid Howells __u32 maxqlen; 758607ca46eSDavid Howells __u32 maxprob; 759607ca46eSDavid Howells __u32 avgprob; 760607ca46eSDavid Howells }; 761607ca46eSDavid Howells 762607ca46eSDavid Howells #define SFB_MAX_PROB 0xFFFF 763607ca46eSDavid Howells 764607ca46eSDavid Howells /* QFQ */ 765607ca46eSDavid Howells enum { 766607ca46eSDavid Howells TCA_QFQ_UNSPEC, 767607ca46eSDavid Howells TCA_QFQ_WEIGHT, 768607ca46eSDavid Howells TCA_QFQ_LMAX, 769607ca46eSDavid Howells __TCA_QFQ_MAX 770607ca46eSDavid Howells }; 771607ca46eSDavid Howells 772607ca46eSDavid Howells #define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1) 773607ca46eSDavid Howells 774607ca46eSDavid Howells struct tc_qfq_stats { 775607ca46eSDavid Howells __u32 weight; 776607ca46eSDavid Howells __u32 lmax; 777607ca46eSDavid Howells }; 778607ca46eSDavid Howells 779607ca46eSDavid Howells /* CODEL */ 780607ca46eSDavid Howells 781607ca46eSDavid Howells enum { 782607ca46eSDavid Howells TCA_CODEL_UNSPEC, 783607ca46eSDavid Howells TCA_CODEL_TARGET, 784607ca46eSDavid Howells TCA_CODEL_LIMIT, 785607ca46eSDavid Howells TCA_CODEL_INTERVAL, 786607ca46eSDavid Howells TCA_CODEL_ECN, 78780ba92faSEric Dumazet TCA_CODEL_CE_THRESHOLD, 788607ca46eSDavid Howells __TCA_CODEL_MAX 789607ca46eSDavid Howells }; 790607ca46eSDavid Howells 791607ca46eSDavid Howells #define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1) 792607ca46eSDavid Howells 793607ca46eSDavid Howells struct tc_codel_xstats { 794607ca46eSDavid Howells __u32 maxpacket; /* largest packet we've seen so far */ 795607ca46eSDavid Howells __u32 count; /* how many drops we've done since the last time we 796607ca46eSDavid Howells * entered dropping state 797607ca46eSDavid Howells */ 798607ca46eSDavid Howells __u32 lastcount; /* count at entry to dropping state */ 799607ca46eSDavid Howells __u32 ldelay; /* in-queue delay seen by most recently dequeued packet */ 800607ca46eSDavid Howells __s32 drop_next; /* time to drop next packet */ 801607ca46eSDavid Howells __u32 drop_overlimit; /* number of time max qdisc packet limit was hit */ 802607ca46eSDavid Howells __u32 ecn_mark; /* number of packets we ECN marked instead of dropped */ 803607ca46eSDavid Howells __u32 dropping; /* are we in dropping state ? */ 80480ba92faSEric Dumazet __u32 ce_mark; /* number of CE marked packets because of ce_threshold */ 805607ca46eSDavid Howells }; 806607ca46eSDavid Howells 807607ca46eSDavid Howells /* FQ_CODEL */ 808607ca46eSDavid Howells 809607ca46eSDavid Howells enum { 810607ca46eSDavid Howells TCA_FQ_CODEL_UNSPEC, 811607ca46eSDavid Howells TCA_FQ_CODEL_TARGET, 812607ca46eSDavid Howells TCA_FQ_CODEL_LIMIT, 813607ca46eSDavid Howells TCA_FQ_CODEL_INTERVAL, 814607ca46eSDavid Howells TCA_FQ_CODEL_ECN, 815607ca46eSDavid Howells TCA_FQ_CODEL_FLOWS, 816607ca46eSDavid Howells TCA_FQ_CODEL_QUANTUM, 81780ba92faSEric Dumazet TCA_FQ_CODEL_CE_THRESHOLD, 8189d18562aSEric Dumazet TCA_FQ_CODEL_DROP_BATCH_SIZE, 81995b58430SEric Dumazet TCA_FQ_CODEL_MEMORY_LIMIT, 820607ca46eSDavid Howells __TCA_FQ_CODEL_MAX 821607ca46eSDavid Howells }; 822607ca46eSDavid Howells 823607ca46eSDavid Howells #define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1) 824607ca46eSDavid Howells 825607ca46eSDavid Howells enum { 826607ca46eSDavid Howells TCA_FQ_CODEL_XSTATS_QDISC, 827607ca46eSDavid Howells TCA_FQ_CODEL_XSTATS_CLASS, 828607ca46eSDavid Howells }; 829607ca46eSDavid Howells 830607ca46eSDavid Howells struct tc_fq_codel_qd_stats { 831607ca46eSDavid Howells __u32 maxpacket; /* largest packet we've seen so far */ 832607ca46eSDavid Howells __u32 drop_overlimit; /* number of time max qdisc 833607ca46eSDavid Howells * packet limit was hit 834607ca46eSDavid Howells */ 835607ca46eSDavid Howells __u32 ecn_mark; /* number of packets we ECN marked 836607ca46eSDavid Howells * instead of being dropped 837607ca46eSDavid Howells */ 838607ca46eSDavid Howells __u32 new_flow_count; /* number of time packets 839607ca46eSDavid Howells * created a 'new flow' 840607ca46eSDavid Howells */ 841607ca46eSDavid Howells __u32 new_flows_len; /* count of flows in new list */ 842607ca46eSDavid Howells __u32 old_flows_len; /* count of flows in old list */ 84380ba92faSEric Dumazet __u32 ce_mark; /* packets above ce_threshold */ 84495b58430SEric Dumazet __u32 memory_usage; /* in bytes */ 84595b58430SEric Dumazet __u32 drop_overmemory; 846607ca46eSDavid Howells }; 847607ca46eSDavid Howells 848607ca46eSDavid Howells struct tc_fq_codel_cl_stats { 849607ca46eSDavid Howells __s32 deficit; 850607ca46eSDavid Howells __u32 ldelay; /* in-queue delay seen by most recently 851607ca46eSDavid Howells * dequeued packet 852607ca46eSDavid Howells */ 853607ca46eSDavid Howells __u32 count; 854607ca46eSDavid Howells __u32 lastcount; 855607ca46eSDavid Howells __u32 dropping; 856607ca46eSDavid Howells __s32 drop_next; 857607ca46eSDavid Howells }; 858607ca46eSDavid Howells 859607ca46eSDavid Howells struct tc_fq_codel_xstats { 860607ca46eSDavid Howells __u32 type; 861607ca46eSDavid Howells union { 862607ca46eSDavid Howells struct tc_fq_codel_qd_stats qdisc_stats; 863607ca46eSDavid Howells struct tc_fq_codel_cl_stats class_stats; 864607ca46eSDavid Howells }; 865607ca46eSDavid Howells }; 866607ca46eSDavid Howells 867afe4fd06SEric Dumazet /* FQ */ 868afe4fd06SEric Dumazet 869afe4fd06SEric Dumazet enum { 870afe4fd06SEric Dumazet TCA_FQ_UNSPEC, 871afe4fd06SEric Dumazet 872afe4fd06SEric Dumazet TCA_FQ_PLIMIT, /* limit of total number of packets in queue */ 873afe4fd06SEric Dumazet 874afe4fd06SEric Dumazet TCA_FQ_FLOW_PLIMIT, /* limit of packets per flow */ 875afe4fd06SEric Dumazet 876afe4fd06SEric Dumazet TCA_FQ_QUANTUM, /* RR quantum */ 877afe4fd06SEric Dumazet 878afe4fd06SEric Dumazet TCA_FQ_INITIAL_QUANTUM, /* RR quantum for new flow */ 879afe4fd06SEric Dumazet 880afe4fd06SEric Dumazet TCA_FQ_RATE_ENABLE, /* enable/disable rate limiting */ 881afe4fd06SEric Dumazet 88265c5189aSEric Dumazet TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */ 883afe4fd06SEric Dumazet 884afe4fd06SEric Dumazet TCA_FQ_FLOW_MAX_RATE, /* per flow max rate */ 885afe4fd06SEric Dumazet 886afe4fd06SEric Dumazet TCA_FQ_BUCKETS_LOG, /* log2(number of buckets) */ 887f52ed899SEric Dumazet 888f52ed899SEric Dumazet TCA_FQ_FLOW_REFILL_DELAY, /* flow credit refill delay in usec */ 889f52ed899SEric Dumazet 89006eb395fSEric Dumazet TCA_FQ_ORPHAN_MASK, /* mask applied to orphaned skb hashes */ 89106eb395fSEric Dumazet 89277879147SEric Dumazet TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */ 89377879147SEric Dumazet 89448872c11SEric Dumazet TCA_FQ_CE_THRESHOLD, /* DCTCP-like CE-marking threshold */ 89548872c11SEric Dumazet 896afe4fd06SEric Dumazet __TCA_FQ_MAX 897afe4fd06SEric Dumazet }; 898afe4fd06SEric Dumazet 899afe4fd06SEric Dumazet #define TCA_FQ_MAX (__TCA_FQ_MAX - 1) 900afe4fd06SEric Dumazet 901afe4fd06SEric Dumazet struct tc_fq_qd_stats { 902afe4fd06SEric Dumazet __u64 gc_flows; 903afe4fd06SEric Dumazet __u64 highprio_packets; 904afe4fd06SEric Dumazet __u64 tcp_retrans; 905afe4fd06SEric Dumazet __u64 throttled; 906afe4fd06SEric Dumazet __u64 flows_plimit; 907afe4fd06SEric Dumazet __u64 pkts_too_long; 908afe4fd06SEric Dumazet __u64 allocation_errors; 909afe4fd06SEric Dumazet __s64 time_next_delayed_flow; 910afe4fd06SEric Dumazet __u32 flows; 911afe4fd06SEric Dumazet __u32 inactive_flows; 912afe4fd06SEric Dumazet __u32 throttled_flows; 913fefa569aSEric Dumazet __u32 unthrottle_latency_ns; 91448872c11SEric Dumazet __u64 ce_mark; /* packets above ce_threshold */ 915afe4fd06SEric Dumazet }; 91610239edfSTerry Lam 91710239edfSTerry Lam /* Heavy-Hitter Filter */ 91810239edfSTerry Lam 91910239edfSTerry Lam enum { 92010239edfSTerry Lam TCA_HHF_UNSPEC, 92110239edfSTerry Lam TCA_HHF_BACKLOG_LIMIT, 92210239edfSTerry Lam TCA_HHF_QUANTUM, 92310239edfSTerry Lam TCA_HHF_HH_FLOWS_LIMIT, 92410239edfSTerry Lam TCA_HHF_RESET_TIMEOUT, 92510239edfSTerry Lam TCA_HHF_ADMIT_BYTES, 92610239edfSTerry Lam TCA_HHF_EVICT_TIMEOUT, 92710239edfSTerry Lam TCA_HHF_NON_HH_WEIGHT, 92810239edfSTerry Lam __TCA_HHF_MAX 92910239edfSTerry Lam }; 93010239edfSTerry Lam 93110239edfSTerry Lam #define TCA_HHF_MAX (__TCA_HHF_MAX - 1) 93210239edfSTerry Lam 93310239edfSTerry Lam struct tc_hhf_xstats { 93410239edfSTerry Lam __u32 drop_overlimit; /* number of times max qdisc packet limit 93510239edfSTerry Lam * was hit 93610239edfSTerry Lam */ 93710239edfSTerry Lam __u32 hh_overlimit; /* number of times max heavy-hitters was hit */ 93810239edfSTerry Lam __u32 hh_tot_count; /* number of captured heavy-hitters so far */ 93910239edfSTerry Lam __u32 hh_cur_count; /* number of current heavy-hitters */ 94010239edfSTerry Lam }; 941d4b36210SVijay Subramanian 942d4b36210SVijay Subramanian /* PIE */ 943d4b36210SVijay Subramanian enum { 944d4b36210SVijay Subramanian TCA_PIE_UNSPEC, 945d4b36210SVijay Subramanian TCA_PIE_TARGET, 946d4b36210SVijay Subramanian TCA_PIE_LIMIT, 947d4b36210SVijay Subramanian TCA_PIE_TUPDATE, 948d4b36210SVijay Subramanian TCA_PIE_ALPHA, 949d4b36210SVijay Subramanian TCA_PIE_BETA, 950d4b36210SVijay Subramanian TCA_PIE_ECN, 951d4b36210SVijay Subramanian TCA_PIE_BYTEMODE, 952d4b36210SVijay Subramanian __TCA_PIE_MAX 953d4b36210SVijay Subramanian }; 954d4b36210SVijay Subramanian #define TCA_PIE_MAX (__TCA_PIE_MAX - 1) 955d4b36210SVijay Subramanian 956d4b36210SVijay Subramanian struct tc_pie_xstats { 9573f7ae5f3SMohit P. Tahiliani __u64 prob; /* current probability */ 958d4b36210SVijay Subramanian __u32 delay; /* current delay in ms */ 959d4b36210SVijay Subramanian __u32 avg_dq_rate; /* current average dq_rate in bits/pie_time */ 960d4b36210SVijay Subramanian __u32 packets_in; /* total number of packets enqueued */ 961d4b36210SVijay Subramanian __u32 dropped; /* packets dropped due to pie_action */ 962d4b36210SVijay Subramanian __u32 overlimit; /* dropped due to lack of space in queue */ 963d4b36210SVijay Subramanian __u32 maxq; /* maximum queue size */ 964d4b36210SVijay Subramanian __u32 ecn_mark; /* packets marked with ecn*/ 965d4b36210SVijay Subramanian }; 966585d763aSVinicius Costa Gomes 967585d763aSVinicius Costa Gomes /* CBS */ 968585d763aSVinicius Costa Gomes struct tc_cbs_qopt { 969585d763aSVinicius Costa Gomes __u8 offload; 970585d763aSVinicius Costa Gomes __u8 _pad[3]; 971585d763aSVinicius Costa Gomes __s32 hicredit; 972585d763aSVinicius Costa Gomes __s32 locredit; 973585d763aSVinicius Costa Gomes __s32 idleslope; 974585d763aSVinicius Costa Gomes __s32 sendslope; 975585d763aSVinicius Costa Gomes }; 976585d763aSVinicius Costa Gomes 977585d763aSVinicius Costa Gomes enum { 978585d763aSVinicius Costa Gomes TCA_CBS_UNSPEC, 979585d763aSVinicius Costa Gomes TCA_CBS_PARMS, 980585d763aSVinicius Costa Gomes __TCA_CBS_MAX, 981585d763aSVinicius Costa Gomes }; 982585d763aSVinicius Costa Gomes 983585d763aSVinicius Costa Gomes #define TCA_CBS_MAX (__TCA_CBS_MAX - 1) 984585d763aSVinicius Costa Gomes 98525db26a9SVinicius Costa Gomes 98625db26a9SVinicius Costa Gomes /* ETF */ 98725db26a9SVinicius Costa Gomes struct tc_etf_qopt { 98825db26a9SVinicius Costa Gomes __s32 delta; 98925db26a9SVinicius Costa Gomes __s32 clockid; 99025db26a9SVinicius Costa Gomes __u32 flags; 99125db26a9SVinicius Costa Gomes #define TC_ETF_DEADLINE_MODE_ON BIT(0) 99288cab771SJesus Sanchez-Palencia #define TC_ETF_OFFLOAD_ON BIT(1) 99325db26a9SVinicius Costa Gomes }; 99425db26a9SVinicius Costa Gomes 99525db26a9SVinicius Costa Gomes enum { 99625db26a9SVinicius Costa Gomes TCA_ETF_UNSPEC, 99725db26a9SVinicius Costa Gomes TCA_ETF_PARMS, 99825db26a9SVinicius Costa Gomes __TCA_ETF_MAX, 99925db26a9SVinicius Costa Gomes }; 100025db26a9SVinicius Costa Gomes 100125db26a9SVinicius Costa Gomes #define TCA_ETF_MAX (__TCA_ETF_MAX - 1) 100225db26a9SVinicius Costa Gomes 1003046f6fd5SToke Høiland-Jørgensen 1004046f6fd5SToke Høiland-Jørgensen /* CAKE */ 1005046f6fd5SToke Høiland-Jørgensen enum { 1006046f6fd5SToke Høiland-Jørgensen TCA_CAKE_UNSPEC, 1007046f6fd5SToke Høiland-Jørgensen TCA_CAKE_PAD, 1008046f6fd5SToke Høiland-Jørgensen TCA_CAKE_BASE_RATE64, 1009046f6fd5SToke Høiland-Jørgensen TCA_CAKE_DIFFSERV_MODE, 1010046f6fd5SToke Høiland-Jørgensen TCA_CAKE_ATM, 1011046f6fd5SToke Høiland-Jørgensen TCA_CAKE_FLOW_MODE, 1012046f6fd5SToke Høiland-Jørgensen TCA_CAKE_OVERHEAD, 1013046f6fd5SToke Høiland-Jørgensen TCA_CAKE_RTT, 1014046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TARGET, 1015046f6fd5SToke Høiland-Jørgensen TCA_CAKE_AUTORATE, 1016046f6fd5SToke Høiland-Jørgensen TCA_CAKE_MEMORY, 1017046f6fd5SToke Høiland-Jørgensen TCA_CAKE_NAT, 1018046f6fd5SToke Høiland-Jørgensen TCA_CAKE_RAW, 1019046f6fd5SToke Høiland-Jørgensen TCA_CAKE_WASH, 1020046f6fd5SToke Høiland-Jørgensen TCA_CAKE_MPU, 1021046f6fd5SToke Høiland-Jørgensen TCA_CAKE_INGRESS, 1022046f6fd5SToke Høiland-Jørgensen TCA_CAKE_ACK_FILTER, 1023046f6fd5SToke Høiland-Jørgensen TCA_CAKE_SPLIT_GSO, 10240b5c7efdSKevin Darbyshire-Bryant TCA_CAKE_FWMARK, 1025046f6fd5SToke Høiland-Jørgensen __TCA_CAKE_MAX 1026046f6fd5SToke Høiland-Jørgensen }; 1027046f6fd5SToke Høiland-Jørgensen #define TCA_CAKE_MAX (__TCA_CAKE_MAX - 1) 1028046f6fd5SToke Høiland-Jørgensen 1029046f6fd5SToke Høiland-Jørgensen enum { 1030046f6fd5SToke Høiland-Jørgensen __TCA_CAKE_STATS_INVALID, 1031046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_PAD, 1032046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_CAPACITY_ESTIMATE64, 1033046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_MEMORY_LIMIT, 1034046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_MEMORY_USED, 1035046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_AVG_NETOFF, 1036046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_MIN_NETLEN, 1037046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_MAX_NETLEN, 1038046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_MIN_ADJLEN, 1039046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_MAX_ADJLEN, 1040046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_TIN_STATS, 1041046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_DEFICIT, 1042046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_COBALT_COUNT, 1043046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_DROPPING, 1044046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_DROP_NEXT_US, 1045046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_P_DROP, 1046046f6fd5SToke Høiland-Jørgensen TCA_CAKE_STATS_BLUE_TIMER_US, 1047046f6fd5SToke Høiland-Jørgensen __TCA_CAKE_STATS_MAX 1048046f6fd5SToke Høiland-Jørgensen }; 1049046f6fd5SToke Høiland-Jørgensen #define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1) 1050046f6fd5SToke Høiland-Jørgensen 1051046f6fd5SToke Høiland-Jørgensen enum { 1052046f6fd5SToke Høiland-Jørgensen __TCA_CAKE_TIN_STATS_INVALID, 1053046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_PAD, 1054046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_SENT_PACKETS, 1055046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_SENT_BYTES64, 1056046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_DROPPED_PACKETS, 1057046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_DROPPED_BYTES64, 1058046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_ACKS_DROPPED_PACKETS, 1059046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_ACKS_DROPPED_BYTES64, 1060046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_ECN_MARKED_PACKETS, 1061046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_ECN_MARKED_BYTES64, 1062046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_BACKLOG_PACKETS, 1063046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_BACKLOG_BYTES, 1064046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_THRESHOLD_RATE64, 1065046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_TARGET_US, 1066046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_INTERVAL_US, 1067046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_WAY_INDIRECT_HITS, 1068046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_WAY_MISSES, 1069046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_WAY_COLLISIONS, 1070046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_PEAK_DELAY_US, 1071046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_AVG_DELAY_US, 1072046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_BASE_DELAY_US, 1073046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_SPARSE_FLOWS, 1074046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_BULK_FLOWS, 1075046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_UNRESPONSIVE_FLOWS, 1076046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_MAX_SKBLEN, 1077046f6fd5SToke Høiland-Jørgensen TCA_CAKE_TIN_STATS_FLOW_QUANTUM, 1078046f6fd5SToke Høiland-Jørgensen __TCA_CAKE_TIN_STATS_MAX 1079046f6fd5SToke Høiland-Jørgensen }; 1080046f6fd5SToke Høiland-Jørgensen #define TCA_CAKE_TIN_STATS_MAX (__TCA_CAKE_TIN_STATS_MAX - 1) 1081046f6fd5SToke Høiland-Jørgensen #define TC_CAKE_MAX_TINS (8) 1082046f6fd5SToke Høiland-Jørgensen 1083046f6fd5SToke Høiland-Jørgensen enum { 1084046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_NONE = 0, 1085046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_SRC_IP, 1086046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_DST_IP, 1087046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_HOSTS, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_DST_IP */ 1088046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_FLOWS, 1089046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_DUAL_SRC, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_FLOWS */ 1090046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_DUAL_DST, /* = CAKE_FLOW_DST_IP | CAKE_FLOW_FLOWS */ 1091046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_TRIPLE, /* = CAKE_FLOW_HOSTS | CAKE_FLOW_FLOWS */ 1092046f6fd5SToke Høiland-Jørgensen CAKE_FLOW_MAX, 1093046f6fd5SToke Høiland-Jørgensen }; 1094046f6fd5SToke Høiland-Jørgensen 1095046f6fd5SToke Høiland-Jørgensen enum { 1096046f6fd5SToke Høiland-Jørgensen CAKE_DIFFSERV_DIFFSERV3 = 0, 1097046f6fd5SToke Høiland-Jørgensen CAKE_DIFFSERV_DIFFSERV4, 1098046f6fd5SToke Høiland-Jørgensen CAKE_DIFFSERV_DIFFSERV8, 1099046f6fd5SToke Høiland-Jørgensen CAKE_DIFFSERV_BESTEFFORT, 1100046f6fd5SToke Høiland-Jørgensen CAKE_DIFFSERV_PRECEDENCE, 1101046f6fd5SToke Høiland-Jørgensen CAKE_DIFFSERV_MAX 1102046f6fd5SToke Høiland-Jørgensen }; 1103046f6fd5SToke Høiland-Jørgensen 1104046f6fd5SToke Høiland-Jørgensen enum { 1105046f6fd5SToke Høiland-Jørgensen CAKE_ACK_NONE = 0, 1106046f6fd5SToke Høiland-Jørgensen CAKE_ACK_FILTER, 1107046f6fd5SToke Høiland-Jørgensen CAKE_ACK_AGGRESSIVE, 1108046f6fd5SToke Høiland-Jørgensen CAKE_ACK_MAX 1109046f6fd5SToke Høiland-Jørgensen }; 1110046f6fd5SToke Høiland-Jørgensen 1111046f6fd5SToke Høiland-Jørgensen enum { 1112046f6fd5SToke Høiland-Jørgensen CAKE_ATM_NONE = 0, 1113046f6fd5SToke Høiland-Jørgensen CAKE_ATM_ATM, 1114046f6fd5SToke Høiland-Jørgensen CAKE_ATM_PTM, 1115046f6fd5SToke Høiland-Jørgensen CAKE_ATM_MAX 1116046f6fd5SToke Høiland-Jørgensen }; 1117046f6fd5SToke Høiland-Jørgensen 11185a781ccbSVinicius Costa Gomes 11195a781ccbSVinicius Costa Gomes /* TAPRIO */ 11205a781ccbSVinicius Costa Gomes enum { 11215a781ccbSVinicius Costa Gomes TC_TAPRIO_CMD_SET_GATES = 0x00, 11225a781ccbSVinicius Costa Gomes TC_TAPRIO_CMD_SET_AND_HOLD = 0x01, 11235a781ccbSVinicius Costa Gomes TC_TAPRIO_CMD_SET_AND_RELEASE = 0x02, 11245a781ccbSVinicius Costa Gomes }; 11255a781ccbSVinicius Costa Gomes 11265a781ccbSVinicius Costa Gomes enum { 11275a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_ENTRY_UNSPEC, 11285a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_ENTRY_INDEX, /* u32 */ 11295a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_ENTRY_CMD, /* u8 */ 11305a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_ENTRY_GATE_MASK, /* u32 */ 11315a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_ENTRY_INTERVAL, /* u32 */ 11325a781ccbSVinicius Costa Gomes __TCA_TAPRIO_SCHED_ENTRY_MAX, 11335a781ccbSVinicius Costa Gomes }; 11345a781ccbSVinicius Costa Gomes #define TCA_TAPRIO_SCHED_ENTRY_MAX (__TCA_TAPRIO_SCHED_ENTRY_MAX - 1) 11355a781ccbSVinicius Costa Gomes 11365a781ccbSVinicius Costa Gomes /* The format for schedule entry list is: 11375a781ccbSVinicius Costa Gomes * [TCA_TAPRIO_SCHED_ENTRY_LIST] 11385a781ccbSVinicius Costa Gomes * [TCA_TAPRIO_SCHED_ENTRY] 11395a781ccbSVinicius Costa Gomes * [TCA_TAPRIO_SCHED_ENTRY_CMD] 11405a781ccbSVinicius Costa Gomes * [TCA_TAPRIO_SCHED_ENTRY_GATES] 11415a781ccbSVinicius Costa Gomes * [TCA_TAPRIO_SCHED_ENTRY_INTERVAL] 11425a781ccbSVinicius Costa Gomes */ 11435a781ccbSVinicius Costa Gomes enum { 11445a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_UNSPEC, 11455a781ccbSVinicius Costa Gomes TCA_TAPRIO_SCHED_ENTRY, 11465a781ccbSVinicius Costa Gomes __TCA_TAPRIO_SCHED_MAX, 11475a781ccbSVinicius Costa Gomes }; 11485a781ccbSVinicius Costa Gomes 11495a781ccbSVinicius Costa Gomes #define TCA_TAPRIO_SCHED_MAX (__TCA_TAPRIO_SCHED_MAX - 1) 11505a781ccbSVinicius Costa Gomes 1151a3d43c0dSVinicius Costa Gomes /* The format for the admin sched (dump only): 1152a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_SCHED_ADMIN_SCHED] 1153a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_ATTR_SCHED_BASE_TIME] 1154a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST] 1155a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_ATTR_SCHED_ENTRY] 1156a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_ATTR_SCHED_ENTRY_CMD] 1157a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_ATTR_SCHED_ENTRY_GATES] 1158a3d43c0dSVinicius Costa Gomes * [TCA_TAPRIO_ATTR_SCHED_ENTRY_INTERVAL] 1159a3d43c0dSVinicius Costa Gomes */ 1160a3d43c0dSVinicius Costa Gomes 11615a781ccbSVinicius Costa Gomes enum { 11625a781ccbSVinicius Costa Gomes TCA_TAPRIO_ATTR_UNSPEC, 11635a781ccbSVinicius Costa Gomes TCA_TAPRIO_ATTR_PRIOMAP, /* struct tc_mqprio_qopt */ 11645a781ccbSVinicius Costa Gomes TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST, /* nested of entry */ 11655a781ccbSVinicius Costa Gomes TCA_TAPRIO_ATTR_SCHED_BASE_TIME, /* s64 */ 11665a781ccbSVinicius Costa Gomes TCA_TAPRIO_ATTR_SCHED_SINGLE_ENTRY, /* single entry */ 11675a781ccbSVinicius Costa Gomes TCA_TAPRIO_ATTR_SCHED_CLOCKID, /* s32 */ 11685a781ccbSVinicius Costa Gomes TCA_TAPRIO_PAD, 1169a3d43c0dSVinicius Costa Gomes TCA_TAPRIO_ATTR_ADMIN_SCHED, /* The admin sched, only used in dump */ 1170*6ca6a665SVinicius Costa Gomes TCA_TAPRIO_ATTR_SCHED_CYCLE_TIME, /* s64 */ 11715a781ccbSVinicius Costa Gomes __TCA_TAPRIO_ATTR_MAX, 11725a781ccbSVinicius Costa Gomes }; 11735a781ccbSVinicius Costa Gomes 11745a781ccbSVinicius Costa Gomes #define TCA_TAPRIO_ATTR_MAX (__TCA_TAPRIO_ATTR_MAX - 1) 11755a781ccbSVinicius Costa Gomes 1176607ca46eSDavid Howells #endif 1177