17c2aad20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 27c2aad20Sopenharmony_ci#ifndef __LINUX_PKT_SCHED_H 37c2aad20Sopenharmony_ci#define __LINUX_PKT_SCHED_H 47c2aad20Sopenharmony_ci 57c2aad20Sopenharmony_ci#include <linux/types.h> 67c2aad20Sopenharmony_ci 77c2aad20Sopenharmony_ci/* Logical priority bands not depending on specific packet scheduler. 87c2aad20Sopenharmony_ci Every scheduler will map them to real traffic classes, if it has 97c2aad20Sopenharmony_ci no more precise mechanism to classify packets. 107c2aad20Sopenharmony_ci 117c2aad20Sopenharmony_ci These numbers have no special meaning, though their coincidence 127c2aad20Sopenharmony_ci with obsolete IPv6 values is not occasional :-). New IPv6 drafts 137c2aad20Sopenharmony_ci preferred full anarchy inspired by diffserv group. 147c2aad20Sopenharmony_ci 157c2aad20Sopenharmony_ci Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy 167c2aad20Sopenharmony_ci class, actually, as rule it will be handled with more care than 177c2aad20Sopenharmony_ci filler or even bulk. 187c2aad20Sopenharmony_ci */ 197c2aad20Sopenharmony_ci 207c2aad20Sopenharmony_ci#define TC_PRIO_BESTEFFORT 0 217c2aad20Sopenharmony_ci#define TC_PRIO_FILLER 1 227c2aad20Sopenharmony_ci#define TC_PRIO_BULK 2 237c2aad20Sopenharmony_ci#define TC_PRIO_INTERACTIVE_BULK 4 247c2aad20Sopenharmony_ci#define TC_PRIO_INTERACTIVE 6 257c2aad20Sopenharmony_ci#define TC_PRIO_CONTROL 7 267c2aad20Sopenharmony_ci 277c2aad20Sopenharmony_ci#define TC_PRIO_MAX 15 287c2aad20Sopenharmony_ci 297c2aad20Sopenharmony_ci/* Generic queue statistics, available for all the elements. 307c2aad20Sopenharmony_ci Particular schedulers may have also their private records. 317c2aad20Sopenharmony_ci */ 327c2aad20Sopenharmony_ci 337c2aad20Sopenharmony_cistruct tc_stats { 347c2aad20Sopenharmony_ci __u64 bytes; /* Number of enqueued bytes */ 357c2aad20Sopenharmony_ci __u32 packets; /* Number of enqueued packets */ 367c2aad20Sopenharmony_ci __u32 drops; /* Packets dropped because of lack of resources */ 377c2aad20Sopenharmony_ci __u32 overlimits; /* Number of throttle events when this 387c2aad20Sopenharmony_ci * flow goes out of allocated bandwidth */ 397c2aad20Sopenharmony_ci __u32 bps; /* Current flow byte rate */ 407c2aad20Sopenharmony_ci __u32 pps; /* Current flow packet rate */ 417c2aad20Sopenharmony_ci __u32 qlen; 427c2aad20Sopenharmony_ci __u32 backlog; 437c2aad20Sopenharmony_ci}; 447c2aad20Sopenharmony_ci 457c2aad20Sopenharmony_cistruct tc_estimator { 467c2aad20Sopenharmony_ci signed char interval; 477c2aad20Sopenharmony_ci unsigned char ewma_log; 487c2aad20Sopenharmony_ci}; 497c2aad20Sopenharmony_ci 507c2aad20Sopenharmony_ci/* "Handles" 517c2aad20Sopenharmony_ci --------- 527c2aad20Sopenharmony_ci 537c2aad20Sopenharmony_ci All the traffic control objects have 32bit identifiers, or "handles". 547c2aad20Sopenharmony_ci 557c2aad20Sopenharmony_ci They can be considered as opaque numbers from user API viewpoint, 567c2aad20Sopenharmony_ci but actually they always consist of two fields: major and 577c2aad20Sopenharmony_ci minor numbers, which are interpreted by kernel specially, 587c2aad20Sopenharmony_ci that may be used by applications, though not recommended. 597c2aad20Sopenharmony_ci 607c2aad20Sopenharmony_ci F.e. qdisc handles always have minor number equal to zero, 617c2aad20Sopenharmony_ci classes (or flows) have major equal to parent qdisc major, and 627c2aad20Sopenharmony_ci minor uniquely identifying class inside qdisc. 637c2aad20Sopenharmony_ci 647c2aad20Sopenharmony_ci Macros to manipulate handles: 657c2aad20Sopenharmony_ci */ 667c2aad20Sopenharmony_ci 677c2aad20Sopenharmony_ci#define TC_H_MAJ_MASK (0xFFFF0000U) 687c2aad20Sopenharmony_ci#define TC_H_MIN_MASK (0x0000FFFFU) 697c2aad20Sopenharmony_ci#define TC_H_MAJ(h) ((h)&TC_H_MAJ_MASK) 707c2aad20Sopenharmony_ci#define TC_H_MIN(h) ((h)&TC_H_MIN_MASK) 717c2aad20Sopenharmony_ci#define TC_H_MAKE(maj,min) (((maj)&TC_H_MAJ_MASK)|((min)&TC_H_MIN_MASK)) 727c2aad20Sopenharmony_ci 737c2aad20Sopenharmony_ci#define TC_H_UNSPEC (0U) 747c2aad20Sopenharmony_ci#define TC_H_ROOT (0xFFFFFFFFU) 757c2aad20Sopenharmony_ci#define TC_H_INGRESS (0xFFFFFFF1U) 767c2aad20Sopenharmony_ci#define TC_H_CLSACT TC_H_INGRESS 777c2aad20Sopenharmony_ci 787c2aad20Sopenharmony_ci#define TC_H_MIN_PRIORITY 0xFFE0U 797c2aad20Sopenharmony_ci#define TC_H_MIN_INGRESS 0xFFF2U 807c2aad20Sopenharmony_ci#define TC_H_MIN_EGRESS 0xFFF3U 817c2aad20Sopenharmony_ci 827c2aad20Sopenharmony_ci/* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */ 837c2aad20Sopenharmony_cienum tc_link_layer { 847c2aad20Sopenharmony_ci TC_LINKLAYER_UNAWARE, /* Indicate unaware old iproute2 util */ 857c2aad20Sopenharmony_ci TC_LINKLAYER_ETHERNET, 867c2aad20Sopenharmony_ci TC_LINKLAYER_ATM, 877c2aad20Sopenharmony_ci}; 887c2aad20Sopenharmony_ci#define TC_LINKLAYER_MASK 0x0F /* limit use to lower 4 bits */ 897c2aad20Sopenharmony_ci 907c2aad20Sopenharmony_cistruct tc_ratespec { 917c2aad20Sopenharmony_ci unsigned char cell_log; 927c2aad20Sopenharmony_ci __u8 linklayer; /* lower 4 bits */ 937c2aad20Sopenharmony_ci unsigned short overhead; 947c2aad20Sopenharmony_ci short cell_align; 957c2aad20Sopenharmony_ci unsigned short mpu; 967c2aad20Sopenharmony_ci __u32 rate; 977c2aad20Sopenharmony_ci}; 987c2aad20Sopenharmony_ci 997c2aad20Sopenharmony_ci#define TC_RTAB_SIZE 1024 1007c2aad20Sopenharmony_ci 1017c2aad20Sopenharmony_cistruct tc_sizespec { 1027c2aad20Sopenharmony_ci unsigned char cell_log; 1037c2aad20Sopenharmony_ci unsigned char size_log; 1047c2aad20Sopenharmony_ci short cell_align; 1057c2aad20Sopenharmony_ci int overhead; 1067c2aad20Sopenharmony_ci unsigned int linklayer; 1077c2aad20Sopenharmony_ci unsigned int mpu; 1087c2aad20Sopenharmony_ci unsigned int mtu; 1097c2aad20Sopenharmony_ci unsigned int tsize; 1107c2aad20Sopenharmony_ci}; 1117c2aad20Sopenharmony_ci 1127c2aad20Sopenharmony_cienum { 1137c2aad20Sopenharmony_ci TCA_STAB_UNSPEC, 1147c2aad20Sopenharmony_ci TCA_STAB_BASE, 1157c2aad20Sopenharmony_ci TCA_STAB_DATA, 1167c2aad20Sopenharmony_ci __TCA_STAB_MAX 1177c2aad20Sopenharmony_ci}; 1187c2aad20Sopenharmony_ci 1197c2aad20Sopenharmony_ci#define TCA_STAB_MAX (__TCA_STAB_MAX - 1) 1207c2aad20Sopenharmony_ci 1217c2aad20Sopenharmony_ci/* FIFO section */ 1227c2aad20Sopenharmony_ci 1237c2aad20Sopenharmony_cistruct tc_fifo_qopt { 1247c2aad20Sopenharmony_ci __u32 limit; /* Queue length: bytes for bfifo, packets for pfifo */ 1257c2aad20Sopenharmony_ci}; 1267c2aad20Sopenharmony_ci 1277c2aad20Sopenharmony_ci/* SKBPRIO section */ 1287c2aad20Sopenharmony_ci 1297c2aad20Sopenharmony_ci/* 1307c2aad20Sopenharmony_ci * Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1). 1317c2aad20Sopenharmony_ci * SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able 1327c2aad20Sopenharmony_ci * to map one to one the DS field of IPV4 and IPV6 headers. 1337c2aad20Sopenharmony_ci * Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY. 1347c2aad20Sopenharmony_ci */ 1357c2aad20Sopenharmony_ci 1367c2aad20Sopenharmony_ci#define SKBPRIO_MAX_PRIORITY 64 1377c2aad20Sopenharmony_ci 1387c2aad20Sopenharmony_cistruct tc_skbprio_qopt { 1397c2aad20Sopenharmony_ci __u32 limit; /* Queue length in packets. */ 1407c2aad20Sopenharmony_ci}; 1417c2aad20Sopenharmony_ci 1427c2aad20Sopenharmony_ci/* PRIO section */ 1437c2aad20Sopenharmony_ci 1447c2aad20Sopenharmony_ci#define TCQ_PRIO_BANDS 16 1457c2aad20Sopenharmony_ci#define TCQ_MIN_PRIO_BANDS 2 1467c2aad20Sopenharmony_ci 1477c2aad20Sopenharmony_cistruct tc_prio_qopt { 1487c2aad20Sopenharmony_ci int bands; /* Number of bands */ 1497c2aad20Sopenharmony_ci __u8 priomap[TC_PRIO_MAX+1]; /* Map: logical priority -> PRIO band */ 1507c2aad20Sopenharmony_ci}; 1517c2aad20Sopenharmony_ci 1527c2aad20Sopenharmony_ci/* MULTIQ section */ 1537c2aad20Sopenharmony_ci 1547c2aad20Sopenharmony_cistruct tc_multiq_qopt { 1557c2aad20Sopenharmony_ci __u16 bands; /* Number of bands */ 1567c2aad20Sopenharmony_ci __u16 max_bands; /* Maximum number of queues */ 1577c2aad20Sopenharmony_ci}; 1587c2aad20Sopenharmony_ci 1597c2aad20Sopenharmony_ci/* PLUG section */ 1607c2aad20Sopenharmony_ci 1617c2aad20Sopenharmony_ci#define TCQ_PLUG_BUFFER 0 1627c2aad20Sopenharmony_ci#define TCQ_PLUG_RELEASE_ONE 1 1637c2aad20Sopenharmony_ci#define TCQ_PLUG_RELEASE_INDEFINITE 2 1647c2aad20Sopenharmony_ci#define TCQ_PLUG_LIMIT 3 1657c2aad20Sopenharmony_ci 1667c2aad20Sopenharmony_cistruct tc_plug_qopt { 1677c2aad20Sopenharmony_ci /* TCQ_PLUG_BUFFER: Inset a plug into the queue and 1687c2aad20Sopenharmony_ci * buffer any incoming packets 1697c2aad20Sopenharmony_ci * TCQ_PLUG_RELEASE_ONE: Dequeue packets from queue head 1707c2aad20Sopenharmony_ci * to beginning of the next plug. 1717c2aad20Sopenharmony_ci * TCQ_PLUG_RELEASE_INDEFINITE: Dequeue all packets from queue. 1727c2aad20Sopenharmony_ci * Stop buffering packets until the next TCQ_PLUG_BUFFER 1737c2aad20Sopenharmony_ci * command is received (just act as a pass-thru queue). 1747c2aad20Sopenharmony_ci * TCQ_PLUG_LIMIT: Increase/decrease queue size 1757c2aad20Sopenharmony_ci */ 1767c2aad20Sopenharmony_ci int action; 1777c2aad20Sopenharmony_ci __u32 limit; 1787c2aad20Sopenharmony_ci}; 1797c2aad20Sopenharmony_ci 1807c2aad20Sopenharmony_ci/* TBF section */ 1817c2aad20Sopenharmony_ci 1827c2aad20Sopenharmony_cistruct tc_tbf_qopt { 1837c2aad20Sopenharmony_ci struct tc_ratespec rate; 1847c2aad20Sopenharmony_ci struct tc_ratespec peakrate; 1857c2aad20Sopenharmony_ci __u32 limit; 1867c2aad20Sopenharmony_ci __u32 buffer; 1877c2aad20Sopenharmony_ci __u32 mtu; 1887c2aad20Sopenharmony_ci}; 1897c2aad20Sopenharmony_ci 1907c2aad20Sopenharmony_cienum { 1917c2aad20Sopenharmony_ci TCA_TBF_UNSPEC, 1927c2aad20Sopenharmony_ci TCA_TBF_PARMS, 1937c2aad20Sopenharmony_ci TCA_TBF_RTAB, 1947c2aad20Sopenharmony_ci TCA_TBF_PTAB, 1957c2aad20Sopenharmony_ci TCA_TBF_RATE64, 1967c2aad20Sopenharmony_ci TCA_TBF_PRATE64, 1977c2aad20Sopenharmony_ci TCA_TBF_BURST, 1987c2aad20Sopenharmony_ci TCA_TBF_PBURST, 1997c2aad20Sopenharmony_ci TCA_TBF_PAD, 2007c2aad20Sopenharmony_ci __TCA_TBF_MAX, 2017c2aad20Sopenharmony_ci}; 2027c2aad20Sopenharmony_ci 2037c2aad20Sopenharmony_ci#define TCA_TBF_MAX (__TCA_TBF_MAX - 1) 2047c2aad20Sopenharmony_ci 2057c2aad20Sopenharmony_ci 2067c2aad20Sopenharmony_ci/* TEQL section */ 2077c2aad20Sopenharmony_ci 2087c2aad20Sopenharmony_ci/* TEQL does not require any parameters */ 2097c2aad20Sopenharmony_ci 2107c2aad20Sopenharmony_ci/* SFQ section */ 2117c2aad20Sopenharmony_ci 2127c2aad20Sopenharmony_cistruct tc_sfq_qopt { 2137c2aad20Sopenharmony_ci unsigned quantum; /* Bytes per round allocated to flow */ 2147c2aad20Sopenharmony_ci int perturb_period; /* Period of hash perturbation */ 2157c2aad20Sopenharmony_ci __u32 limit; /* Maximal packets in queue */ 2167c2aad20Sopenharmony_ci unsigned divisor; /* Hash divisor */ 2177c2aad20Sopenharmony_ci unsigned flows; /* Maximal number of flows */ 2187c2aad20Sopenharmony_ci}; 2197c2aad20Sopenharmony_ci 2207c2aad20Sopenharmony_cistruct tc_sfqred_stats { 2217c2aad20Sopenharmony_ci __u32 prob_drop; /* Early drops, below max threshold */ 2227c2aad20Sopenharmony_ci __u32 forced_drop; /* Early drops, after max threshold */ 2237c2aad20Sopenharmony_ci __u32 prob_mark; /* Marked packets, below max threshold */ 2247c2aad20Sopenharmony_ci __u32 forced_mark; /* Marked packets, after max threshold */ 2257c2aad20Sopenharmony_ci __u32 prob_mark_head; /* Marked packets, below max threshold */ 2267c2aad20Sopenharmony_ci __u32 forced_mark_head;/* Marked packets, after max threshold */ 2277c2aad20Sopenharmony_ci}; 2287c2aad20Sopenharmony_ci 2297c2aad20Sopenharmony_cistruct tc_sfq_qopt_v1 { 2307c2aad20Sopenharmony_ci struct tc_sfq_qopt v0; 2317c2aad20Sopenharmony_ci unsigned int depth; /* max number of packets per flow */ 2327c2aad20Sopenharmony_ci unsigned int headdrop; 2337c2aad20Sopenharmony_ci/* SFQRED parameters */ 2347c2aad20Sopenharmony_ci __u32 limit; /* HARD maximal flow queue length (bytes) */ 2357c2aad20Sopenharmony_ci __u32 qth_min; /* Min average length threshold (bytes) */ 2367c2aad20Sopenharmony_ci __u32 qth_max; /* Max average length threshold (bytes) */ 2377c2aad20Sopenharmony_ci unsigned char Wlog; /* log(W) */ 2387c2aad20Sopenharmony_ci unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 2397c2aad20Sopenharmony_ci unsigned char Scell_log; /* cell size for idle damping */ 2407c2aad20Sopenharmony_ci unsigned char flags; 2417c2aad20Sopenharmony_ci __u32 max_P; /* probability, high resolution */ 2427c2aad20Sopenharmony_ci/* SFQRED stats */ 2437c2aad20Sopenharmony_ci struct tc_sfqred_stats stats; 2447c2aad20Sopenharmony_ci}; 2457c2aad20Sopenharmony_ci 2467c2aad20Sopenharmony_ci 2477c2aad20Sopenharmony_cistruct tc_sfq_xstats { 2487c2aad20Sopenharmony_ci __s32 allot; 2497c2aad20Sopenharmony_ci}; 2507c2aad20Sopenharmony_ci 2517c2aad20Sopenharmony_ci/* RED section */ 2527c2aad20Sopenharmony_ci 2537c2aad20Sopenharmony_cienum { 2547c2aad20Sopenharmony_ci TCA_RED_UNSPEC, 2557c2aad20Sopenharmony_ci TCA_RED_PARMS, 2567c2aad20Sopenharmony_ci TCA_RED_STAB, 2577c2aad20Sopenharmony_ci TCA_RED_MAX_P, 2587c2aad20Sopenharmony_ci __TCA_RED_MAX, 2597c2aad20Sopenharmony_ci}; 2607c2aad20Sopenharmony_ci 2617c2aad20Sopenharmony_ci#define TCA_RED_MAX (__TCA_RED_MAX - 1) 2627c2aad20Sopenharmony_ci 2637c2aad20Sopenharmony_cistruct tc_red_qopt { 2647c2aad20Sopenharmony_ci __u32 limit; /* HARD maximal queue length (bytes) */ 2657c2aad20Sopenharmony_ci __u32 qth_min; /* Min average length threshold (bytes) */ 2667c2aad20Sopenharmony_ci __u32 qth_max; /* Max average length threshold (bytes) */ 2677c2aad20Sopenharmony_ci unsigned char Wlog; /* log(W) */ 2687c2aad20Sopenharmony_ci unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 2697c2aad20Sopenharmony_ci unsigned char Scell_log; /* cell size for idle damping */ 2707c2aad20Sopenharmony_ci unsigned char flags; 2717c2aad20Sopenharmony_ci#define TC_RED_ECN 1 2727c2aad20Sopenharmony_ci#define TC_RED_HARDDROP 2 2737c2aad20Sopenharmony_ci#define TC_RED_ADAPTATIVE 4 2747c2aad20Sopenharmony_ci}; 2757c2aad20Sopenharmony_ci 2767c2aad20Sopenharmony_cistruct tc_red_xstats { 2777c2aad20Sopenharmony_ci __u32 early; /* Early drops */ 2787c2aad20Sopenharmony_ci __u32 pdrop; /* Drops due to queue limits */ 2797c2aad20Sopenharmony_ci __u32 other; /* Drops due to drop() calls */ 2807c2aad20Sopenharmony_ci __u32 marked; /* Marked packets */ 2817c2aad20Sopenharmony_ci}; 2827c2aad20Sopenharmony_ci 2837c2aad20Sopenharmony_ci/* GRED section */ 2847c2aad20Sopenharmony_ci 2857c2aad20Sopenharmony_ci#define MAX_DPs 16 2867c2aad20Sopenharmony_ci 2877c2aad20Sopenharmony_cienum { 2887c2aad20Sopenharmony_ci TCA_GRED_UNSPEC, 2897c2aad20Sopenharmony_ci TCA_GRED_PARMS, 2907c2aad20Sopenharmony_ci TCA_GRED_STAB, 2917c2aad20Sopenharmony_ci TCA_GRED_DPS, 2927c2aad20Sopenharmony_ci TCA_GRED_MAX_P, 2937c2aad20Sopenharmony_ci TCA_GRED_LIMIT, 2947c2aad20Sopenharmony_ci TCA_GRED_VQ_LIST, /* nested TCA_GRED_VQ_ENTRY */ 2957c2aad20Sopenharmony_ci __TCA_GRED_MAX, 2967c2aad20Sopenharmony_ci}; 2977c2aad20Sopenharmony_ci 2987c2aad20Sopenharmony_ci#define TCA_GRED_MAX (__TCA_GRED_MAX - 1) 2997c2aad20Sopenharmony_ci 3007c2aad20Sopenharmony_cienum { 3017c2aad20Sopenharmony_ci TCA_GRED_VQ_ENTRY_UNSPEC, 3027c2aad20Sopenharmony_ci TCA_GRED_VQ_ENTRY, /* nested TCA_GRED_VQ_* */ 3037c2aad20Sopenharmony_ci __TCA_GRED_VQ_ENTRY_MAX, 3047c2aad20Sopenharmony_ci}; 3057c2aad20Sopenharmony_ci#define TCA_GRED_VQ_ENTRY_MAX (__TCA_GRED_VQ_ENTRY_MAX - 1) 3067c2aad20Sopenharmony_ci 3077c2aad20Sopenharmony_cienum { 3087c2aad20Sopenharmony_ci TCA_GRED_VQ_UNSPEC, 3097c2aad20Sopenharmony_ci TCA_GRED_VQ_PAD, 3107c2aad20Sopenharmony_ci TCA_GRED_VQ_DP, /* u32 */ 3117c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_BYTES, /* u64 */ 3127c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_PACKETS, /* u32 */ 3137c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_BACKLOG, /* u32 */ 3147c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_PROB_DROP, /* u32 */ 3157c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_PROB_MARK, /* u32 */ 3167c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_FORCED_DROP, /* u32 */ 3177c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_FORCED_MARK, /* u32 */ 3187c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_PDROP, /* u32 */ 3197c2aad20Sopenharmony_ci TCA_GRED_VQ_STAT_OTHER, /* u32 */ 3207c2aad20Sopenharmony_ci TCA_GRED_VQ_FLAGS, /* u32 */ 3217c2aad20Sopenharmony_ci __TCA_GRED_VQ_MAX 3227c2aad20Sopenharmony_ci}; 3237c2aad20Sopenharmony_ci 3247c2aad20Sopenharmony_ci#define TCA_GRED_VQ_MAX (__TCA_GRED_VQ_MAX - 1) 3257c2aad20Sopenharmony_ci 3267c2aad20Sopenharmony_cistruct tc_gred_qopt { 3277c2aad20Sopenharmony_ci __u32 limit; /* HARD maximal queue length (bytes) */ 3287c2aad20Sopenharmony_ci __u32 qth_min; /* Min average length threshold (bytes) */ 3297c2aad20Sopenharmony_ci __u32 qth_max; /* Max average length threshold (bytes) */ 3307c2aad20Sopenharmony_ci __u32 DP; /* up to 2^32 DPs */ 3317c2aad20Sopenharmony_ci __u32 backlog; 3327c2aad20Sopenharmony_ci __u32 qave; 3337c2aad20Sopenharmony_ci __u32 forced; 3347c2aad20Sopenharmony_ci __u32 early; 3357c2aad20Sopenharmony_ci __u32 other; 3367c2aad20Sopenharmony_ci __u32 pdrop; 3377c2aad20Sopenharmony_ci __u8 Wlog; /* log(W) */ 3387c2aad20Sopenharmony_ci __u8 Plog; /* log(P_max/(qth_max-qth_min)) */ 3397c2aad20Sopenharmony_ci __u8 Scell_log; /* cell size for idle damping */ 3407c2aad20Sopenharmony_ci __u8 prio; /* prio of this VQ */ 3417c2aad20Sopenharmony_ci __u32 packets; 3427c2aad20Sopenharmony_ci __u32 bytesin; 3437c2aad20Sopenharmony_ci}; 3447c2aad20Sopenharmony_ci 3457c2aad20Sopenharmony_ci/* gred setup */ 3467c2aad20Sopenharmony_cistruct tc_gred_sopt { 3477c2aad20Sopenharmony_ci __u32 DPs; 3487c2aad20Sopenharmony_ci __u32 def_DP; 3497c2aad20Sopenharmony_ci __u8 grio; 3507c2aad20Sopenharmony_ci __u8 flags; 3517c2aad20Sopenharmony_ci __u16 pad1; 3527c2aad20Sopenharmony_ci}; 3537c2aad20Sopenharmony_ci 3547c2aad20Sopenharmony_ci/* CHOKe section */ 3557c2aad20Sopenharmony_ci 3567c2aad20Sopenharmony_cienum { 3577c2aad20Sopenharmony_ci TCA_CHOKE_UNSPEC, 3587c2aad20Sopenharmony_ci TCA_CHOKE_PARMS, 3597c2aad20Sopenharmony_ci TCA_CHOKE_STAB, 3607c2aad20Sopenharmony_ci TCA_CHOKE_MAX_P, 3617c2aad20Sopenharmony_ci __TCA_CHOKE_MAX, 3627c2aad20Sopenharmony_ci}; 3637c2aad20Sopenharmony_ci 3647c2aad20Sopenharmony_ci#define TCA_CHOKE_MAX (__TCA_CHOKE_MAX - 1) 3657c2aad20Sopenharmony_ci 3667c2aad20Sopenharmony_cistruct tc_choke_qopt { 3677c2aad20Sopenharmony_ci __u32 limit; /* Hard queue length (packets) */ 3687c2aad20Sopenharmony_ci __u32 qth_min; /* Min average threshold (packets) */ 3697c2aad20Sopenharmony_ci __u32 qth_max; /* Max average threshold (packets) */ 3707c2aad20Sopenharmony_ci unsigned char Wlog; /* log(W) */ 3717c2aad20Sopenharmony_ci unsigned char Plog; /* log(P_max/(qth_max-qth_min)) */ 3727c2aad20Sopenharmony_ci unsigned char Scell_log; /* cell size for idle damping */ 3737c2aad20Sopenharmony_ci unsigned char flags; /* see RED flags */ 3747c2aad20Sopenharmony_ci}; 3757c2aad20Sopenharmony_ci 3767c2aad20Sopenharmony_cistruct tc_choke_xstats { 3777c2aad20Sopenharmony_ci __u32 early; /* Early drops */ 3787c2aad20Sopenharmony_ci __u32 pdrop; /* Drops due to queue limits */ 3797c2aad20Sopenharmony_ci __u32 other; /* Drops due to drop() calls */ 3807c2aad20Sopenharmony_ci __u32 marked; /* Marked packets */ 3817c2aad20Sopenharmony_ci __u32 matched; /* Drops due to flow match */ 3827c2aad20Sopenharmony_ci}; 3837c2aad20Sopenharmony_ci 3847c2aad20Sopenharmony_ci/* HTB section */ 3857c2aad20Sopenharmony_ci#define TC_HTB_NUMPRIO 8 3867c2aad20Sopenharmony_ci#define TC_HTB_MAXDEPTH 8 3877c2aad20Sopenharmony_ci#define TC_HTB_PROTOVER 3 /* the same as HTB and TC's major */ 3887c2aad20Sopenharmony_ci 3897c2aad20Sopenharmony_cistruct tc_htb_opt { 3907c2aad20Sopenharmony_ci struct tc_ratespec rate; 3917c2aad20Sopenharmony_ci struct tc_ratespec ceil; 3927c2aad20Sopenharmony_ci __u32 buffer; 3937c2aad20Sopenharmony_ci __u32 cbuffer; 3947c2aad20Sopenharmony_ci __u32 quantum; 3957c2aad20Sopenharmony_ci __u32 level; /* out only */ 3967c2aad20Sopenharmony_ci __u32 prio; 3977c2aad20Sopenharmony_ci}; 3987c2aad20Sopenharmony_cistruct tc_htb_glob { 3997c2aad20Sopenharmony_ci __u32 version; /* to match HTB/TC */ 4007c2aad20Sopenharmony_ci __u32 rate2quantum; /* bps->quantum divisor */ 4017c2aad20Sopenharmony_ci __u32 defcls; /* default class number */ 4027c2aad20Sopenharmony_ci __u32 debug; /* debug flags */ 4037c2aad20Sopenharmony_ci 4047c2aad20Sopenharmony_ci /* stats */ 4057c2aad20Sopenharmony_ci __u32 direct_pkts; /* count of non shaped packets */ 4067c2aad20Sopenharmony_ci}; 4077c2aad20Sopenharmony_cienum { 4087c2aad20Sopenharmony_ci TCA_HTB_UNSPEC, 4097c2aad20Sopenharmony_ci TCA_HTB_PARMS, 4107c2aad20Sopenharmony_ci TCA_HTB_INIT, 4117c2aad20Sopenharmony_ci TCA_HTB_CTAB, 4127c2aad20Sopenharmony_ci TCA_HTB_RTAB, 4137c2aad20Sopenharmony_ci TCA_HTB_DIRECT_QLEN, 4147c2aad20Sopenharmony_ci TCA_HTB_RATE64, 4157c2aad20Sopenharmony_ci TCA_HTB_CEIL64, 4167c2aad20Sopenharmony_ci TCA_HTB_PAD, 4177c2aad20Sopenharmony_ci TCA_HTB_OFFLOAD, 4187c2aad20Sopenharmony_ci __TCA_HTB_MAX, 4197c2aad20Sopenharmony_ci}; 4207c2aad20Sopenharmony_ci 4217c2aad20Sopenharmony_ci#define TCA_HTB_MAX (__TCA_HTB_MAX - 1) 4227c2aad20Sopenharmony_ci 4237c2aad20Sopenharmony_cistruct tc_htb_xstats { 4247c2aad20Sopenharmony_ci __u32 lends; 4257c2aad20Sopenharmony_ci __u32 borrows; 4267c2aad20Sopenharmony_ci __u32 giants; /* unused since 'Make HTB scheduler work with TSO.' */ 4277c2aad20Sopenharmony_ci __s32 tokens; 4287c2aad20Sopenharmony_ci __s32 ctokens; 4297c2aad20Sopenharmony_ci}; 4307c2aad20Sopenharmony_ci 4317c2aad20Sopenharmony_ci/* HFSC section */ 4327c2aad20Sopenharmony_ci 4337c2aad20Sopenharmony_cistruct tc_hfsc_qopt { 4347c2aad20Sopenharmony_ci __u16 defcls; /* default class */ 4357c2aad20Sopenharmony_ci}; 4367c2aad20Sopenharmony_ci 4377c2aad20Sopenharmony_cistruct tc_service_curve { 4387c2aad20Sopenharmony_ci __u32 m1; /* slope of the first segment in bps */ 4397c2aad20Sopenharmony_ci __u32 d; /* x-projection of the first segment in us */ 4407c2aad20Sopenharmony_ci __u32 m2; /* slope of the second segment in bps */ 4417c2aad20Sopenharmony_ci}; 4427c2aad20Sopenharmony_ci 4437c2aad20Sopenharmony_cistruct tc_hfsc_stats { 4447c2aad20Sopenharmony_ci __u64 work; /* total work done */ 4457c2aad20Sopenharmony_ci __u64 rtwork; /* work done by real-time criteria */ 4467c2aad20Sopenharmony_ci __u32 period; /* current period */ 4477c2aad20Sopenharmony_ci __u32 level; /* class level in hierarchy */ 4487c2aad20Sopenharmony_ci}; 4497c2aad20Sopenharmony_ci 4507c2aad20Sopenharmony_cienum { 4517c2aad20Sopenharmony_ci TCA_HFSC_UNSPEC, 4527c2aad20Sopenharmony_ci TCA_HFSC_RSC, 4537c2aad20Sopenharmony_ci TCA_HFSC_FSC, 4547c2aad20Sopenharmony_ci TCA_HFSC_USC, 4557c2aad20Sopenharmony_ci __TCA_HFSC_MAX, 4567c2aad20Sopenharmony_ci}; 4577c2aad20Sopenharmony_ci 4587c2aad20Sopenharmony_ci#define TCA_HFSC_MAX (__TCA_HFSC_MAX - 1) 4597c2aad20Sopenharmony_ci 4607c2aad20Sopenharmony_ci 4617c2aad20Sopenharmony_ci/* CBQ section */ 4627c2aad20Sopenharmony_ci 4637c2aad20Sopenharmony_ci#define TC_CBQ_MAXPRIO 8 4647c2aad20Sopenharmony_ci#define TC_CBQ_MAXLEVEL 8 4657c2aad20Sopenharmony_ci#define TC_CBQ_DEF_EWMA 5 4667c2aad20Sopenharmony_ci 4677c2aad20Sopenharmony_cistruct tc_cbq_lssopt { 4687c2aad20Sopenharmony_ci unsigned char change; 4697c2aad20Sopenharmony_ci unsigned char flags; 4707c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_BOUNDED 1 4717c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_ISOLATED 2 4727c2aad20Sopenharmony_ci unsigned char ewma_log; 4737c2aad20Sopenharmony_ci unsigned char level; 4747c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_FLAGS 1 4757c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_EWMA 2 4767c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_MAXIDLE 4 4777c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_MINIDLE 8 4787c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_OFFTIME 0x10 4797c2aad20Sopenharmony_ci#define TCF_CBQ_LSS_AVPKT 0x20 4807c2aad20Sopenharmony_ci __u32 maxidle; 4817c2aad20Sopenharmony_ci __u32 minidle; 4827c2aad20Sopenharmony_ci __u32 offtime; 4837c2aad20Sopenharmony_ci __u32 avpkt; 4847c2aad20Sopenharmony_ci}; 4857c2aad20Sopenharmony_ci 4867c2aad20Sopenharmony_cistruct tc_cbq_wrropt { 4877c2aad20Sopenharmony_ci unsigned char flags; 4887c2aad20Sopenharmony_ci unsigned char priority; 4897c2aad20Sopenharmony_ci unsigned char cpriority; 4907c2aad20Sopenharmony_ci unsigned char __reserved; 4917c2aad20Sopenharmony_ci __u32 allot; 4927c2aad20Sopenharmony_ci __u32 weight; 4937c2aad20Sopenharmony_ci}; 4947c2aad20Sopenharmony_ci 4957c2aad20Sopenharmony_cistruct tc_cbq_ovl { 4967c2aad20Sopenharmony_ci unsigned char strategy; 4977c2aad20Sopenharmony_ci#define TC_CBQ_OVL_CLASSIC 0 4987c2aad20Sopenharmony_ci#define TC_CBQ_OVL_DELAY 1 4997c2aad20Sopenharmony_ci#define TC_CBQ_OVL_LOWPRIO 2 5007c2aad20Sopenharmony_ci#define TC_CBQ_OVL_DROP 3 5017c2aad20Sopenharmony_ci#define TC_CBQ_OVL_RCLASSIC 4 5027c2aad20Sopenharmony_ci unsigned char priority2; 5037c2aad20Sopenharmony_ci __u16 pad; 5047c2aad20Sopenharmony_ci __u32 penalty; 5057c2aad20Sopenharmony_ci}; 5067c2aad20Sopenharmony_ci 5077c2aad20Sopenharmony_cistruct tc_cbq_police { 5087c2aad20Sopenharmony_ci unsigned char police; 5097c2aad20Sopenharmony_ci unsigned char __res1; 5107c2aad20Sopenharmony_ci unsigned short __res2; 5117c2aad20Sopenharmony_ci}; 5127c2aad20Sopenharmony_ci 5137c2aad20Sopenharmony_cistruct tc_cbq_fopt { 5147c2aad20Sopenharmony_ci __u32 split; 5157c2aad20Sopenharmony_ci __u32 defmap; 5167c2aad20Sopenharmony_ci __u32 defchange; 5177c2aad20Sopenharmony_ci}; 5187c2aad20Sopenharmony_ci 5197c2aad20Sopenharmony_cistruct tc_cbq_xstats { 5207c2aad20Sopenharmony_ci __u32 borrows; 5217c2aad20Sopenharmony_ci __u32 overactions; 5227c2aad20Sopenharmony_ci __s32 avgidle; 5237c2aad20Sopenharmony_ci __s32 undertime; 5247c2aad20Sopenharmony_ci}; 5257c2aad20Sopenharmony_ci 5267c2aad20Sopenharmony_cienum { 5277c2aad20Sopenharmony_ci TCA_CBQ_UNSPEC, 5287c2aad20Sopenharmony_ci TCA_CBQ_LSSOPT, 5297c2aad20Sopenharmony_ci TCA_CBQ_WRROPT, 5307c2aad20Sopenharmony_ci TCA_CBQ_FOPT, 5317c2aad20Sopenharmony_ci TCA_CBQ_OVL_STRATEGY, 5327c2aad20Sopenharmony_ci TCA_CBQ_RATE, 5337c2aad20Sopenharmony_ci TCA_CBQ_RTAB, 5347c2aad20Sopenharmony_ci TCA_CBQ_POLICE, 5357c2aad20Sopenharmony_ci __TCA_CBQ_MAX, 5367c2aad20Sopenharmony_ci}; 5377c2aad20Sopenharmony_ci 5387c2aad20Sopenharmony_ci#define TCA_CBQ_MAX (__TCA_CBQ_MAX - 1) 5397c2aad20Sopenharmony_ci 5407c2aad20Sopenharmony_ci/* dsmark section */ 5417c2aad20Sopenharmony_ci 5427c2aad20Sopenharmony_cienum { 5437c2aad20Sopenharmony_ci TCA_DSMARK_UNSPEC, 5447c2aad20Sopenharmony_ci TCA_DSMARK_INDICES, 5457c2aad20Sopenharmony_ci TCA_DSMARK_DEFAULT_INDEX, 5467c2aad20Sopenharmony_ci TCA_DSMARK_SET_TC_INDEX, 5477c2aad20Sopenharmony_ci TCA_DSMARK_MASK, 5487c2aad20Sopenharmony_ci TCA_DSMARK_VALUE, 5497c2aad20Sopenharmony_ci __TCA_DSMARK_MAX, 5507c2aad20Sopenharmony_ci}; 5517c2aad20Sopenharmony_ci 5527c2aad20Sopenharmony_ci#define TCA_DSMARK_MAX (__TCA_DSMARK_MAX - 1) 5537c2aad20Sopenharmony_ci 5547c2aad20Sopenharmony_ci/* ATM section */ 5557c2aad20Sopenharmony_ci 5567c2aad20Sopenharmony_cienum { 5577c2aad20Sopenharmony_ci TCA_ATM_UNSPEC, 5587c2aad20Sopenharmony_ci TCA_ATM_FD, /* file/socket descriptor */ 5597c2aad20Sopenharmony_ci TCA_ATM_PTR, /* pointer to descriptor - later */ 5607c2aad20Sopenharmony_ci TCA_ATM_HDR, /* LL header */ 5617c2aad20Sopenharmony_ci TCA_ATM_EXCESS, /* excess traffic class (0 for CLP) */ 5627c2aad20Sopenharmony_ci TCA_ATM_ADDR, /* PVC address (for output only) */ 5637c2aad20Sopenharmony_ci TCA_ATM_STATE, /* VC state (ATM_VS_*; for output only) */ 5647c2aad20Sopenharmony_ci __TCA_ATM_MAX, 5657c2aad20Sopenharmony_ci}; 5667c2aad20Sopenharmony_ci 5677c2aad20Sopenharmony_ci#define TCA_ATM_MAX (__TCA_ATM_MAX - 1) 5687c2aad20Sopenharmony_ci 5697c2aad20Sopenharmony_ci/* Network emulator */ 5707c2aad20Sopenharmony_ci 5717c2aad20Sopenharmony_cienum { 5727c2aad20Sopenharmony_ci TCA_NETEM_UNSPEC, 5737c2aad20Sopenharmony_ci TCA_NETEM_CORR, 5747c2aad20Sopenharmony_ci TCA_NETEM_DELAY_DIST, 5757c2aad20Sopenharmony_ci TCA_NETEM_REORDER, 5767c2aad20Sopenharmony_ci TCA_NETEM_CORRUPT, 5777c2aad20Sopenharmony_ci TCA_NETEM_LOSS, 5787c2aad20Sopenharmony_ci TCA_NETEM_RATE, 5797c2aad20Sopenharmony_ci TCA_NETEM_ECN, 5807c2aad20Sopenharmony_ci TCA_NETEM_RATE64, 5817c2aad20Sopenharmony_ci TCA_NETEM_PAD, 5827c2aad20Sopenharmony_ci TCA_NETEM_LATENCY64, 5837c2aad20Sopenharmony_ci TCA_NETEM_JITTER64, 5847c2aad20Sopenharmony_ci TCA_NETEM_SLOT, 5857c2aad20Sopenharmony_ci TCA_NETEM_SLOT_DIST, 5867c2aad20Sopenharmony_ci __TCA_NETEM_MAX, 5877c2aad20Sopenharmony_ci}; 5887c2aad20Sopenharmony_ci 5897c2aad20Sopenharmony_ci#define TCA_NETEM_MAX (__TCA_NETEM_MAX - 1) 5907c2aad20Sopenharmony_ci 5917c2aad20Sopenharmony_cistruct tc_netem_qopt { 5927c2aad20Sopenharmony_ci __u32 latency; /* added delay (us) */ 5937c2aad20Sopenharmony_ci __u32 limit; /* fifo limit (packets) */ 5947c2aad20Sopenharmony_ci __u32 loss; /* random packet loss (0=none ~0=100%) */ 5957c2aad20Sopenharmony_ci __u32 gap; /* re-ordering gap (0 for none) */ 5967c2aad20Sopenharmony_ci __u32 duplicate; /* random packet dup (0=none ~0=100%) */ 5977c2aad20Sopenharmony_ci __u32 jitter; /* random jitter in latency (us) */ 5987c2aad20Sopenharmony_ci}; 5997c2aad20Sopenharmony_ci 6007c2aad20Sopenharmony_cistruct tc_netem_corr { 6017c2aad20Sopenharmony_ci __u32 delay_corr; /* delay correlation */ 6027c2aad20Sopenharmony_ci __u32 loss_corr; /* packet loss correlation */ 6037c2aad20Sopenharmony_ci __u32 dup_corr; /* duplicate correlation */ 6047c2aad20Sopenharmony_ci}; 6057c2aad20Sopenharmony_ci 6067c2aad20Sopenharmony_cistruct tc_netem_reorder { 6077c2aad20Sopenharmony_ci __u32 probability; 6087c2aad20Sopenharmony_ci __u32 correlation; 6097c2aad20Sopenharmony_ci}; 6107c2aad20Sopenharmony_ci 6117c2aad20Sopenharmony_cistruct tc_netem_corrupt { 6127c2aad20Sopenharmony_ci __u32 probability; 6137c2aad20Sopenharmony_ci __u32 correlation; 6147c2aad20Sopenharmony_ci}; 6157c2aad20Sopenharmony_ci 6167c2aad20Sopenharmony_cistruct tc_netem_rate { 6177c2aad20Sopenharmony_ci __u32 rate; /* byte/s */ 6187c2aad20Sopenharmony_ci __s32 packet_overhead; 6197c2aad20Sopenharmony_ci __u32 cell_size; 6207c2aad20Sopenharmony_ci __s32 cell_overhead; 6217c2aad20Sopenharmony_ci}; 6227c2aad20Sopenharmony_ci 6237c2aad20Sopenharmony_cistruct tc_netem_slot { 6247c2aad20Sopenharmony_ci __s64 min_delay; /* nsec */ 6257c2aad20Sopenharmony_ci __s64 max_delay; 6267c2aad20Sopenharmony_ci __s32 max_packets; 6277c2aad20Sopenharmony_ci __s32 max_bytes; 6287c2aad20Sopenharmony_ci __s64 dist_delay; /* nsec */ 6297c2aad20Sopenharmony_ci __s64 dist_jitter; /* nsec */ 6307c2aad20Sopenharmony_ci}; 6317c2aad20Sopenharmony_ci 6327c2aad20Sopenharmony_cienum { 6337c2aad20Sopenharmony_ci NETEM_LOSS_UNSPEC, 6347c2aad20Sopenharmony_ci NETEM_LOSS_GI, /* General Intuitive - 4 state model */ 6357c2aad20Sopenharmony_ci NETEM_LOSS_GE, /* Gilbert Elliot models */ 6367c2aad20Sopenharmony_ci __NETEM_LOSS_MAX 6377c2aad20Sopenharmony_ci}; 6387c2aad20Sopenharmony_ci#define NETEM_LOSS_MAX (__NETEM_LOSS_MAX - 1) 6397c2aad20Sopenharmony_ci 6407c2aad20Sopenharmony_ci/* State transition probabilities for 4 state model */ 6417c2aad20Sopenharmony_cistruct tc_netem_gimodel { 6427c2aad20Sopenharmony_ci __u32 p13; 6437c2aad20Sopenharmony_ci __u32 p31; 6447c2aad20Sopenharmony_ci __u32 p32; 6457c2aad20Sopenharmony_ci __u32 p14; 6467c2aad20Sopenharmony_ci __u32 p23; 6477c2aad20Sopenharmony_ci}; 6487c2aad20Sopenharmony_ci 6497c2aad20Sopenharmony_ci/* Gilbert-Elliot models */ 6507c2aad20Sopenharmony_cistruct tc_netem_gemodel { 6517c2aad20Sopenharmony_ci __u32 p; 6527c2aad20Sopenharmony_ci __u32 r; 6537c2aad20Sopenharmony_ci __u32 h; 6547c2aad20Sopenharmony_ci __u32 k1; 6557c2aad20Sopenharmony_ci}; 6567c2aad20Sopenharmony_ci 6577c2aad20Sopenharmony_ci#define NETEM_DIST_SCALE 8192 6587c2aad20Sopenharmony_ci#define NETEM_DIST_MAX 16384 6597c2aad20Sopenharmony_ci 6607c2aad20Sopenharmony_ci/* DRR */ 6617c2aad20Sopenharmony_ci 6627c2aad20Sopenharmony_cienum { 6637c2aad20Sopenharmony_ci TCA_DRR_UNSPEC, 6647c2aad20Sopenharmony_ci TCA_DRR_QUANTUM, 6657c2aad20Sopenharmony_ci __TCA_DRR_MAX 6667c2aad20Sopenharmony_ci}; 6677c2aad20Sopenharmony_ci 6687c2aad20Sopenharmony_ci#define TCA_DRR_MAX (__TCA_DRR_MAX - 1) 6697c2aad20Sopenharmony_ci 6707c2aad20Sopenharmony_cistruct tc_drr_stats { 6717c2aad20Sopenharmony_ci __u32 deficit; 6727c2aad20Sopenharmony_ci}; 6737c2aad20Sopenharmony_ci 6747c2aad20Sopenharmony_ci/* MQPRIO */ 6757c2aad20Sopenharmony_ci#define TC_QOPT_BITMASK 15 6767c2aad20Sopenharmony_ci#define TC_QOPT_MAX_QUEUE 16 6777c2aad20Sopenharmony_ci 6787c2aad20Sopenharmony_cienum { 6797c2aad20Sopenharmony_ci TC_MQPRIO_HW_OFFLOAD_NONE, /* no offload requested */ 6807c2aad20Sopenharmony_ci TC_MQPRIO_HW_OFFLOAD_TCS, /* offload TCs, no queue counts */ 6817c2aad20Sopenharmony_ci __TC_MQPRIO_HW_OFFLOAD_MAX 6827c2aad20Sopenharmony_ci}; 6837c2aad20Sopenharmony_ci 6847c2aad20Sopenharmony_ci#define TC_MQPRIO_HW_OFFLOAD_MAX (__TC_MQPRIO_HW_OFFLOAD_MAX - 1) 6857c2aad20Sopenharmony_ci 6867c2aad20Sopenharmony_cienum { 6877c2aad20Sopenharmony_ci TC_MQPRIO_MODE_DCB, 6887c2aad20Sopenharmony_ci TC_MQPRIO_MODE_CHANNEL, 6897c2aad20Sopenharmony_ci __TC_MQPRIO_MODE_MAX 6907c2aad20Sopenharmony_ci}; 6917c2aad20Sopenharmony_ci 6927c2aad20Sopenharmony_ci#define __TC_MQPRIO_MODE_MAX (__TC_MQPRIO_MODE_MAX - 1) 6937c2aad20Sopenharmony_ci 6947c2aad20Sopenharmony_cienum { 6957c2aad20Sopenharmony_ci TC_MQPRIO_SHAPER_DCB, 6967c2aad20Sopenharmony_ci TC_MQPRIO_SHAPER_BW_RATE, /* Add new shapers below */ 6977c2aad20Sopenharmony_ci __TC_MQPRIO_SHAPER_MAX 6987c2aad20Sopenharmony_ci}; 6997c2aad20Sopenharmony_ci 7007c2aad20Sopenharmony_ci#define __TC_MQPRIO_SHAPER_MAX (__TC_MQPRIO_SHAPER_MAX - 1) 7017c2aad20Sopenharmony_ci 7027c2aad20Sopenharmony_cistruct tc_mqprio_qopt { 7037c2aad20Sopenharmony_ci __u8 num_tc; 7047c2aad20Sopenharmony_ci __u8 prio_tc_map[TC_QOPT_BITMASK + 1]; 7057c2aad20Sopenharmony_ci __u8 hw; 7067c2aad20Sopenharmony_ci __u16 count[TC_QOPT_MAX_QUEUE]; 7077c2aad20Sopenharmony_ci __u16 offset[TC_QOPT_MAX_QUEUE]; 7087c2aad20Sopenharmony_ci}; 7097c2aad20Sopenharmony_ci 7107c2aad20Sopenharmony_ci#define TC_MQPRIO_F_MODE 0x1 7117c2aad20Sopenharmony_ci#define TC_MQPRIO_F_SHAPER 0x2 7127c2aad20Sopenharmony_ci#define TC_MQPRIO_F_MIN_RATE 0x4 7137c2aad20Sopenharmony_ci#define TC_MQPRIO_F_MAX_RATE 0x8 7147c2aad20Sopenharmony_ci 7157c2aad20Sopenharmony_cienum { 7167c2aad20Sopenharmony_ci TCA_MQPRIO_UNSPEC, 7177c2aad20Sopenharmony_ci TCA_MQPRIO_MODE, 7187c2aad20Sopenharmony_ci TCA_MQPRIO_SHAPER, 7197c2aad20Sopenharmony_ci TCA_MQPRIO_MIN_RATE64, 7207c2aad20Sopenharmony_ci TCA_MQPRIO_MAX_RATE64, 7217c2aad20Sopenharmony_ci __TCA_MQPRIO_MAX, 7227c2aad20Sopenharmony_ci}; 7237c2aad20Sopenharmony_ci 7247c2aad20Sopenharmony_ci#define TCA_MQPRIO_MAX (__TCA_MQPRIO_MAX - 1) 7257c2aad20Sopenharmony_ci 7267c2aad20Sopenharmony_ci/* SFB */ 7277c2aad20Sopenharmony_ci 7287c2aad20Sopenharmony_cienum { 7297c2aad20Sopenharmony_ci TCA_SFB_UNSPEC, 7307c2aad20Sopenharmony_ci TCA_SFB_PARMS, 7317c2aad20Sopenharmony_ci __TCA_SFB_MAX, 7327c2aad20Sopenharmony_ci}; 7337c2aad20Sopenharmony_ci 7347c2aad20Sopenharmony_ci#define TCA_SFB_MAX (__TCA_SFB_MAX - 1) 7357c2aad20Sopenharmony_ci 7367c2aad20Sopenharmony_ci/* 7377c2aad20Sopenharmony_ci * Note: increment, decrement are Q0.16 fixed-point values. 7387c2aad20Sopenharmony_ci */ 7397c2aad20Sopenharmony_cistruct tc_sfb_qopt { 7407c2aad20Sopenharmony_ci __u32 rehash_interval; /* delay between hash move, in ms */ 7417c2aad20Sopenharmony_ci __u32 warmup_time; /* double buffering warmup time in ms (warmup_time < rehash_interval) */ 7427c2aad20Sopenharmony_ci __u32 max; /* max len of qlen_min */ 7437c2aad20Sopenharmony_ci __u32 bin_size; /* maximum queue length per bin */ 7447c2aad20Sopenharmony_ci __u32 increment; /* probability increment, (d1 in Blue) */ 7457c2aad20Sopenharmony_ci __u32 decrement; /* probability decrement, (d2 in Blue) */ 7467c2aad20Sopenharmony_ci __u32 limit; /* max SFB queue length */ 7477c2aad20Sopenharmony_ci __u32 penalty_rate; /* inelastic flows are rate limited to 'rate' pps */ 7487c2aad20Sopenharmony_ci __u32 penalty_burst; 7497c2aad20Sopenharmony_ci}; 7507c2aad20Sopenharmony_ci 7517c2aad20Sopenharmony_cistruct tc_sfb_xstats { 7527c2aad20Sopenharmony_ci __u32 earlydrop; 7537c2aad20Sopenharmony_ci __u32 penaltydrop; 7547c2aad20Sopenharmony_ci __u32 bucketdrop; 7557c2aad20Sopenharmony_ci __u32 queuedrop; 7567c2aad20Sopenharmony_ci __u32 childdrop; /* drops in child qdisc */ 7577c2aad20Sopenharmony_ci __u32 marked; 7587c2aad20Sopenharmony_ci __u32 maxqlen; 7597c2aad20Sopenharmony_ci __u32 maxprob; 7607c2aad20Sopenharmony_ci __u32 avgprob; 7617c2aad20Sopenharmony_ci}; 7627c2aad20Sopenharmony_ci 7637c2aad20Sopenharmony_ci#define SFB_MAX_PROB 0xFFFF 7647c2aad20Sopenharmony_ci 7657c2aad20Sopenharmony_ci/* QFQ */ 7667c2aad20Sopenharmony_cienum { 7677c2aad20Sopenharmony_ci TCA_QFQ_UNSPEC, 7687c2aad20Sopenharmony_ci TCA_QFQ_WEIGHT, 7697c2aad20Sopenharmony_ci TCA_QFQ_LMAX, 7707c2aad20Sopenharmony_ci __TCA_QFQ_MAX 7717c2aad20Sopenharmony_ci}; 7727c2aad20Sopenharmony_ci 7737c2aad20Sopenharmony_ci#define TCA_QFQ_MAX (__TCA_QFQ_MAX - 1) 7747c2aad20Sopenharmony_ci 7757c2aad20Sopenharmony_cistruct tc_qfq_stats { 7767c2aad20Sopenharmony_ci __u32 weight; 7777c2aad20Sopenharmony_ci __u32 lmax; 7787c2aad20Sopenharmony_ci}; 7797c2aad20Sopenharmony_ci 7807c2aad20Sopenharmony_ci/* CODEL */ 7817c2aad20Sopenharmony_ci 7827c2aad20Sopenharmony_cienum { 7837c2aad20Sopenharmony_ci TCA_CODEL_UNSPEC, 7847c2aad20Sopenharmony_ci TCA_CODEL_TARGET, 7857c2aad20Sopenharmony_ci TCA_CODEL_LIMIT, 7867c2aad20Sopenharmony_ci TCA_CODEL_INTERVAL, 7877c2aad20Sopenharmony_ci TCA_CODEL_ECN, 7887c2aad20Sopenharmony_ci TCA_CODEL_CE_THRESHOLD, 7897c2aad20Sopenharmony_ci __TCA_CODEL_MAX 7907c2aad20Sopenharmony_ci}; 7917c2aad20Sopenharmony_ci 7927c2aad20Sopenharmony_ci#define TCA_CODEL_MAX (__TCA_CODEL_MAX - 1) 7937c2aad20Sopenharmony_ci 7947c2aad20Sopenharmony_cistruct tc_codel_xstats { 7957c2aad20Sopenharmony_ci __u32 maxpacket; /* largest packet we've seen so far */ 7967c2aad20Sopenharmony_ci __u32 count; /* how many drops we've done since the last time we 7977c2aad20Sopenharmony_ci * entered dropping state 7987c2aad20Sopenharmony_ci */ 7997c2aad20Sopenharmony_ci __u32 lastcount; /* count at entry to dropping state */ 8007c2aad20Sopenharmony_ci __u32 ldelay; /* in-queue delay seen by most recently dequeued packet */ 8017c2aad20Sopenharmony_ci __s32 drop_next; /* time to drop next packet */ 8027c2aad20Sopenharmony_ci __u32 drop_overlimit; /* number of time max qdisc packet limit was hit */ 8037c2aad20Sopenharmony_ci __u32 ecn_mark; /* number of packets we ECN marked instead of dropped */ 8047c2aad20Sopenharmony_ci __u32 dropping; /* are we in dropping state ? */ 8057c2aad20Sopenharmony_ci __u32 ce_mark; /* number of CE marked packets because of ce_threshold */ 8067c2aad20Sopenharmony_ci}; 8077c2aad20Sopenharmony_ci 8087c2aad20Sopenharmony_ci/* FQ_CODEL */ 8097c2aad20Sopenharmony_ci 8107c2aad20Sopenharmony_cienum { 8117c2aad20Sopenharmony_ci TCA_FQ_CODEL_UNSPEC, 8127c2aad20Sopenharmony_ci TCA_FQ_CODEL_TARGET, 8137c2aad20Sopenharmony_ci TCA_FQ_CODEL_LIMIT, 8147c2aad20Sopenharmony_ci TCA_FQ_CODEL_INTERVAL, 8157c2aad20Sopenharmony_ci TCA_FQ_CODEL_ECN, 8167c2aad20Sopenharmony_ci TCA_FQ_CODEL_FLOWS, 8177c2aad20Sopenharmony_ci TCA_FQ_CODEL_QUANTUM, 8187c2aad20Sopenharmony_ci TCA_FQ_CODEL_CE_THRESHOLD, 8197c2aad20Sopenharmony_ci TCA_FQ_CODEL_DROP_BATCH_SIZE, 8207c2aad20Sopenharmony_ci TCA_FQ_CODEL_MEMORY_LIMIT, 8217c2aad20Sopenharmony_ci __TCA_FQ_CODEL_MAX 8227c2aad20Sopenharmony_ci}; 8237c2aad20Sopenharmony_ci 8247c2aad20Sopenharmony_ci#define TCA_FQ_CODEL_MAX (__TCA_FQ_CODEL_MAX - 1) 8257c2aad20Sopenharmony_ci 8267c2aad20Sopenharmony_cienum { 8277c2aad20Sopenharmony_ci TCA_FQ_CODEL_XSTATS_QDISC, 8287c2aad20Sopenharmony_ci TCA_FQ_CODEL_XSTATS_CLASS, 8297c2aad20Sopenharmony_ci}; 8307c2aad20Sopenharmony_ci 8317c2aad20Sopenharmony_cistruct tc_fq_codel_qd_stats { 8327c2aad20Sopenharmony_ci __u32 maxpacket; /* largest packet we've seen so far */ 8337c2aad20Sopenharmony_ci __u32 drop_overlimit; /* number of time max qdisc 8347c2aad20Sopenharmony_ci * packet limit was hit 8357c2aad20Sopenharmony_ci */ 8367c2aad20Sopenharmony_ci __u32 ecn_mark; /* number of packets we ECN marked 8377c2aad20Sopenharmony_ci * instead of being dropped 8387c2aad20Sopenharmony_ci */ 8397c2aad20Sopenharmony_ci __u32 new_flow_count; /* number of time packets 8407c2aad20Sopenharmony_ci * created a 'new flow' 8417c2aad20Sopenharmony_ci */ 8427c2aad20Sopenharmony_ci __u32 new_flows_len; /* count of flows in new list */ 8437c2aad20Sopenharmony_ci __u32 old_flows_len; /* count of flows in old list */ 8447c2aad20Sopenharmony_ci __u32 ce_mark; /* packets above ce_threshold */ 8457c2aad20Sopenharmony_ci __u32 memory_usage; /* in bytes */ 8467c2aad20Sopenharmony_ci __u32 drop_overmemory; 8477c2aad20Sopenharmony_ci}; 8487c2aad20Sopenharmony_ci 8497c2aad20Sopenharmony_cistruct tc_fq_codel_cl_stats { 8507c2aad20Sopenharmony_ci __s32 deficit; 8517c2aad20Sopenharmony_ci __u32 ldelay; /* in-queue delay seen by most recently 8527c2aad20Sopenharmony_ci * dequeued packet 8537c2aad20Sopenharmony_ci */ 8547c2aad20Sopenharmony_ci __u32 count; 8557c2aad20Sopenharmony_ci __u32 lastcount; 8567c2aad20Sopenharmony_ci __u32 dropping; 8577c2aad20Sopenharmony_ci __s32 drop_next; 8587c2aad20Sopenharmony_ci}; 8597c2aad20Sopenharmony_ci 8607c2aad20Sopenharmony_cistruct tc_fq_codel_xstats { 8617c2aad20Sopenharmony_ci __u32 type; 8627c2aad20Sopenharmony_ci union { 8637c2aad20Sopenharmony_ci struct tc_fq_codel_qd_stats qdisc_stats; 8647c2aad20Sopenharmony_ci struct tc_fq_codel_cl_stats class_stats; 8657c2aad20Sopenharmony_ci }; 8667c2aad20Sopenharmony_ci}; 8677c2aad20Sopenharmony_ci 8687c2aad20Sopenharmony_ci/* FQ */ 8697c2aad20Sopenharmony_ci 8707c2aad20Sopenharmony_cienum { 8717c2aad20Sopenharmony_ci TCA_FQ_UNSPEC, 8727c2aad20Sopenharmony_ci 8737c2aad20Sopenharmony_ci TCA_FQ_PLIMIT, /* limit of total number of packets in queue */ 8747c2aad20Sopenharmony_ci 8757c2aad20Sopenharmony_ci TCA_FQ_FLOW_PLIMIT, /* limit of packets per flow */ 8767c2aad20Sopenharmony_ci 8777c2aad20Sopenharmony_ci TCA_FQ_QUANTUM, /* RR quantum */ 8787c2aad20Sopenharmony_ci 8797c2aad20Sopenharmony_ci TCA_FQ_INITIAL_QUANTUM, /* RR quantum for new flow */ 8807c2aad20Sopenharmony_ci 8817c2aad20Sopenharmony_ci TCA_FQ_RATE_ENABLE, /* enable/disable rate limiting */ 8827c2aad20Sopenharmony_ci 8837c2aad20Sopenharmony_ci TCA_FQ_FLOW_DEFAULT_RATE,/* obsolete, do not use */ 8847c2aad20Sopenharmony_ci 8857c2aad20Sopenharmony_ci TCA_FQ_FLOW_MAX_RATE, /* per flow max rate */ 8867c2aad20Sopenharmony_ci 8877c2aad20Sopenharmony_ci TCA_FQ_BUCKETS_LOG, /* log2(number of buckets) */ 8887c2aad20Sopenharmony_ci 8897c2aad20Sopenharmony_ci TCA_FQ_FLOW_REFILL_DELAY, /* flow credit refill delay in usec */ 8907c2aad20Sopenharmony_ci 8917c2aad20Sopenharmony_ci TCA_FQ_ORPHAN_MASK, /* mask applied to orphaned skb hashes */ 8927c2aad20Sopenharmony_ci 8937c2aad20Sopenharmony_ci TCA_FQ_LOW_RATE_THRESHOLD, /* per packet delay under this rate */ 8947c2aad20Sopenharmony_ci 8957c2aad20Sopenharmony_ci TCA_FQ_CE_THRESHOLD, /* DCTCP-like CE-marking threshold */ 8967c2aad20Sopenharmony_ci 8977c2aad20Sopenharmony_ci __TCA_FQ_MAX 8987c2aad20Sopenharmony_ci}; 8997c2aad20Sopenharmony_ci 9007c2aad20Sopenharmony_ci#define TCA_FQ_MAX (__TCA_FQ_MAX - 1) 9017c2aad20Sopenharmony_ci 9027c2aad20Sopenharmony_cistruct tc_fq_qd_stats { 9037c2aad20Sopenharmony_ci __u64 gc_flows; 9047c2aad20Sopenharmony_ci __u64 highprio_packets; 9057c2aad20Sopenharmony_ci __u64 tcp_retrans; 9067c2aad20Sopenharmony_ci __u64 throttled; 9077c2aad20Sopenharmony_ci __u64 flows_plimit; 9087c2aad20Sopenharmony_ci __u64 pkts_too_long; 9097c2aad20Sopenharmony_ci __u64 allocation_errors; 9107c2aad20Sopenharmony_ci __s64 time_next_delayed_flow; 9117c2aad20Sopenharmony_ci __u32 flows; 9127c2aad20Sopenharmony_ci __u32 inactive_flows; 9137c2aad20Sopenharmony_ci __u32 throttled_flows; 9147c2aad20Sopenharmony_ci __u32 unthrottle_latency_ns; 9157c2aad20Sopenharmony_ci __u64 ce_mark; /* packets above ce_threshold */ 9167c2aad20Sopenharmony_ci}; 9177c2aad20Sopenharmony_ci 9187c2aad20Sopenharmony_ci/* Heavy-Hitter Filter */ 9197c2aad20Sopenharmony_ci 9207c2aad20Sopenharmony_cienum { 9217c2aad20Sopenharmony_ci TCA_HHF_UNSPEC, 9227c2aad20Sopenharmony_ci TCA_HHF_BACKLOG_LIMIT, 9237c2aad20Sopenharmony_ci TCA_HHF_QUANTUM, 9247c2aad20Sopenharmony_ci TCA_HHF_HH_FLOWS_LIMIT, 9257c2aad20Sopenharmony_ci TCA_HHF_RESET_TIMEOUT, 9267c2aad20Sopenharmony_ci TCA_HHF_ADMIT_BYTES, 9277c2aad20Sopenharmony_ci TCA_HHF_EVICT_TIMEOUT, 9287c2aad20Sopenharmony_ci TCA_HHF_NON_HH_WEIGHT, 9297c2aad20Sopenharmony_ci __TCA_HHF_MAX 9307c2aad20Sopenharmony_ci}; 9317c2aad20Sopenharmony_ci 9327c2aad20Sopenharmony_ci#define TCA_HHF_MAX (__TCA_HHF_MAX - 1) 9337c2aad20Sopenharmony_ci 9347c2aad20Sopenharmony_cistruct tc_hhf_xstats { 9357c2aad20Sopenharmony_ci __u32 drop_overlimit; /* number of times max qdisc packet limit 9367c2aad20Sopenharmony_ci * was hit 9377c2aad20Sopenharmony_ci */ 9387c2aad20Sopenharmony_ci __u32 hh_overlimit; /* number of times max heavy-hitters was hit */ 9397c2aad20Sopenharmony_ci __u32 hh_tot_count; /* number of captured heavy-hitters so far */ 9407c2aad20Sopenharmony_ci __u32 hh_cur_count; /* number of current heavy-hitters */ 9417c2aad20Sopenharmony_ci}; 9427c2aad20Sopenharmony_ci 9437c2aad20Sopenharmony_ci/* PIE */ 9447c2aad20Sopenharmony_cienum { 9457c2aad20Sopenharmony_ci TCA_PIE_UNSPEC, 9467c2aad20Sopenharmony_ci TCA_PIE_TARGET, 9477c2aad20Sopenharmony_ci TCA_PIE_LIMIT, 9487c2aad20Sopenharmony_ci TCA_PIE_TUPDATE, 9497c2aad20Sopenharmony_ci TCA_PIE_ALPHA, 9507c2aad20Sopenharmony_ci TCA_PIE_BETA, 9517c2aad20Sopenharmony_ci TCA_PIE_ECN, 9527c2aad20Sopenharmony_ci TCA_PIE_BYTEMODE, 9537c2aad20Sopenharmony_ci __TCA_PIE_MAX 9547c2aad20Sopenharmony_ci}; 9557c2aad20Sopenharmony_ci#define TCA_PIE_MAX (__TCA_PIE_MAX - 1) 9567c2aad20Sopenharmony_ci 9577c2aad20Sopenharmony_cistruct tc_pie_xstats { 9587c2aad20Sopenharmony_ci __u32 prob; /* current probability */ 9597c2aad20Sopenharmony_ci __u32 delay; /* current delay in ms */ 9607c2aad20Sopenharmony_ci __u32 avg_dq_rate; /* current average dq_rate in bits/pie_time */ 9617c2aad20Sopenharmony_ci __u32 packets_in; /* total number of packets enqueued */ 9627c2aad20Sopenharmony_ci __u32 dropped; /* packets dropped due to pie_action */ 9637c2aad20Sopenharmony_ci __u32 overlimit; /* dropped due to lack of space in queue */ 9647c2aad20Sopenharmony_ci __u32 maxq; /* maximum queue size */ 9657c2aad20Sopenharmony_ci __u32 ecn_mark; /* packets marked with ecn*/ 9667c2aad20Sopenharmony_ci}; 9677c2aad20Sopenharmony_ci 9687c2aad20Sopenharmony_ci/* CBS */ 9697c2aad20Sopenharmony_cistruct tc_cbs_qopt { 9707c2aad20Sopenharmony_ci __u8 offload; 9717c2aad20Sopenharmony_ci __u8 _pad[3]; 9727c2aad20Sopenharmony_ci __s32 hicredit; 9737c2aad20Sopenharmony_ci __s32 locredit; 9747c2aad20Sopenharmony_ci __s32 idleslope; 9757c2aad20Sopenharmony_ci __s32 sendslope; 9767c2aad20Sopenharmony_ci}; 9777c2aad20Sopenharmony_ci 9787c2aad20Sopenharmony_cienum { 9797c2aad20Sopenharmony_ci TCA_CBS_UNSPEC, 9807c2aad20Sopenharmony_ci TCA_CBS_PARMS, 9817c2aad20Sopenharmony_ci __TCA_CBS_MAX, 9827c2aad20Sopenharmony_ci}; 9837c2aad20Sopenharmony_ci 9847c2aad20Sopenharmony_ci#define TCA_CBS_MAX (__TCA_CBS_MAX - 1) 9857c2aad20Sopenharmony_ci 9867c2aad20Sopenharmony_ci 9877c2aad20Sopenharmony_ci/* ETF */ 9887c2aad20Sopenharmony_cistruct tc_etf_qopt { 9897c2aad20Sopenharmony_ci __s32 delta; 9907c2aad20Sopenharmony_ci __s32 clockid; 9917c2aad20Sopenharmony_ci __u32 flags; 9927c2aad20Sopenharmony_ci#define TC_ETF_DEADLINE_MODE_ON BIT(0) 9937c2aad20Sopenharmony_ci#define TC_ETF_OFFLOAD_ON BIT(1) 9947c2aad20Sopenharmony_ci}; 9957c2aad20Sopenharmony_ci 9967c2aad20Sopenharmony_cienum { 9977c2aad20Sopenharmony_ci TCA_ETF_UNSPEC, 9987c2aad20Sopenharmony_ci TCA_ETF_PARMS, 9997c2aad20Sopenharmony_ci __TCA_ETF_MAX, 10007c2aad20Sopenharmony_ci}; 10017c2aad20Sopenharmony_ci 10027c2aad20Sopenharmony_ci#define TCA_ETF_MAX (__TCA_ETF_MAX - 1) 10037c2aad20Sopenharmony_ci 10047c2aad20Sopenharmony_ci 10057c2aad20Sopenharmony_ci/* CAKE */ 10067c2aad20Sopenharmony_cienum { 10077c2aad20Sopenharmony_ci TCA_CAKE_UNSPEC, 10087c2aad20Sopenharmony_ci TCA_CAKE_PAD, 10097c2aad20Sopenharmony_ci TCA_CAKE_BASE_RATE64, 10107c2aad20Sopenharmony_ci TCA_CAKE_DIFFSERV_MODE, 10117c2aad20Sopenharmony_ci TCA_CAKE_ATM, 10127c2aad20Sopenharmony_ci TCA_CAKE_FLOW_MODE, 10137c2aad20Sopenharmony_ci TCA_CAKE_OVERHEAD, 10147c2aad20Sopenharmony_ci TCA_CAKE_RTT, 10157c2aad20Sopenharmony_ci TCA_CAKE_TARGET, 10167c2aad20Sopenharmony_ci TCA_CAKE_AUTORATE, 10177c2aad20Sopenharmony_ci TCA_CAKE_MEMORY, 10187c2aad20Sopenharmony_ci TCA_CAKE_NAT, 10197c2aad20Sopenharmony_ci TCA_CAKE_RAW, 10207c2aad20Sopenharmony_ci TCA_CAKE_WASH, 10217c2aad20Sopenharmony_ci TCA_CAKE_MPU, 10227c2aad20Sopenharmony_ci TCA_CAKE_INGRESS, 10237c2aad20Sopenharmony_ci TCA_CAKE_ACK_FILTER, 10247c2aad20Sopenharmony_ci TCA_CAKE_SPLIT_GSO, 10257c2aad20Sopenharmony_ci __TCA_CAKE_MAX 10267c2aad20Sopenharmony_ci}; 10277c2aad20Sopenharmony_ci#define TCA_CAKE_MAX (__TCA_CAKE_MAX - 1) 10287c2aad20Sopenharmony_ci 10297c2aad20Sopenharmony_cienum { 10307c2aad20Sopenharmony_ci __TCA_CAKE_STATS_INVALID, 10317c2aad20Sopenharmony_ci TCA_CAKE_STATS_PAD, 10327c2aad20Sopenharmony_ci TCA_CAKE_STATS_CAPACITY_ESTIMATE64, 10337c2aad20Sopenharmony_ci TCA_CAKE_STATS_MEMORY_LIMIT, 10347c2aad20Sopenharmony_ci TCA_CAKE_STATS_MEMORY_USED, 10357c2aad20Sopenharmony_ci TCA_CAKE_STATS_AVG_NETOFF, 10367c2aad20Sopenharmony_ci TCA_CAKE_STATS_MIN_NETLEN, 10377c2aad20Sopenharmony_ci TCA_CAKE_STATS_MAX_NETLEN, 10387c2aad20Sopenharmony_ci TCA_CAKE_STATS_MIN_ADJLEN, 10397c2aad20Sopenharmony_ci TCA_CAKE_STATS_MAX_ADJLEN, 10407c2aad20Sopenharmony_ci TCA_CAKE_STATS_TIN_STATS, 10417c2aad20Sopenharmony_ci TCA_CAKE_STATS_DEFICIT, 10427c2aad20Sopenharmony_ci TCA_CAKE_STATS_COBALT_COUNT, 10437c2aad20Sopenharmony_ci TCA_CAKE_STATS_DROPPING, 10447c2aad20Sopenharmony_ci TCA_CAKE_STATS_DROP_NEXT_US, 10457c2aad20Sopenharmony_ci TCA_CAKE_STATS_P_DROP, 10467c2aad20Sopenharmony_ci TCA_CAKE_STATS_BLUE_TIMER_US, 10477c2aad20Sopenharmony_ci __TCA_CAKE_STATS_MAX 10487c2aad20Sopenharmony_ci}; 10497c2aad20Sopenharmony_ci#define TCA_CAKE_STATS_MAX (__TCA_CAKE_STATS_MAX - 1) 10507c2aad20Sopenharmony_ci 10517c2aad20Sopenharmony_cienum { 10527c2aad20Sopenharmony_ci __TCA_CAKE_TIN_STATS_INVALID, 10537c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_PAD, 10547c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_SENT_PACKETS, 10557c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_SENT_BYTES64, 10567c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_DROPPED_PACKETS, 10577c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_DROPPED_BYTES64, 10587c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_ACKS_DROPPED_PACKETS, 10597c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_ACKS_DROPPED_BYTES64, 10607c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_ECN_MARKED_PACKETS, 10617c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_ECN_MARKED_BYTES64, 10627c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_BACKLOG_PACKETS, 10637c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_BACKLOG_BYTES, 10647c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_THRESHOLD_RATE64, 10657c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_TARGET_US, 10667c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_INTERVAL_US, 10677c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_WAY_INDIRECT_HITS, 10687c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_WAY_MISSES, 10697c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_WAY_COLLISIONS, 10707c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_PEAK_DELAY_US, 10717c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_AVG_DELAY_US, 10727c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_BASE_DELAY_US, 10737c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_SPARSE_FLOWS, 10747c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_BULK_FLOWS, 10757c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_UNRESPONSIVE_FLOWS, 10767c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_MAX_SKBLEN, 10777c2aad20Sopenharmony_ci TCA_CAKE_TIN_STATS_FLOW_QUANTUM, 10787c2aad20Sopenharmony_ci __TCA_CAKE_TIN_STATS_MAX 10797c2aad20Sopenharmony_ci}; 10807c2aad20Sopenharmony_ci#define TCA_CAKE_TIN_STATS_MAX (__TCA_CAKE_TIN_STATS_MAX - 1) 10817c2aad20Sopenharmony_ci#define TC_CAKE_MAX_TINS (8) 10827c2aad20Sopenharmony_ci 10837c2aad20Sopenharmony_cienum { 10847c2aad20Sopenharmony_ci CAKE_FLOW_NONE = 0, 10857c2aad20Sopenharmony_ci CAKE_FLOW_SRC_IP, 10867c2aad20Sopenharmony_ci CAKE_FLOW_DST_IP, 10877c2aad20Sopenharmony_ci CAKE_FLOW_HOSTS, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_DST_IP */ 10887c2aad20Sopenharmony_ci CAKE_FLOW_FLOWS, 10897c2aad20Sopenharmony_ci CAKE_FLOW_DUAL_SRC, /* = CAKE_FLOW_SRC_IP | CAKE_FLOW_FLOWS */ 10907c2aad20Sopenharmony_ci CAKE_FLOW_DUAL_DST, /* = CAKE_FLOW_DST_IP | CAKE_FLOW_FLOWS */ 10917c2aad20Sopenharmony_ci CAKE_FLOW_TRIPLE, /* = CAKE_FLOW_HOSTS | CAKE_FLOW_FLOWS */ 10927c2aad20Sopenharmony_ci CAKE_FLOW_MAX, 10937c2aad20Sopenharmony_ci}; 10947c2aad20Sopenharmony_ci 10957c2aad20Sopenharmony_cienum { 10967c2aad20Sopenharmony_ci CAKE_DIFFSERV_DIFFSERV3 = 0, 10977c2aad20Sopenharmony_ci CAKE_DIFFSERV_DIFFSERV4, 10987c2aad20Sopenharmony_ci CAKE_DIFFSERV_DIFFSERV8, 10997c2aad20Sopenharmony_ci CAKE_DIFFSERV_BESTEFFORT, 11007c2aad20Sopenharmony_ci CAKE_DIFFSERV_PRECEDENCE, 11017c2aad20Sopenharmony_ci CAKE_DIFFSERV_MAX 11027c2aad20Sopenharmony_ci}; 11037c2aad20Sopenharmony_ci 11047c2aad20Sopenharmony_cienum { 11057c2aad20Sopenharmony_ci CAKE_ACK_NONE = 0, 11067c2aad20Sopenharmony_ci CAKE_ACK_FILTER, 11077c2aad20Sopenharmony_ci CAKE_ACK_AGGRESSIVE, 11087c2aad20Sopenharmony_ci CAKE_ACK_MAX 11097c2aad20Sopenharmony_ci}; 11107c2aad20Sopenharmony_ci 11117c2aad20Sopenharmony_cienum { 11127c2aad20Sopenharmony_ci CAKE_ATM_NONE = 0, 11137c2aad20Sopenharmony_ci CAKE_ATM_ATM, 11147c2aad20Sopenharmony_ci CAKE_ATM_PTM, 11157c2aad20Sopenharmony_ci CAKE_ATM_MAX 11167c2aad20Sopenharmony_ci}; 11177c2aad20Sopenharmony_ci 11187c2aad20Sopenharmony_ci 11197c2aad20Sopenharmony_ci/* TAPRIO */ 11207c2aad20Sopenharmony_cienum { 11217c2aad20Sopenharmony_ci TC_TAPRIO_CMD_SET_GATES = 0x00, 11227c2aad20Sopenharmony_ci TC_TAPRIO_CMD_SET_AND_HOLD = 0x01, 11237c2aad20Sopenharmony_ci TC_TAPRIO_CMD_SET_AND_RELEASE = 0x02, 11247c2aad20Sopenharmony_ci}; 11257c2aad20Sopenharmony_ci 11267c2aad20Sopenharmony_cienum { 11277c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_ENTRY_UNSPEC, 11287c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_ENTRY_INDEX, /* u32 */ 11297c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_ENTRY_CMD, /* u8 */ 11307c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_ENTRY_GATE_MASK, /* u32 */ 11317c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_ENTRY_INTERVAL, /* u32 */ 11327c2aad20Sopenharmony_ci __TCA_TAPRIO_SCHED_ENTRY_MAX, 11337c2aad20Sopenharmony_ci}; 11347c2aad20Sopenharmony_ci#define TCA_TAPRIO_SCHED_ENTRY_MAX (__TCA_TAPRIO_SCHED_ENTRY_MAX - 1) 11357c2aad20Sopenharmony_ci 11367c2aad20Sopenharmony_ci/* The format for schedule entry list is: 11377c2aad20Sopenharmony_ci * [TCA_TAPRIO_SCHED_ENTRY_LIST] 11387c2aad20Sopenharmony_ci * [TCA_TAPRIO_SCHED_ENTRY] 11397c2aad20Sopenharmony_ci * [TCA_TAPRIO_SCHED_ENTRY_CMD] 11407c2aad20Sopenharmony_ci * [TCA_TAPRIO_SCHED_ENTRY_GATES] 11417c2aad20Sopenharmony_ci * [TCA_TAPRIO_SCHED_ENTRY_INTERVAL] 11427c2aad20Sopenharmony_ci */ 11437c2aad20Sopenharmony_cienum { 11447c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_UNSPEC, 11457c2aad20Sopenharmony_ci TCA_TAPRIO_SCHED_ENTRY, 11467c2aad20Sopenharmony_ci __TCA_TAPRIO_SCHED_MAX, 11477c2aad20Sopenharmony_ci}; 11487c2aad20Sopenharmony_ci 11497c2aad20Sopenharmony_ci#define TCA_TAPRIO_SCHED_MAX (__TCA_TAPRIO_SCHED_MAX - 1) 11507c2aad20Sopenharmony_ci 11517c2aad20Sopenharmony_cienum { 11527c2aad20Sopenharmony_ci TCA_TAPRIO_ATTR_UNSPEC, 11537c2aad20Sopenharmony_ci TCA_TAPRIO_ATTR_PRIOMAP, /* struct tc_mqprio_qopt */ 11547c2aad20Sopenharmony_ci TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST, /* nested of entry */ 11557c2aad20Sopenharmony_ci TCA_TAPRIO_ATTR_SCHED_BASE_TIME, /* s64 */ 11567c2aad20Sopenharmony_ci TCA_TAPRIO_ATTR_SCHED_SINGLE_ENTRY, /* single entry */ 11577c2aad20Sopenharmony_ci TCA_TAPRIO_ATTR_SCHED_CLOCKID, /* s32 */ 11587c2aad20Sopenharmony_ci TCA_TAPRIO_PAD, 11597c2aad20Sopenharmony_ci __TCA_TAPRIO_ATTR_MAX, 11607c2aad20Sopenharmony_ci}; 11617c2aad20Sopenharmony_ci 11627c2aad20Sopenharmony_ci#define TCA_TAPRIO_ATTR_MAX (__TCA_TAPRIO_ATTR_MAX - 1) 11637c2aad20Sopenharmony_ci 11647c2aad20Sopenharmony_ci#endif 1165