linux/include/uapi/linux/pkt_sched.h

/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef __LINUX_PKT_SCHED_H
#define __LINUX_PKT_SCHED_H

#include <linux/const.h>
#include <linux/types.h>

/* Logical priority bands not depending on specific packet scheduler.
   Every scheduler will map them to real traffic classes, if it has
   no more precise mechanism to classify packets.

   These numbers have no special meaning, though their coincidence
   with obsolete IPv6 values is not occasional :-). New IPv6 drafts
   preferred full anarchy inspired by diffserv group.

   Note: TC_PRIO_BESTEFFORT does not mean that it is the most unhappy
   class, actually, as rule it will be handled with more care than
   filler or even bulk.
 */

#define TC_PRIO_BESTEFFORT
#define TC_PRIO_FILLER
#define TC_PRIO_BULK
#define TC_PRIO_INTERACTIVE_BULK
#define TC_PRIO_INTERACTIVE
#define TC_PRIO_CONTROL

#define TC_PRIO_MAX

/* Generic queue statistics, available for all the elements.
   Particular schedulers may have also their private records.
 */

struct tc_stats {};

struct tc_estimator {};

/* "Handles"
   ---------

    All the traffic control objects have 32bit identifiers, or "handles".

    They can be considered as opaque numbers from user API viewpoint,
    but actually they always consist of two fields: major and
    minor numbers, which are interpreted by kernel specially,
    that may be used by applications, though not recommended.

    F.e. qdisc handles always have minor number equal to zero,
    classes (or flows) have major equal to parent qdisc major, and
    minor uniquely identifying class inside qdisc.

    Macros to manipulate handles:
 */

#define TC_H_MAJ_MASK
#define TC_H_MIN_MASK
#define TC_H_MAJ(h)
#define TC_H_MIN(h)
#define TC_H_MAKE(maj,min)

#define TC_H_UNSPEC
#define TC_H_ROOT
#define TC_H_INGRESS
#define TC_H_CLSACT

#define TC_H_MIN_PRIORITY
#define TC_H_MIN_INGRESS
#define TC_H_MIN_EGRESS

/* Need to corrospond to iproute2 tc/tc_core.h "enum link_layer" */
enum tc_link_layer {};
#define TC_LINKLAYER_MASK

struct tc_ratespec {};

#define TC_RTAB_SIZE

struct tc_sizespec {};

enum {};

#define TCA_STAB_MAX

/* FIFO section */

struct tc_fifo_qopt {};

/* SKBPRIO section */

/*
 * Priorities go from zero to (SKBPRIO_MAX_PRIORITY - 1).
 * SKBPRIO_MAX_PRIORITY should be at least 64 in order for skbprio to be able
 * to map one to one the DS field of IPV4 and IPV6 headers.
 * Memory allocation grows linearly with SKBPRIO_MAX_PRIORITY.
 */

#define SKBPRIO_MAX_PRIORITY

struct tc_skbprio_qopt {};

/* PRIO section */

#define TCQ_PRIO_BANDS
#define TCQ_MIN_PRIO_BANDS

struct tc_prio_qopt {};

/* MULTIQ section */

struct tc_multiq_qopt {};

/* PLUG section */

#define TCQ_PLUG_BUFFER
#define TCQ_PLUG_RELEASE_ONE
#define TCQ_PLUG_RELEASE_INDEFINITE
#define TCQ_PLUG_LIMIT

struct tc_plug_qopt {};

/* TBF section */

struct tc_tbf_qopt {};

enum {};

#define TCA_TBF_MAX


/* TEQL section */

/* TEQL does not require any parameters */

/* SFQ section */

struct tc_sfq_qopt {};

struct tc_sfqred_stats {};

struct tc_sfq_qopt_v1 {};


struct tc_sfq_xstats {};

/* RED section */

enum {};

#define TCA_RED_MAX

struct tc_red_qopt {};

#define TC_RED_HISTORIC_FLAGS

struct tc_red_xstats {};

/* GRED section */

#define MAX_DPs

enum {};

#define TCA_GRED_MAX

enum {};
#define TCA_GRED_VQ_ENTRY_MAX

enum {};

#define TCA_GRED_VQ_MAX

struct tc_gred_qopt {};

/* gred setup */
struct tc_gred_sopt {};

/* CHOKe section */

enum {};

#define TCA_CHOKE_MAX

struct tc_choke_qopt {};

struct tc_choke_xstats {};

/* HTB section */
#define TC_HTB_NUMPRIO
#define TC_HTB_MAXDEPTH
#define TC_HTB_PROTOVER

struct tc_htb_opt {};
struct tc_htb_glob {};
enum {};

#define TCA_HTB_MAX

struct tc_htb_xstats {};

/* HFSC section */

struct tc_hfsc_qopt {};

struct tc_service_curve {};

struct tc_hfsc_stats {};

enum {};

#define TCA_HFSC_MAX

/* Network emulator */

enum {};

#define TCA_NETEM_MAX

struct tc_netem_qopt {};

struct tc_netem_corr {};

struct tc_netem_reorder {};

struct tc_netem_corrupt {};

struct tc_netem_rate {};

struct tc_netem_slot {};

enum {};
#define NETEM_LOSS_MAX

/* State transition probabilities for 4 state model */
struct tc_netem_gimodel {};

/* Gilbert-Elliot models */
struct tc_netem_gemodel {};

#define NETEM_DIST_SCALE
#define NETEM_DIST_MAX

/* DRR */

enum {};

#define TCA_DRR_MAX

struct tc_drr_stats {};

/* MQPRIO */
#define TC_QOPT_BITMASK
#define TC_QOPT_MAX_QUEUE

enum {};

#define TC_MQPRIO_HW_OFFLOAD_MAX

enum {};

#define __TC_MQPRIO_MODE_MAX

enum {};

#define __TC_MQPRIO_SHAPER_MAX

enum {};

struct tc_mqprio_qopt {};

#define TC_MQPRIO_F_MODE
#define TC_MQPRIO_F_SHAPER
#define TC_MQPRIO_F_MIN_RATE
#define TC_MQPRIO_F_MAX_RATE

enum {};

enum {};

#define TCA_MQPRIO_MAX

/* SFB */

enum {};

#define TCA_SFB_MAX

/*
 * Note: increment, decrement are Q0.16 fixed-point values.
 */
struct tc_sfb_qopt {};

struct tc_sfb_xstats {};

#define SFB_MAX_PROB

/* QFQ */
enum {};

#define TCA_QFQ_MAX

struct tc_qfq_stats {};

/* CODEL */

enum {};

#define TCA_CODEL_MAX

struct tc_codel_xstats {};

/* FQ_CODEL */

#define FQ_CODEL_QUANTUM_MAX

enum {};

#define TCA_FQ_CODEL_MAX

enum {};

struct tc_fq_codel_qd_stats {};

struct tc_fq_codel_cl_stats {};

struct tc_fq_codel_xstats {};

/* FQ */

enum {};

#define TCA_FQ_MAX

#define FQ_BANDS
#define FQ_MIN_WEIGHT

struct tc_fq_qd_stats {};

/* Heavy-Hitter Filter */

enum {};

#define TCA_HHF_MAX

struct tc_hhf_xstats {};

/* PIE */
enum {};
#define TCA_PIE_MAX

struct tc_pie_xstats {};

/* FQ PIE */
enum {};
#define TCA_FQ_PIE_MAX

struct tc_fq_pie_xstats {};

/* CBS */
struct tc_cbs_qopt {};

enum {};

#define TCA_CBS_MAX


/* ETF */
struct tc_etf_qopt {};

enum {};

#define TCA_ETF_MAX


/* CAKE */
enum {};
#define TCA_CAKE_MAX

enum {};
#define TCA_CAKE_STATS_MAX

enum {};
#define TCA_CAKE_TIN_STATS_MAX
#define TC_CAKE_MAX_TINS

enum {};

enum {};

enum {};

enum {};


/* TAPRIO */
enum {};

enum {};
#define TCA_TAPRIO_SCHED_ENTRY_MAX

/* The format for schedule entry list is:
 * [TCA_TAPRIO_SCHED_ENTRY_LIST]
 *   [TCA_TAPRIO_SCHED_ENTRY]
 *     [TCA_TAPRIO_SCHED_ENTRY_CMD]
 *     [TCA_TAPRIO_SCHED_ENTRY_GATES]
 *     [TCA_TAPRIO_SCHED_ENTRY_INTERVAL]
 */
enum {};

#define TCA_TAPRIO_SCHED_MAX

/* The format for the admin sched (dump only):
 * [TCA_TAPRIO_SCHED_ADMIN_SCHED]
 *   [TCA_TAPRIO_ATTR_SCHED_BASE_TIME]
 *   [TCA_TAPRIO_ATTR_SCHED_ENTRY_LIST]
 *     [TCA_TAPRIO_ATTR_SCHED_ENTRY]
 *       [TCA_TAPRIO_ATTR_SCHED_ENTRY_CMD]
 *       [TCA_TAPRIO_ATTR_SCHED_ENTRY_GATES]
 *       [TCA_TAPRIO_ATTR_SCHED_ENTRY_INTERVAL]
 */

#define TCA_TAPRIO_ATTR_FLAG_TXTIME_ASSIST
#define TCA_TAPRIO_ATTR_FLAG_FULL_OFFLOAD

enum {};

enum {};

enum {};

#define TCA_TAPRIO_ATTR_MAX

/* ETS */

#define TCQ_ETS_MAX_BANDS

enum {};

#define TCA_ETS_MAX

#endif