# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
---
name: tc
protocol: netlink-raw
uapi-header: linux/pkt_cls.h
protonum: 0

doc:
  Netlink raw family for tc qdisc, chain, class and filter configuration
  over rtnetlink.

definitions:
  -
    name: tcmsg
    type: struct
    header: linux/rtnetlink.h
    members:
      -
        name: family
        type: u8
      -
        name: pad
        type: pad
        len: 3
      -
        name: ifindex
        type: s32
      -
        name: handle
        type: u32
      -
        name: parent
        type: u32
      -
        name: info
        type: u32
  -
    name: cls-flags
    enum-name:
    type: flags
    entries:
      - skip-hw
      - skip-sw
      - in-hw
      - not-in-nw
      - verbose
  -
    name: flower-key-ctrl-flags
    name-prefix: tca-flower-key-flags-
    enum-name:
    type: flags
    entries:
      - frag
      - firstfrag
      - tuncsum
      - tundf
      - tunoam
      - tuncrit
  -
    name: dualpi2-drop-overload
    type: enum
    entries: [overflow, drop]
  -
    name: dualpi2-drop-early
    type: enum
    entries: [drop-dequeue, drop-enqueue]
  -
    name: dualpi2-ecn-mask
    type: enum
    value-start: 1
    entries: [l4s-ect, cla-ect, any-ect]
  -
    name: dualpi2-split-gso
    type: enum
    entries: [no-split-gso, split-gso]
  -
    name: tc-stats
    type: struct
    members:
      -
        name: bytes
        type: u64
        doc: Number of enqueued bytes
      -
        name: packets
        type: u32
        doc: Number of enqueued packets
      -
        name: drops
        type: u32
        doc: Packets dropped because of lack of resources
      -
        name: overlimits
        type: u32
        doc: |
          Number of throttle events when this flow goes out of allocated
          bandwidth
      -
        name: bps
        type: u32
        doc: Current flow byte rate
      -
        name: pps
        type: u32
        doc: Current flow packet rate
      -
        name: qlen
        type: u32
      -
        name: backlog
        type: u32
  -
    name: tc-cbs-qopt
    type: struct
    members:
      -
        name: offload
        type: u8
      -
        name: pad
        type: pad
        len: 3
      -
        name: hicredit
        type: s32
      -
        name: locredit
        type: s32
      -
        name: idleslope
        type: s32
      -
        name: sendslope
        type: s32
  -
    name: tc-etf-qopt
    type: struct
    members:
      -
        name: delta
        type: s32
      -
        name: clockid
        type: s32
      -
        name: flags
        type: s32
  -
    name: tc-fifo-qopt
    type: struct
    members:
      -
        name: limit
        type: u32
        doc: Queue length; bytes for bfifo, packets for pfifo
  -
    name: tc-htb-opt
    type: struct
    members:
      -
        name: rate
        type: binary
        struct: tc-ratespec
      -
        name: ceil
        type: binary
        struct: tc-ratespec
      -
        name: buffer
        type: u32
      -
        name: cbuffer
        type: u32
      -
        name: quantum
        type: u32
      -
        name: level
        type: u32
      -
        name: prio
        type: u32
  -
    name: tc-htb-glob
    type: struct
    members:
      -
        name: version
        type: u32
      -
        name: rate2quantum
        type: u32
        doc: bps->quantum divisor
      -
        name: defcls
        type: u32
        doc: Default class number
      -
        name: debug
        type: u32
        doc: Debug flags
      -
        name: direct-pkts
        type: u32
        doc: Count of non shaped packets
  -
    name: tc-gred-qopt
    type: struct
    members:
      -
        name: limit
        type: u32
        doc: HARD maximal queue length in bytes
      -
        name: qth-min
        type: u32
        doc: Min average length threshold in bytes
      -
        name: qth-max
        type: u32
        doc: Max average length threshold in bytes
      -
        name: DP
        type: u32
        doc: Up to 2^32 DPs
      -
        name: backlog
        type: u32
      -
        name: qave
        type: u32
      -
        name: forced
        type: u32
      -
        name: early
        type: u32
      -
        name: other
        type: u32
      -
        name: pdrop
        type: u32
      -
        name: Wlog
        type: u8
        doc: log(W)
      -
        name: Plog
        type: u8
        doc: log(P_max / (qth-max - qth-min))
      -
        name: Scell-log
        type: u8
        doc: cell size for idle damping
      -
        name: prio
        type: u8
        doc: Priority of this VQ
      -
        name: packets
        type: u32
      -
        name: bytesin
        type: u32
  -
    name: tc-gred-sopt
    type: struct
    members:
      -
        name: DPs
        type: u32
      -
        name: def-DP
        type: u32
      -
        name: grio
        type: u8
      -
        name: flags
        type: u8
      -
        name: pad
        type: pad
        len: 2
  -
    name: tc-hfsc-qopt
    type: struct
    members:
      -
        name: defcls
        type: u16
  -
    name: tc-mqprio-qopt
    type: struct
    members:
      -
        name: num-tc
        type: u8
      -
        name: prio-tc-map
        type: binary
        len: 16
      -
        name: hw
        type: u8
      -
        name: count
        type: binary
        len: 32
      -
        name: offset
        type: binary
        len: 32
  -
    name: tc-multiq-qopt
    type: struct
    members:
      -
        name: bands
        type: u16
        doc: Number of bands
      -
        name: max-bands
        type: u16
        doc: Maximum number of queues
  -
    name: tc-netem-qopt
    type: struct
    members:
      -
        name: latency
        type: u32
        doc: Added delay in microseconds
      -
        name: limit
        type: u32
        doc: Fifo limit in packets
      -
        name: loss
        type: u32
        doc: Random packet loss (0=none, ~0=100%)
      -
        name: gap
        type: u32
        doc: Re-ordering gap (0 for none)
      -
        name: duplicate
        type: u32
        doc: Random packet duplication (0=none, ~0=100%)
      -
        name: jitter
        type: u32
        doc: Random jitter latency in microseconds
  -
    name: tc-netem-gimodel
    doc: State transition probabilities for 4 state model
    type: struct
    members:
      -
        name: p13
        type: u32
      -
        name: p31
        type: u32
      -
        name: p32
        type: u32
      -
        name: p14
        type: u32
      -
        name: p23
        type: u32
  -
    name: tc-netem-gemodel
    doc: Gilbert-Elliot models
    type: struct
    members:
      -
        name: p
        type: u32
      -
        name: r
        type: u32
      -
        name: h
        type: u32
      -
        name: k1
        type: u32
  -
    name: tc-netem-corr
    type: struct
    members:
      -
        name: delay-corr
        type: u32
        doc: Delay correlation
      -
        name: loss-corr
        type: u32
        doc: Packet loss correlation
      -
        name: dup-corr
        type: u32
        doc: Duplicate correlation
  -
    name: tc-netem-reorder
    type: struct
    members:
      -
        name: probability
        type: u32
      -
        name: correlation
        type: u32
  -
    name: tc-netem-corrupt
    type: struct
    members:
      -
        name: probability
        type: u32
      -
        name: correlation
        type: u32
  -
    name: tc-netem-rate
    type: struct
    members:
      -
        name: rate
        type: u32
      -
        name: packet-overhead
        type: s32
      -
        name: cell-size
        type: u32
      -
        name: cell-overhead
        type: s32
  -
    name: tc-netem-slot
    type: struct
    members:
      -
        name: min-delay
        type: s64
      -
        name: max-delay
        type: s64
      -
        name: max-packets
        type: s32
      -
        name: max-bytes
        type: s32
      -
        name: dist-delay
        type: s64
      -
        name: dist-jitter
        type: s64
  -
    name: tc-plug-qopt
    type: struct
    members:
      -
        name: action
        type: s32
      -
        name: limit
        type: u32
  -
    name: tc-prio-qopt
    type: struct
    members:
      -
        name: bands
        type: u32
        doc: Number of bands
      -
        name: priomap
        type: binary
        len: 16
        doc: Map of logical priority -> PRIO band
  -
    name: tc-red-qopt
    type: struct
    members:
      -
        name: limit
        type: u32
        doc: Hard queue length in packets
      -
        name: qth-min
        type: u32
        doc: Min average threshold in packets
      -
        name: qth-max
        type: u32
        doc: Max average threshold in packets
      -
        name: Wlog
        type: u8
        doc: log(W)
      -
        name: Plog
        type: u8
        doc: log(P_max / (qth-max - qth-min))
      -
        name: Scell-log
        type: u8
        doc: Cell size for idle damping
      -
        name: flags
        type: u8
  -
    name: tc-sfb-qopt
    type: struct
    members:
      -
        name: rehash-interval
        type: u32
      -
        name: warmup-time
        type: u32
      -
        name: max
        type: u32
      -
        name: bin-size
        type: u32
      -
        name: increment
        type: u32
      -
        name: decrement
        type: u32
      -
        name: limit
        type: u32
      -
        name: penalty-rate
        type: u32
      -
        name: penalty-burst
        type: u32
  -
    name: tc-sfq-qopt
    type: struct
    members:
      -
        name: quantum
        type: u32
        doc: Bytes per round allocated to flow
      -
        name: perturb-period
        type: s32
        doc: Period of hash perturbation
      -
        name: limit
        type: u32
        doc: Maximal packets in queue
      -
        name: divisor
        type: u32
        doc: Hash divisor
      -
        name: flows
        type: u32
        doc: Maximal number of flows
  -
    name: tc-sfqred-stats
    type: struct
    members:
      -
        name: prob-drop
        type: u32
        doc: Early drops, below max threshold
      -
        name: forced-drop
        type: u32
        doc: Early drops, after max threshold
      -
        name: prob-mark
        type: u32
        doc: Marked packets, below max threshold
      -
        name: forced-mark
        type: u32
        doc: Marked packets, after max threshold
      -
        name: prob-mark-head
        type: u32
        doc: Marked packets, below max threshold
      -
        name: forced-mark-head
        type: u32
        doc: Marked packets, after max threshold
  -
    name: tc-sfq-qopt-v1
    type: struct
    members:
      -
        name: v0
        type: binary
        struct: tc-sfq-qopt
      -
        name: depth
        type: u32
        doc: Maximum number of packets per flow
      -
        name: headdrop
        type: u32
      -
        name: limit
        type: u32
        doc: HARD maximal flow queue length in bytes
      -
        name: qth-min
        type: u32
        doc: Min average length threshold in bytes
      -
        name: qth-max
        type: u32
        doc: Max average length threshold in bytes
      -
        name: Wlog
        type: u8
        doc: log(W)
      -
        name: Plog
        type: u8
        doc: log(P_max / (qth-max - qth-min))
      -
        name: Scell-log
        type: u8
        doc: Cell size for idle damping
      -
        name: flags
        type: u8
      -
        name: max-P
        type: u32
        doc: probability, high resolution
      -
        name: stats
        type: binary
        struct: tc-sfqred-stats
  -
    name: tc-ratespec
    type: struct
    header: linux/pkt_sched.h
    members:
      -
        name: cell-log
        type: u8
      -
        name: linklayer
        type: u8
      -
        name: overhead
        type: u8
      -
        name: cell-align
        type: u8
      -
        name: mpu
        type: u8
      -
        name: rate
        type: u32
  -
    name: tc-tbf-qopt
    type: struct
    members:
      -
        name: rate
        type: binary
        struct: tc-ratespec
      -
        name: peakrate
        type: binary
        struct: tc-ratespec
      -
        name: limit
        type: u32
      -
        name: buffer
        type: u32
      -
        name: mtu
        type: u32
  -
    name: tc-sizespec
    type: struct
    members:
      -
        name: cell-log
        type: u8
      -
        name: size-log
        type: u8
      -
        name: cell-align
        type: s16
      -
        name: overhead
        type: s32
      -
        name: linklayer
        type: u32
      -
        name: mpu
        type: u32
      -
        name: mtu
        type: u32
      -
        name: tsize
        type: u32
  -
    name: gnet-estimator
    type: struct
    members:
      -
        name: interval
        type: s8
        doc: Sampling period
      -
        name: ewma-log
        type: u8
        doc: The log() of measurement window weight
  -
    name: tc-choke-xstats
    type: struct
    members:
      -
        name: early
        type: u32
        doc: Early drops
      -
        name: pdrop
        type: u32
        doc: Drops due to queue limits
      -
        name: other
        type: u32
        doc: Drops due to drop() calls
      -
        name: marked
        type: u32
        doc: Marked packets
      -
        name: matched
        type: u32
        doc: Drops due to flow match
  -
    name: tc-codel-xstats
    type: struct
    members:
      -
        name: maxpacket
        type: u32
        doc: Largest packet we've seen so far
      -
        name: count
        type: u32
        doc: |
          How many drops we've done since the last time we entered dropping
          state
      -
        name: lastcount
        type: u32
        doc: Count at entry to dropping state
      -
        name: ldelay
        type: u32
        doc: in-queue delay seen by most recently dequeued packet
      -
        name: drop-next
        type: s32
        doc: Time to drop next packet
      -
        name: drop-overlimit
        type: u32
        doc: Number of times max qdisc packet limit was hit
      -
        name: ecn-mark
        type: u32
        doc: Number of packets we've ECN marked instead of dropped
      -
        name: dropping
        type: u32
        doc: Are we in a dropping state?
      -
        name: ce-mark
        type: u32
        doc: Number of CE marked packets because of ce-threshold
  -
    name: tc-fq-codel-xstats
    type: struct
    members:
      -
        name: type
        type: u32
      -
        name: maxpacket
        type: u32
        doc: Largest packet we've seen so far
      -
        name: drop-overlimit
        type: u32
        doc: Number of times max qdisc packet limit was hit
      -
        name: ecn-mark
        type: u32
        doc: Number of packets we ECN marked instead of being dropped
      -
        name: new-flow-count
        type: u32
        doc: Number of times packets created a new flow
      -
        name: new-flows-len
        type: u32
        doc: Count of flows in new list
      -
        name: old-flows-len
        type: u32
        doc: Count of flows in old list
      -
        name: ce-mark
        type: u32
        doc: Packets above ce-threshold
      -
        name: memory-usage
        type: u32
        doc: Memory usage in bytes
      -
        name: drop-overmemory
        type: u32
  -
    name: tc-dualpi2-xstats
    type: struct
    members:
      -
        name: prob
        type: u32
        doc: Current base PI probability
      -
        name: delay-c
        type: u32
        doc: Current C-queue delay in microseconds
      -
        name: delay-l
        type: u32
        doc: Current L-queue delay in microseconds
      -
        name: pkts-in-c
        type: u32
        doc: Number of packets enqueued in the C-queue
      -
        name: pkts-in-l
        type: u32
        doc: Number of packets enqueued in the L-queue
      -
        name: maxq
        type: u32
        doc: Maximum number of packets seen by the DualPI2
      -
        name: ecn-mark
        type: u32
        doc: All packets marked with ECN
      -
        name: step-mark
        type: u32
        doc: Only packets marked with ECN due to L-queue step AQM
      -
        name: credit
        type: s32
        doc: Current credit value for WRR
      -
        name: memory-used
        type: u32
        doc: Memory used in bytes by the DualPI2
      -
        name: max-memory-used
        type: u32
        doc: Maximum memory used in bytes by the DualPI2
      -
        name: memory-limit
        type: u32
        doc: Memory limit in bytes
  -
    name: tc-fq-pie-xstats
    type: struct
    members:
      -
        name: packets-in
        type: u32
        doc: Total number of packets enqueued
      -
        name: dropped
        type: u32
        doc: Packets dropped due to fq_pie_action
      -
        name: overlimit
        type: u32
        doc: Dropped due to lack of space in queue
      -
        name: overmemory
        type: u32
        doc: Dropped due to lack of memory in queue
      -
        name: ecn-mark
        type: u32
        doc: Packets marked with ECN
      -
        name: new-flow-count
        type: u32
        doc: Count of new flows created by packets
      -
        name: new-flows-len
        type: u32
        doc: Count of flows in new list
      -
        name: old-flows-len
        type: u32
        doc: Count of flows in old list
      -
        name: memory-usage
        type: u32
        doc: Total memory across all queues
  -
    name: tc-fq-qd-stats
    type: struct
    members:
      -
        name: gc-flows
        type: u64
      -
        name: highprio-packets
        type: u64
        doc: obsolete
      -
        name: tcp-retrans
        type: u64
        doc: obsolete
      -
        name: throttled
        type: u64
      -
        name: flows-plimit
        type: u64
      -
        name: pkts-too-long
        type: u64
      -
        name: allocation-errors
        type: u64
      -
        name: time-next-delayed-flow
        type: s64
      -
        name: flows
        type: u32
      -
        name: inactive-flows
        type: u32
      -
        name: throttled-flows
        type: u32
      -
        name: unthrottle-latency-ns
        type: u32
      -
        name: ce-mark
        type: u64
        doc: Packets above ce-threshold
      -
        name: horizon-drops
        type: u64
      -
        name: horizon-caps
        type: u64
      -
        name: fastpath-packets
        type: u64
      -
        name: band-drops
        type: binary
        len: 24
      -
        name: band-pkt-count
        type: binary
        len: 12
      -
        name: pad
        type: pad
        len: 4
  -
    name: tc-hhf-xstats
    type: struct
    members:
      -
        name: drop-overlimit
        type: u32
        doc: Number of times max qdisc packet limit was hit
      -
        name: hh-overlimit
        type: u32
        doc: Number of times max heavy-hitters was hit
      -
        name: hh-tot-count
        type: u32
        doc: Number of captured heavy-hitters so far
      -
        name: hh-cur-count
        type: u32
        doc: Number of current heavy-hitters
  -
    name: tc-pie-xstats
    type: struct
    members:
      -
        name: prob
        type: u64
        doc: Current probability
      -
        name: delay
        type: u32
        doc: Current delay in ms
      -
        name: avg-dq-rate
        type: u32
        doc: Current average dq rate in bits/pie-time
      -
        name: dq-rate-estimating
        type: u32
        doc: Is avg-dq-rate being calculated?
      -
        name: packets-in
        type: u32
        doc: Total number of packets enqueued
      -
        name: dropped
        type: u32
        doc: Packets dropped due to pie action
      -
        name: overlimit
        type: u32
        doc: Dropped due to lack of space in queue
      -
        name: maxq
        type: u32
        doc: Maximum queue size
      -
        name: ecn-mark
        type: u32
        doc: Packets marked with ECN
  -
    name: tc-red-xstats
    type: struct
    members:
      -
        name: early
        type: u32
        doc: Early drops
      -
        name: pdrop
        type: u32
        doc: Drops due to queue limits
      -
        name: other
        type: u32
        doc: Drops due to drop() calls
      -
        name: marked
        type: u32
        doc: Marked packets
  -
    name: tc-sfb-xstats
    type: struct
    members:
      -
        name: earlydrop
        type: u32
      -
        name: penaltydrop
        type: u32
      -
        name: bucketdrop
        type: u32
      -
        name: queuedrop
        type: u32
      -
        name: childdrop
        type: u32
        doc: drops in child qdisc
      -
        name: marked
        type: u32
      -
        name: maxqlen
        type: u32
      -
        name: maxprob
        type: u32
      -
        name: avgprob
        type: u32
  -
    name: tc-sfq-xstats
    type: struct
    members:
      -
        name: allot
        type: s32
  -
    name: gnet-stats-basic
    type: struct
    members:
      -
        name: bytes
        type: u64
      -
        name: packets
        type: u32
  -
    name: gnet-stats-rate-est
    type: struct
    members:
      -
        name: bps
        type: u32
      -
        name: pps
        type: u32
  -
    name: gnet-stats-rate-est64
    type: struct
    members:
      -
        name: bps
        type: u64
      -
        name: pps
        type: u64
  -
    name: gnet-stats-queue
    type: struct
    members:
      -
        name: qlen
        type: u32
      -
        name: backlog
        type: u32
      -
        name: drops
        type: u32
      -
        name: requeues
        type: u32
      -
        name: overlimits
        type: u32
  -
    name: tc-u32-key
    type: struct
    members:
      -
        name: mask
        type: u32
        byte-order: big-endian
      -
        name: val
        type: u32
        byte-order: big-endian
      -
        name: "off"
        type: s32
      -
        name: offmask
        type: s32
  -
    name: tc-u32-mark
    type: struct
    members:
      -
        name: val
        type: u32
      -
        name: mask
        type: u32
      -
        name: success
        type: u32
  -
    name: tc-u32-sel
    type: struct
    members:
      -
        name: flags
        type: u8
      -
        name: offshift
        type: u8
      -
        name: nkeys
        type: u8
      -
        name: offmask
        type: u16
        byte-order: big-endian
      -
        name: "off"
        type: u16
      -
        name: offoff
        type: s16
      -
        name: hoff
        type: s16
      -
        name: hmask
        type: u32
        byte-order: big-endian
      -
        name: keys
        type: binary
        struct: tc-u32-key  # TODO: array
  -
    name: tc-u32-pcnt
    type: struct
    members:
      -
        name: rcnt
        type: u64
      -
        name: rhit
        type: u64
      -
        name: kcnts
        type: u64  # TODO: array
  -
    name: tcf-t
    type: struct
    members:
      -
        name: install
        type: u64
      -
        name: lastuse
        type: u64
      -
        name: expires
        type: u64
      -
        name: firstuse
        type: u64
  -
    name: tc-gact
    type: struct
    members:
      -
        name: index
        type: u32
      -
        name: capab
        type: u32
      -
        name: action
        type: s32
      -
        name: refcnt
        type: s32
      -
        name: bindcnt
        type: s32
  -
    name: tc-gact-p
    type: struct
    members:
      -
        name: ptype
        type: u16
      -
        name: pval
        type: u16
      -
        name: paction
        type: s32
  -
    name: tcf-ematch-tree-hdr
    type: struct
    members:
      -
        name: nmatches
        type: u16
      -
        name: progid
        type: u16
  -
    name: tc-basic-pcnt
    type: struct
    members:
      -
        name: rcnt
        type: u64
      -
        name: rhit
        type: u64
  -
    name: tc-matchall-pcnt
    type: struct
    members:
      -
        name: rhit
        type: u64
  -
    name: tc-mpls
    type: struct
    members:
      -
        name: index
        type: u32
      -
        name: capab
        type: u32
      -
        name: action
        type: s32
      -
        name: refcnt
        type: s32
      -
        name: bindcnt
        type: s32
      -
        name: m-action
        type: s32
  -
    name: tc-police
    type: struct
    members:
      -
        name: index
        type: u32
      -
        name: action
        type: s32
      -
        name: limit
        type: u32
      -
        name: burst
        type: u32
      -
        name: mtu
        type: u32
      -
        name: rate
        type: binary
        struct: tc-ratespec
      -
        name: peakrate
        type: binary
        struct: tc-ratespec
      -
        name: refcnt
        type: s32
      -
        name: bindcnt
        type: s32
      -
        name: capab
        type: u32
  -
    name: tc-pedit-sel
    type: struct
    members:
      -
        name: index
        type: u32
      -
        name: capab
        type: u32
      -
        name: action
        type: s32
      -
        name: refcnt
        type: s32
      -
        name: bindcnt
        type: s32
      -
        name: nkeys
        type: u8
      -
        name: flags
        type: u8
      -
        name: keys
        type: binary
        struct: tc-pedit-key  # TODO: array
  -
    name: tc-pedit-key
    type: struct
    members:
      -
        name: mask
        type: u32
      -
        name: val
        type: u32
      -
        name: "off"
        type: u32
      -
        name: at
        type: u32
      -
        name: offmask
        type: u32
      -
        name: shift
        type: u32
  -
    name: tc-vlan
    type: struct
    members:
      -
        name: index
        type: u32
      -
        name: capab
        type: u32
      -
        name: action
        type: s32
      -
        name: refcnt
        type: s32
      -
        name: bindcnt
        type: s32
      -
        name: v-action
        type: s32
attribute-sets:
  -
    name: attrs
    name-prefix: tca-
    attributes:
      -
        name: kind
        type: string
      -
        name: options
        type: sub-message
        sub-message: options-msg
        selector: kind
      -
        name: stats
        type: binary
        struct: tc-stats
      -
        name: xstats
        type: sub-message
        sub-message: tca-stats-app-msg
        selector: kind
      -
        name: rate
        type: binary
        struct: gnet-estimator
      -
        name: fcnt
        type: u32
      -
        name: stats2
        type: nest
        nested-attributes: tca-stats-attrs
      -
        name: stab
        type: nest
        nested-attributes: tca-stab-attrs
      -
        name: pad
        type: pad
      -
        name: dump-invisible
        type: flag
      -
        name: chain
        type: u32
      -
        name: hw-offload
        type: u8
      -
        name: ingress-block
        type: u32
      -
        name: egress-block
        type: u32
      -
        name: dump-flags
        type: bitfield32
      -
        name: ext-warn-msg
        type: string
  -
    name: act-attrs
    name-prefix: tca-act-
    attributes:
      -
        name: kind
        type: string
      -
        name: options
        type: sub-message
        sub-message: act-options-msg
        selector: kind
      -
        name: index
        type: u32
      -
        name: stats
        type: nest
        nested-attributes: tca-stats-attrs
      -
        name: pad
        type: pad
      -
        name: cookie
        type: binary
      -
        name: flags
        type: bitfield32
      -
        name: hw-stats
        type: bitfield32
      -
        name: used-hw-stats
        type: bitfield32
      -
        name: in-hw-count
        type: u32
  -
    name: act-bpf-attrs
    name-prefix: tca-act-bpf-
    header: linux/tc_act/tc_bpf.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: ops-len
        type: u16
      -
        name: ops
        type: binary
      -
        name: fd
        type: u32
      -
        name: name
        type: string
      -
        name: pad
        type: pad
      -
        name: tag
        type: binary
      -
        name: id
        type: binary
  -
    name: act-connmark-attrs
    name-prefix: tca-connmark-
    header: linux/tc_act/tc_connmark.h
    attributes:
      -
        name: parms
        type: binary
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: pad
        type: pad
  -
    name: act-csum-attrs
    name-prefix: tca-csum-
    header: linux/tc_act/tc_csum.h
    attributes:
      -
        name: parms
        type: binary
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: pad
        type: pad
  -
    name: act-ct-attrs
    name-prefix: tca-ct-
    header: linux/tc_act/tc_ct.h
    attributes:
      -
        name: parms
        type: binary
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: action
        type: u16
      -
        name: zone
        type: u16
      -
        name: mark
        type: u32
      -
        name: mark-mask
        type: u32
      -
        name: labels
        type: binary
      -
        name: labels-mask
        type: binary
      -
        name: nat-ipv4-min
        type: u32
        byte-order: big-endian
      -
        name: nat-ipv4-max
        type: u32
        byte-order: big-endian
      -
        name: nat-ipv6-min
        type: binary
      -
        name: nat-ipv6-max
        type: binary
      -
        name: nat-port-min
        type: u16
        byte-order: big-endian
      -
        name: nat-port-max
        type: u16
        byte-order: big-endian
      -
        name: pad
        type: pad
      -
        name: helper-name
        type: string
      -
        name: helper-family
        type: u8
      -
        name: helper-proto
        type: u8
  -
    name: act-ctinfo-attrs
    name-prefix: tca-ctinfo-
    header: linux/tc_act/tc_ctinfo.h
    attributes:
      -
        name: pad
        type: pad
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: act
        type: binary
      -
        name: zone
        type: u16
      -
        name: parms-dscp-mask
        type: u32
      -
        name: parms-dscp-statemask
        type: u32
      -
        name: parms-cpmark-mask
        type: u32
      -
        name: stats-dscp-set
        type: u64
      -
        name: stats-dscp-error
        type: u64
      -
        name: stats-cpmark-set
        type: u64
  -
    name: act-gate-attrs
    name-prefix: tca-gate-
    header: linux/tc_act/tc_gate.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: pad
        type: pad
      -
        name: priority
        type: s32
      -
        name: entry-list
        type: binary
      -
        name: base-time
        type: u64
      -
        name: cycle-time
        type: u64
      -
        name: cycle-time-ext
        type: u64
      -
        name: flags
        type: u32
      -
        name: clockid
        type: s32
  -
    name: act-ife-attrs
    name-prefix: tca-ife-
    header: linux/tc_act/tc_ife.h
    attributes:
      -
        name: parms
        type: binary
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: dmac
        type: binary
      -
        name: smac
        type: binary
      -
        name: type
        type: u16
      -
        name: metalst
        type: binary
      -
        name: pad
        type: pad
  -
    name: act-mirred-attrs
    name-prefix: tca-mirred-
    header: linux/tc_act/tc_mirred.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: pad
        type: pad
      -
        name: blockid
        type: binary
  -
    name: act-mpls-attrs
    name-prefix: tca-mpls-
    header: linux/tc_act/tc_mpls.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
        struct: tc-mpls
      -
        name: pad
        type: pad
      -
        name: proto
        type: u16
        byte-order: big-endian
      -
        name: label
        type: u32
      -
        name: tc
        type: u8
      -
        name: ttl
        type: u8
      -
        name: bos
        type: u8
  -
    name: act-nat-attrs
    name-prefix: tca-nat-
    header: linux/tc_act/tc_nat.h
    attributes:
      -
        name: parms
        type: binary
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: pad
        type: pad
  -
    name: act-pedit-attrs
    name-prefix: tca-pedit-
    header: linux/tc_act/tc_pedit.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
        struct: tc-pedit-sel
      -
        name: pad
        type: pad
      -
        name: parms-ex
        type: binary
      -
        name: keys-ex
        type: binary
      -
        name: key-ex
        type: binary
  -
    name: act-simple-attrs
    name-prefix: tca-def-
    header: linux/tc_act/tc_defact.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: data
        type: binary
      -
        name: pad
        type: pad
  -
    name: act-skbedit-attrs
    name-prefix: tca-skbedit-
    header: linux/tc_act/tc_skbedit.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: priority
        type: u32
      -
        name: queue-mapping
        type: u16
      -
        name: mark
        type: u32
      -
        name: pad
        type: pad
      -
        name: ptype
        type: u16
      -
        name: mask
        type: u32
      -
        name: flags
        type: u64
      -
        name: queue-mapping-max
        type: u16
  -
    name: act-skbmod-attrs
    name-prefix: tca-skbmod-
    header: linux/tc_act/tc_skbmod.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: dmac
        type: binary
      -
        name: smac
        type: binary
      -
        name: etype
        type: binary
      -
        name: pad
        type: pad
  -
    name: act-tunnel-key-attrs
    name-prefix: tca-tunnel-key-
    header: linux/tc_act/tc_tunnel_key.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
      -
        name: enc-ipv4-src
        type: u32
        byte-order: big-endian
      -
        name: enc-ipv4-dst
        type: u32
        byte-order: big-endian
      -
        name: enc-ipv6-src
        type: binary
      -
        name: enc-ipv6-dst
        type: binary
      -
        name: enc-key-id
        type: u64
        byte-order: big-endian
      -
        name: pad
        type: pad
      -
        name: enc-dst-port
        type: u16
        byte-order: big-endian
      -
        name: no-csum
        type: u8
      -
        name: enc-opts
        type: binary
      -
        name: enc-tos
        type: u8
      -
        name: enc-ttl
        type: u8
      -
        name: no-frag
        type: flag
  -
    name: act-vlan-attrs
    name-prefix: tca-vlan-
    header: linux/tc_act/tc_vlan.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
        struct: tc-vlan
      -
        name: push-vlan-id
        type: u16
      -
        name: push-vlan-protocol
        type: u16
      -
        name: pad
        type: pad
      -
        name: push-vlan-priority
        type: u8
      -
        name: push-eth-dst
        type: binary
      -
        name: push-eth-src
        type: binary
  -
    name: basic-attrs
    name-prefix: tca-basic-
    attributes:
      -
        name: classid
        type: u32
      -
        name: ematches
        type: nest
        nested-attributes: ematch-attrs
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: pcnt
        type: binary
        struct: tc-basic-pcnt
      -
        name: pad
        type: pad
  -
    name: bpf-attrs
    name-prefix: tca-bpf-
    attributes:
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: classid
        type: u32
      -
        name: ops-len
        type: u16
      -
        name: ops
        type: binary
      -
        name: fd
        type: u32
      -
        name: name
        type: string
      -
        name: flags
        type: u32
      -
        name: flags-gen
        type: u32
      -
        name: tag
        type: binary
      -
        name: id
        type: u32
  -
    name: cake-attrs
    name-prefix: tca-cake-
    attributes:
      -
        name: pad
        type: pad
      -
        name: base-rate64
        type: u64
      -
        name: diffserv-mode
        type: u32
      -
        name: atm
        type: u32
      -
        name: flow-mode
        type: u32
      -
        name: overhead
        type: u32
      -
        name: rtt
        type: u32
      -
        name: target
        type: u32
      -
        name: autorate
        type: u32
      -
        name: memory
        type: u32
      -
        name: nat
        type: u32
      -
        name: raw
        type: u32
      -
        name: wash
        type: u32
      -
        name: mpu
        type: u32
      -
        name: ingress
        type: u32
      -
        name: ack-filter
        type: u32
      -
        name: split-gso
        type: u32
      -
        name: fwmark
        type: u32
  -
    name: cake-stats-attrs
    name-prefix: tca-cake-stats-
    attributes:
      -
        name: pad
        type: pad
      -
        name: capacity-estimate64
        type: u64
      -
        name: memory-limit
        type: u32
      -
        name: memory-used
        type: u32
      -
        name: avg-netoff
        type: u32
      -
        name: min-netlen
        type: u32
      -
        name: max-netlen
        type: u32
      -
        name: min-adjlen
        type: u32
      -
        name: max-adjlen
        type: u32
      -
        name: tin-stats
        type: indexed-array
        sub-type: nest
        nested-attributes: cake-tin-stats-attrs
      -
        name: deficit
        type: s32
      -
        name: cobalt-count
        type: u32
      -
        name: dropping
        type: u32
      -
        name: drop-next-us
        type: s32
      -
        name: p-drop
        type: u32
      -
        name: blue-timer-us
        type: s32
  -
    name: cake-tin-stats-attrs
    name-prefix: tca-cake-tin-stats-
    attributes:
      -
        name: pad
        type: pad
      -
        name: sent-packets
        type: u32
      -
        name: sent-bytes64
        type: u64
      -
        name: dropped-packets
        type: u32
      -
        name: dropped-bytes64
        type: u64
      -
        name: acks-dropped-packets
        type: u32
      -
        name: acks-dropped-bytes64
        type: u64
      -
        name: ecn-marked-packets
        type: u32
      -
        name: ecn-marked-bytes64
        type: u64
      -
        name: backlog-packets
        type: u32
      -
        name: backlog-bytes
        type: u32
      -
        name: threshold-rate64
        type: u64
      -
        name: target-us
        type: u32
      -
        name: interval-us
        type: u32
      -
        name: way-indirect-hits
        type: u32
      -
        name: way-misses
        type: u32
      -
        name: way-collisions
        type: u32
      -
        name: peak-delay-us
        type: u32
      -
        name: avg-delay-us
        type: u32
      -
        name: base-delay-us
        type: u32
      -
        name: sparse-flows
        type: u32
      -
        name: bulk-flows
        type: u32
      -
        name: unresponsive-flows
        type: u32
      -
        name: max-skblen
        type: u32
      -
        name: flow-quantum
        type: u32
  -
    name: cbs-attrs
    name-prefix: tca-cbs-
    attributes:
      -
        name: parms
        type: binary
        struct: tc-cbs-qopt
  -
    name: cgroup-attrs
    name-prefix: tca-cgroup-
    attributes:
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: ematches
        type: binary
  -
    name: choke-attrs
    name-prefix: tca-choke-
    attributes:
      -
        name: parms
        type: binary
        struct: tc-red-qopt
      -
        name: stab
        type: binary
        checks:
          min-len: 256
          max-len: 256
      -
        name: max-p
        type: u32
  -
    name: codel-attrs
    name-prefix: tca-codel-
    attributes:
      -
        name: target
        type: u32
      -
        name: limit
        type: u32
      -
        name: interval
        type: u32
      -
        name: ecn
        type: u32
      -
        name: ce-threshold
        type: u32
  -
    name: drr-attrs
    name-prefix: tca-drr-
    attributes:
      -
        name: quantum
        type: u32
  -
    name: dualpi2-attrs
    name-prefix: tca-dualpi2-
    attributes:
      -
        name: limit
        type: u32
        doc: Limit of total number of packets in queue
      -
        name: memory-limit
        type: u32
        doc: Memory limit of total number of packets in queue
      -
        name: target
        type: u32
        doc: Classic target delay in microseconds
      -
        name: tupdate
        type: u32
        doc: Drop probability update interval time in microseconds
      -
        name: alpha
        type: u32
        doc: Integral gain factor in Hz for PI controller
      -
        name: beta
        type: u32
        doc: Proportional gain factor in Hz for PI controller
      -
        name: step-thresh-pkts
        type: u32
        doc: L4S step marking threshold in packets
      -
        name: step-thresh-us
        type: u32
        doc: L4S Step marking threshold in microseconds
      -
        name: min-qlen-step
        type: u32
        doc: Packets enqueued to the L-queue can apply the step threshold
             when the queue length of L-queue is larger than this value.
             (0 is recommended)
      -
        name: coupling
        type: u8
        doc: Probability coupling factor between Classic and L4S
             (2 is recommended)
      -
        name: drop-overload
        type: u8
        doc: Control the overload strategy (drop to preserve latency or
             let the queue overflow)
        enum: dualpi2-drop-overload
      -
        name: drop-early
        type: u8
        doc: Decide where the Classic packets are PI-based dropped or marked
        enum: dualpi2-drop-early
      -
        name: c-protection
        type: u8
        doc: Classic WRR weight in percentage (from 0 to 100)
      -
        name: ecn-mask
        type: u8
        doc: Configure the L-queue ECN classifier
        enum: dualpi2-ecn-mask
      -
        name: split-gso
        type: u8
        doc: Split aggregated skb or not
        enum: dualpi2-split-gso
  -
    name: ematch-attrs
    name-prefix: tca-ematch-
    attr-max-name: tca-ematch-tree-max
    attributes:
      -
        name: tree-hdr
        type: binary
        struct: tcf-ematch-tree-hdr
      -
        name: tree-list
        type: binary
  -
    name: flow-attrs
    name-prefix: tca-flow-
    attributes:
      -
        name: keys
        type: u32
      -
        name: mode
        type: u32
      -
        name: baseclass
        type: u32
      -
        name: rshift
        type: u32
      -
        name: addend
        type: u32
      -
        name: mask
        type: u32
      -
        name: xor
        type: u32
      -
        name: divisor
        type: u32
      -
        name: act
        type: binary
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: ematches
        type: binary
      -
        name: perturb
        type: u32
  -
    name: flower-attrs
    name-prefix: tca-flower-
    attributes:
      -
        name: classid
        type: u32
      -
        name: indev
        type: string
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: key-eth-dst
        type: binary
        display-hint: mac
      -
        name: key-eth-dst-mask
        type: binary
        display-hint: mac
      -
        name: key-eth-src
        type: binary
        display-hint: mac
      -
        name: key-eth-src-mask
        type: binary
        display-hint: mac
      -
        name: key-eth-type
        type: u16
        byte-order: big-endian
      -
        name: key-ip-proto
        type: u8
      -
        name: key-ipv4-src
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-ipv4-src-mask
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-ipv4-dst
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-ipv4-dst-mask
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-ipv6-src
        type: binary
        display-hint: ipv6
      -
        name: key-ipv6-src-mask
        type: binary
        display-hint: ipv6
      -
        name: key-ipv6-dst
        type: binary
        display-hint: ipv6
      -
        name: key-ipv6-dst-mask
        type: binary
        display-hint: ipv6
      -
        name: key-tcp-src
        type: u16
        byte-order: big-endian
      -
        name: key-tcp-dst
        type: u16
        byte-order: big-endian
      -
        name: key-udp-src
        type: u16
        byte-order: big-endian
      -
        name: key-udp-dst
        type: u16
        byte-order: big-endian
      -
        name: flags
        type: u32
        enum: cls-flags
        enum-as-flags: true
      -
        name: key-vlan-id
        type: u16
        byte-order: big-endian
      -
        name: key-vlan-prio
        type: u8
      -
        name: key-vlan-eth-type
        type: u16
        byte-order: big-endian
      -
        name: key-enc-key-id
        type: u32
        byte-order: big-endian
      -
        name: key-enc-ipv4-src
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-enc-ipv4-src-mask
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-enc-ipv4-dst
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-enc-ipv4-dst-mask
        type: u32
        byte-order: big-endian
        display-hint: ipv4
      -
        name: key-enc-ipv6-src
        type: binary
        display-hint: ipv6
      -
        name: key-enc-ipv6-src-mask
        type: binary
        display-hint: ipv6
      -
        name: key-enc-ipv6-dst
        type: binary
        display-hint: ipv6
      -
        name: key-enc-ipv6-dst-mask
        type: binary
        display-hint: ipv6
      -
        name: key-tcp-src-mask
        type: u16
        byte-order: big-endian
      -
        name: key-tcp-dst-mask
        type: u16
        byte-order: big-endian
      -
        name: key-udp-src-mask
        type: u16
        byte-order: big-endian
      -
        name: key-udp-dst-mask
        type: u16
        byte-order: big-endian
      -
        name: key-sctp-src-mask
        type: u16
        byte-order: big-endian
      -
        name: key-sctp-dst-mask
        type: u16
        byte-order: big-endian
      -
        name: key-sctp-src
        type: u16
        byte-order: big-endian
      -
        name: key-sctp-dst
        type: u16
        byte-order: big-endian
      -
        name: key-enc-udp-src-port
        type: u16
        byte-order: big-endian
      -
        name: key-enc-udp-src-port-mask
        type: u16
        byte-order: big-endian
      -
        name: key-enc-udp-dst-port
        type: u16
        byte-order: big-endian
      -
        name: key-enc-udp-dst-port-mask
        type: u16
        byte-order: big-endian
      -
        name: key-flags
        type: u32
        byte-order: big-endian
        enum: flower-key-ctrl-flags
        enum-as-flags: true
      -
        name: key-flags-mask
        type: u32
        byte-order: big-endian
        enum: flower-key-ctrl-flags
        enum-as-flags: true
      -
        name: key-icmpv4-code
        type: u8
      -
        name: key-icmpv4-code-mask
        type: u8
      -
        name: key-icmpv4-type
        type: u8
      -
        name: key-icmpv4-type-mask
        type: u8
      -
        name: key-icmpv6-code
        type: u8
      -
        name: key-icmpv6-code-mask
        type: u8
      -
        name: key-icmpv6-type
        type: u8
      -
        name: key-icmpv6-type-mask
        type: u8
      -
        name: key-arp-sip
        type: u32
        byte-order: big-endian
      -
        name: key-arp-sip-mask
        type: u32
        byte-order: big-endian
      -
        name: key-arp-tip
        type: u32
        byte-order: big-endian
      -
        name: key-arp-tip-mask
        type: u32
        byte-order: big-endian
      -
        name: key-arp-op
        type: u8
      -
        name: key-arp-op-mask
        type: u8
      -
        name: key-arp-sha
        type: binary
        display-hint: mac
      -
        name: key-arp-sha-mask
        type: binary
        display-hint: mac
      -
        name: key-arp-tha
        type: binary
        display-hint: mac
      -
        name: key-arp-tha-mask
        type: binary
        display-hint: mac
      -
        name: key-mpls-ttl
        type: u8
      -
        name: key-mpls-bos
        type: u8
      -
        name: key-mpls-tc
        type: u8
      -
        name: key-mpls-label
        type: u32
        byte-order: big-endian
      -
        name: key-tcp-flags
        type: u16
        byte-order: big-endian
      -
        name: key-tcp-flags-mask
        type: u16
        byte-order: big-endian
      -
        name: key-ip-tos
        type: u8
      -
        name: key-ip-tos-mask
        type: u8
      -
        name: key-ip-ttl
        type: u8
      -
        name: key-ip-ttl-mask
        type: u8
      -
        name: key-cvlan-id
        type: u16
        byte-order: big-endian
      -
        name: key-cvlan-prio
        type: u8
      -
        name: key-cvlan-eth-type
        type: u16
        byte-order: big-endian
      -
        name: key-enc-ip-tos
        type: u8
      -
        name: key-enc-ip-tos-mask
        type: u8
      -
        name: key-enc-ip-ttl
        type: u8
      -
        name: key-enc-ip-ttl-mask
        type: u8
      -
        name: key-enc-opts
        type: nest
        nested-attributes: flower-key-enc-opts-attrs
      -
        name: key-enc-opts-mask
        type: nest
        nested-attributes: flower-key-enc-opts-attrs
      -
        name: in-hw-count
        type: u32
      -
        name: key-port-src-min
        type: u16
        byte-order: big-endian
      -
        name: key-port-src-max
        type: u16
        byte-order: big-endian
      -
        name: key-port-dst-min
        type: u16
        byte-order: big-endian
      -
        name: key-port-dst-max
        type: u16
        byte-order: big-endian
      -
        name: key-ct-state
        type: u16
      -
        name: key-ct-state-mask
        type: u16
      -
        name: key-ct-zone
        type: u16
      -
        name: key-ct-zone-mask
        type: u16
      -
        name: key-ct-mark
        type: u32
      -
        name: key-ct-mark-mask
        type: u32
      -
        name: key-ct-labels
        type: binary
      -
        name: key-ct-labels-mask
        type: binary
      -
        name: key-mpls-opts
        type: nest
        nested-attributes: flower-key-mpls-opt-attrs
      -
        name: key-hash
        type: u32
      -
        name: key-hash-mask
        type: u32
      -
        name: key-num-of-vlans
        type: u8
      -
        name: key-pppoe-sid
        type: u16
        byte-order: big-endian
      -
        name: key-ppp-proto
        type: u16
        byte-order: big-endian
      -
        name: key-l2tpv3-sid
        type: u32
        byte-order: big-endian
      -
        name: l2-miss
        type: u8
      -
        name: key-cfm
        type: nest
        nested-attributes: flower-key-cfm-attrs
      -
        name: key-spi
        type: u32
        byte-order: big-endian
      -
        name: key-spi-mask
        type: u32
        byte-order: big-endian
      -
        name: key-enc-flags
        type: u32
        byte-order: big-endian
        enum: flower-key-ctrl-flags
        enum-as-flags: true
      -
        name: key-enc-flags-mask
        type: u32
        byte-order: big-endian
        enum: flower-key-ctrl-flags
        enum-as-flags: true
  -
    name: flower-key-enc-opts-attrs
    name-prefix: tca-flower-key-enc-opts-
    attributes:
      -
        name: geneve
        type: nest
        nested-attributes: flower-key-enc-opt-geneve-attrs
      -
        name: vxlan
        type: nest
        nested-attributes: flower-key-enc-opt-vxlan-attrs
      -
        name: erspan
        type: nest
        nested-attributes: flower-key-enc-opt-erspan-attrs
      -
        name: gtp
        type: nest
        nested-attributes: flower-key-enc-opt-gtp-attrs
  -
    name: flower-key-enc-opt-geneve-attrs
    name-prefix: tca-flower-key-enc-opt-geneve-
    attributes:
      -
        name: class
        type: u16
      -
        name: type
        type: u8
      -
        name: data
        type: binary
  -
    name: flower-key-enc-opt-vxlan-attrs
    name-prefix: tca-flower-key-enc-opt-vxlan-
    attributes:
      -
        name: gbp
        type: u32
  -
    name: flower-key-enc-opt-erspan-attrs
    name-prefix: tca-flower-key-enc-opt-erspan-
    attributes:
      -
        name: ver
        type: u8
      -
        name: index
        type: u32
      -
        name: dir
        type: u8
      -
        name: hwid
        type: u8
  -
    name: flower-key-enc-opt-gtp-attrs
    name-prefix: tca-flower-key-enc-opt-gtp-
    attributes:
      -
        name: pdu-type
        type: u8
      -
        name: qfi
        type: u8
  -
    name: flower-key-mpls-opt-attrs
    name-prefix: tca-flower-key-mpls-opt-
    attr-max-name: tca-flower-key-mpls-opt-lse-max
    attributes:
      -
        name: lse-depth
        type: u8
      -
        name: lse-ttl
        type: u8
      -
        name: lse-bos
        type: u8
      -
        name: lse-tc
        type: u8
      -
        name: lse-label
        type: u32
  -
    name: flower-key-cfm-attrs
    name-prefix: tca-flower-key-cfm-
    attributes:
      -
        name: md-level
        type: u8
      -
        name: opcode
        type: u8
  -
    name: fw-attrs
    name-prefix: tca-fw-
    attributes:
      -
        name: classid
        type: u32
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: indev
        type: string
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: mask
        type: u32
  -
    name: gred-attrs
    name-prefix: tca-gred-
    attributes:
      -
        name: parms
        type: binary  # array of struct: tc-gred-qopt
      -
        name: stab
        type: binary
        sub-type: u8
      -
        name: dps
        type: binary
        struct: tc-gred-sopt
      -
        name: max-p
        type: binary
        sub-type: u32
      -
        name: limit
        type: u32
      -
        name: vq-list
        type: nest
        nested-attributes: tca-gred-vq-list-attrs
  -
    name: tca-gred-vq-list-attrs
    name-prefix: tca-gred-vq-
    attributes:
      -
        name: entry
        type: nest
        nested-attributes: tca-gred-vq-entry-attrs
        multi-attr: true
  -
    name: tca-gred-vq-entry-attrs
    name-prefix: tca-gred-vq-
    attributes:
      -
        name: pad
        type: pad
      -
        name: dp
        type: u32
      -
        name: stat-bytes
        type: u64
      -
        name: stat-packets
        type: u32
      -
        name: stat-backlog
        type: u32
      -
        name: stat-prob-drop
        type: u32
      -
        name: stat-prob-mark
        type: u32
      -
        name: stat-forced-drop
        type: u32
      -
        name: stat-forced-mark
        type: u32
      -
        name: stat-pdrop
        type: u32
      -
        name: stat-other
        type: u32
      -
        name: flags
        type: u32
  -
    name: hfsc-attrs
    attributes:
      -
        name: rsc
        type: binary
      -
        name: fsc
        type: binary
      -
        name: usc
        type: binary
  -
    name: hhf-attrs
    name-prefix: tca-hhf-
    attributes:
      -
        name: backlog-limit
        type: u32
      -
        name: quantum
        type: u32
      -
        name: hh-flows-limit
        type: u32
      -
        name: reset-timeout
        type: u32
      -
        name: admit-bytes
        type: u32
      -
        name: evict-timeout
        type: u32
      -
        name: non-hh-weight
        type: u32
  -
    name: htb-attrs
    name-prefix: tca-htb-
    attributes:
      -
        name: parms
        type: binary
        struct: tc-htb-opt
      -
        name: init
        type: binary
        struct: tc-htb-glob
      -
        name: ctab
        type: binary
      -
        name: rtab
        type: binary
      -
        name: direct-qlen
        type: u32
      -
        name: rate64
        type: u64
      -
        name: ceil64
        type: u64
      -
        name: pad
        type: pad
      -
        name: offload
        type: flag
  -
    name: matchall-attrs
    name-prefix: tca-matchall-
    attributes:
      -
        name: classid
        type: u32
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: flags
        type: u32
      -
        name: pcnt
        type: binary
        struct: tc-matchall-pcnt
      -
        name: pad
        type: pad
  -
    name: etf-attrs
    name-prefix: tca-etf-
    attributes:
      -
        name: parms
        type: binary
        struct: tc-etf-qopt
  -
    name: ets-attrs
    name-prefix: tca-ets-
    attributes:
      -
        name: nbands
        type: u8
      -
        name: nstrict
        type: u8
      -
        name: quanta
        type: nest
        nested-attributes: ets-attrs
      -
        name: quanta-band
        type: u32
        multi-attr: true
      -
        name: priomap
        type: nest
        nested-attributes: ets-attrs
      -
        name: priomap-band
        type: u8
        multi-attr: true
  -
    name: fq-attrs
    name-prefix: tca-fq-
    attributes:
      -
        name: plimit
        type: u32
        doc: Limit of total number of packets in queue
      -
        name: flow-plimit
        type: u32
        doc: Limit of packets per flow
      -
        name: quantum
        type: u32
        doc: RR quantum
      -
        name: initial-quantum
        type: u32
        doc: RR quantum for new flow
      -
        name: rate-enable
        type: u32
        doc: Enable / disable rate limiting
      -
        name: flow-default-rate
        type: u32
        doc: Obsolete, do not use
      -
        name: flow-max-rate
        type: u32
        doc: Per flow max rate
      -
        name: buckets-log
        type: u32
        doc: log2(number of buckets)
      -
        name: flow-refill-delay
        type: u32
        doc: Flow credit refill delay in usec
      -
        name: orphan-mask
        type: u32
        doc: Mask applied to orphaned skb hashes
      -
        name: low-rate-threshold
        type: u32
        doc: Per packet delay under this rate
      -
        name: ce-threshold
        type: u32
        doc: DCTCP-like CE marking threshold
      -
        name: timer-slack
        type: u32
      -
        name: horizon
        type: u32
        doc: Time horizon in usec
      -
        name: horizon-drop
        type: u8
        doc: Drop packets beyond horizon, or cap their EDT
      -
        name: priomap
        type: binary
        struct: tc-prio-qopt
      -
        name: weights
        type: binary
        sub-type: s32
        doc: Weights for each band
  -
    name: fq-codel-attrs
    name-prefix: tca-fq-codel-
    attributes:
      -
        name: target
        type: u32
      -
        name: limit
        type: u32
      -
        name: interval
        type: u32
      -
        name: ecn
        type: u32
      -
        name: flows
        type: u32
      -
        name: quantum
        type: u32
      -
        name: ce-threshold
        type: u32
      -
        name: drop-batch-size
        type: u32
      -
        name: memory-limit
        type: u32
      -
        name: ce-threshold-selector
        type: u8
      -
        name: ce-threshold-mask
        type: u8
  -
    name: fq-pie-attrs
    name-prefix: tca-fq-pie-
    attributes:
      -
        name: limit
        type: u32
      -
        name: flows
        type: u32
      -
        name: target
        type: u32
      -
        name: tupdate
        type: u32
      -
        name: alpha
        type: u32
      -
        name: beta
        type: u32
      -
        name: quantum
        type: u32
      -
        name: memory-limit
        type: u32
      -
        name: ecn-prob
        type: u32
      -
        name: ecn
        type: u32
      -
        name: bytemode
        type: u32
      -
        name: dq-rate-estimator
        type: u32
  -
    name: netem-attrs
    name-prefix: tca-netem-
    attributes:
      -
        name: corr
        type: binary
        struct: tc-netem-corr
      -
        name: delay-dist
        type: binary
        sub-type: s16
      -
        name: reorder
        type: binary
        struct: tc-netem-reorder
      -
        name: corrupt
        type: binary
        struct: tc-netem-corrupt
      -
        name: loss
        type: nest
        nested-attributes: netem-loss-attrs
      -
        name: rate
        type: binary
        struct: tc-netem-rate
      -
        name: ecn
        type: u32
      -
        name: rate64
        type: u64
      -
        name: pad
        type: u32
      -
        name: latency64
        type: s64
      -
        name: jitter64
        type: s64
      -
        name: slot
        type: binary
        struct: tc-netem-slot
      -
        name: slot-dist
        type: binary
        sub-type: s16
      -
        name: prng-seed
        type: u64
  -
    name: netem-loss-attrs
    name-prefix: netem-loss-
    attributes:
      -
        name: gi
        type: binary
        doc: General Intuitive - 4 state model
        struct: tc-netem-gimodel
      -
        name: ge
        type: binary
        doc: Gilbert Elliot models
        struct: tc-netem-gemodel
  -
    name: pie-attrs
    name-prefix: tca-pie-
    attributes:
      -
        name: target
        type: u32
      -
        name: limit
        type: u32
      -
        name: tupdate
        type: u32
      -
        name: alpha
        type: u32
      -
        name: beta
        type: u32
      -
        name: ecn
        type: u32
      -
        name: bytemode
        type: u32
      -
        name: dq-rate-estimator
        type: u32
  -
    name: police-attrs
    name-prefix: tca-police-
    attributes:
      -
        name: tbf
        type: binary
        struct: tc-police
      -
        name: rate
        type: binary  # TODO
      -
        name: peakrate
        type: binary  # TODO
      -
        name: avrate
        type: u32
      -
        name: result
        type: u32
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: pad
        type: pad
      -
        name: rate64
        type: u64
      -
        name: peakrate64
        type: u64
      -
        name: pktrate64
        type: u64
      -
        name: pktburst64
        type: u64
  -
    name: qfq-attrs
    name-prefix: tca-qfq-
    attributes:
      -
        name: weight
        type: u32
      -
        name: lmax
        type: u32
  -
    name: red-attrs
    name-prefix: tca-red-
    attributes:
      -
        name: parms
        type: binary
        struct: tc-red-qopt
      -
        name: stab
        type: binary
      -
        name: max-p
        type: u32
      -
        name: flags
        type: bitfield32
      -
        name: early-drop-block
        type: u32
      -
        name: mark-block
        type: u32
  -
    name: route-attrs
    name-prefix: tca-route4-
    attributes:
      -
        name: classid
        type: u32
      -
        name: to
        type: u32
      -
        name: from
        type: u32
      -
        name: iif
        type: u32
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
  -
    name: taprio-attrs
    name-prefix: tca-taprio-attr-
    attributes:
      -
        name: priomap
        type: binary
        struct: tc-mqprio-qopt
      -
        name: sched-entry-list
        type: nest
        nested-attributes: taprio-sched-entry-list
      -
        name: sched-base-time
        type: s64
      -
        name: sched-single-entry
        type: nest
        nested-attributes: taprio-sched-entry
      -
        name: sched-clockid
        type: s32
      -
        name: pad
        type: pad
      -
        name: admin-sched
        type: binary
      -
        name: sched-cycle-time
        type: s64
      -
        name: sched-cycle-time-extension
        type: s64
      -
        name: flags
        type: u32
      -
        name: txtime-delay
        type: u32
      -
        name: tc-entry
        type: nest
        nested-attributes: taprio-tc-entry-attrs
  -
    name: taprio-sched-entry-list
    name-prefix: tca-taprio-sched-
    attributes:
      -
        name: entry
        type: nest
        nested-attributes: taprio-sched-entry
        multi-attr: true
  -
    name: taprio-sched-entry
    name-prefix: tca-taprio-sched-entry-
    attributes:
      -
        name: index
        type: u32
      -
        name: cmd
        type: u8
      -
        name: gate-mask
        type: u32
      -
        name: interval
        type: u32
  -
    name: taprio-tc-entry-attrs
    name-prefix: tca-taprio-tc-entry-
    attributes:
      -
        name: index
        type: u32
      -
        name: max-sdu
        type: u32
      -
        name: fp
        type: u32
  -
    name: tbf-attrs
    name-prefix: tca-tbf-
    attributes:
      -
        name: parms
        type: binary
        struct: tc-tbf-qopt
      -
        name: rtab
        type: binary
      -
        name: ptab
        type: binary
      -
        name: rate64
        type: u64
      -
        name: prate64
        type: u64
      -
        name: burst
        type: u32
      -
        name: pburst
        type: u32
      -
        name: pad
        type: pad
  -
    name: act-sample-attrs
    name-prefix: tca-sample-
    header: linux/tc_act/tc_sample.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
        struct: tc-gact
      -
        name: rate
        type: u32
      -
        name: trunc-size
        type: u32
      -
        name: psample-group
        type: u32
      -
        name: pad
        type: pad
  -
    name: act-gact-attrs
    name-prefix: tca-gact-
    header: linux/tc_act/tc_gact.h
    attributes:
      -
        name: tm
        type: binary
        struct: tcf-t
      -
        name: parms
        type: binary
        struct: tc-gact
      -
        name: prob
        type: binary
        struct: tc-gact-p
      -
        name: pad
        type: pad
  -
    name: tca-stab-attrs
    name-prefix: tca-stab-
    attributes:
      -
        name: base
        type: binary
        struct: tc-sizespec
      -
        name: data
        type: binary
  -
    name: tca-stats-attrs
    name-prefix: tca-stats-
    header: linux/gen_stats.h
    attributes:
      -
        name: basic
        type: binary
        struct: gnet-stats-basic
      -
        name: rate-est
        type: binary
        struct: gnet-stats-rate-est
      -
        name: queue
        type: binary
        struct: gnet-stats-queue
      -
        name: app
        type: sub-message
        sub-message: tca-stats-app-msg
        selector: kind
      -
        name: rate-est64
        type: binary
        struct: gnet-stats-rate-est64
      -
        name: pad
        type: pad
      -
        name: basic-hw
        type: binary
        struct: gnet-stats-basic
      -
        name: pkt64
        type: u64
  -
    name: u32-attrs
    name-prefix: tca-u32-
    attributes:
      -
        name: classid
        type: u32
      -
        name: hash
        type: u32
      -
        name: link
        type: u32
      -
        name: divisor
        type: u32
      -
        name: sel
        type: binary
        struct: tc-u32-sel
      -
        name: police
        type: nest
        nested-attributes: police-attrs
      -
        name: act
        type: indexed-array
        sub-type: nest
        nested-attributes: act-attrs
      -
        name: indev
        type: string
      -
        name: pcnt
        type: binary
        struct: tc-u32-pcnt
      -
        name: mark
        type: binary
        struct: tc-u32-mark
      -
        name: flags
        type: u32
      -
        name: pad
        type: pad

sub-messages:
  -
    name: options-msg
    formats:
      -
        value: basic
        attribute-set: basic-attrs
      -
        value: bpf
        attribute-set: bpf-attrs
      -
        value: bfifo
        fixed-header: tc-fifo-qopt
      -
        value: cake
        attribute-set: cake-attrs
      -
        value: cbs
        attribute-set: cbs-attrs
      -
        value: cgroup
        attribute-set: cgroup-attrs
      -
        value: choke
        attribute-set: choke-attrs
      -
        value: clsact  # no content
      -
        value: codel
        attribute-set: codel-attrs
      -
        value: drr
        attribute-set: drr-attrs
      -
        value: dualpi2
        attribute-set: dualpi2-attrs
      -
        value: etf
        attribute-set: etf-attrs
      -
        value: ets
        attribute-set: ets-attrs
      -
        value: flow
        attribute-set: flow-attrs
      -
        value: flower
        attribute-set: flower-attrs
      -
        value: fq
        attribute-set: fq-attrs
      -
        value: fq_codel
        attribute-set: fq-codel-attrs
      -
        value: fq_pie
        attribute-set: fq-pie-attrs
      -
        value: fw
        attribute-set: fw-attrs
      -
        value: gred
        attribute-set: gred-attrs
      -
        value: hfsc
        fixed-header: tc-hfsc-qopt
      -
        value: hhf
        attribute-set: hhf-attrs
      -
        value: htb
        attribute-set: htb-attrs
      -
        value: ingress  # no content
      -
        value: matchall
        attribute-set: matchall-attrs
      -
        value: mq  # no content
      -
        value: mqprio
        fixed-header: tc-mqprio-qopt
      -
        value: multiq
        fixed-header: tc-multiq-qopt
      -
        value: netem
        fixed-header: tc-netem-qopt
        attribute-set: netem-attrs
      -
        value: pfifo
        fixed-header: tc-fifo-qopt
      -
        value: pfifo_fast
        fixed-header: tc-prio-qopt
      -
        value: pfifo_head_drop
        fixed-header: tc-fifo-qopt
      -
        value: pie
        attribute-set: pie-attrs
      -
        value: plug
        fixed-header: tc-plug-qopt
      -
        value: prio
        fixed-header: tc-prio-qopt
      -
        value: qfq
        attribute-set: qfq-attrs
      -
        value: red
        attribute-set: red-attrs
      -
        value: route
        attribute-set: route-attrs
      -
        value: sfb
        fixed-header: tc-sfb-qopt
      -
        value: sfq
        fixed-header: tc-sfq-qopt-v1
      -
        value: taprio
        attribute-set: taprio-attrs
      -
        value: tbf
        attribute-set: tbf-attrs
      -
        value: u32
        attribute-set: u32-attrs
  -
    name: act-options-msg
    formats:
      -
        value: bpf
        attribute-set: act-bpf-attrs
      -
        value: connmark
        attribute-set: act-connmark-attrs
      -
        value: csum
        attribute-set: act-csum-attrs
      -
        value: ct
        attribute-set: act-ct-attrs
      -
        value: ctinfo
        attribute-set: act-ctinfo-attrs
      -
        value: gact
        attribute-set: act-gact-attrs
      -
        value: gate
        attribute-set: act-gate-attrs
      -
        value: ife
        attribute-set: act-ife-attrs
      -
        value: mirred
        attribute-set: act-mirred-attrs
      -
        value: mpls
        attribute-set: act-mpls-attrs
      -
        value: nat
        attribute-set: act-nat-attrs
      -
        value: pedit
        attribute-set: act-pedit-attrs
      -
        value: police
        attribute-set: police-attrs
      -
        value: sample
        attribute-set: act-sample-attrs
      -
        value: simple
        attribute-set: act-simple-attrs
      -
        value: skbedit
        attribute-set: act-skbedit-attrs
      -
        value: skbmod
        attribute-set: act-skbmod-attrs
      -
        value: tunnel_key
        attribute-set: act-tunnel-key-attrs
      -
        value: vlan
        attribute-set: act-vlan-attrs
  -
    name: tca-stats-app-msg
    formats:
      -
        value: cake
        attribute-set: cake-stats-attrs
      -
        value: choke
        fixed-header: tc-choke-xstats
      -
        value: codel
        fixed-header: tc-codel-xstats
      -
        value: dualpi2
        fixed-header: tc-dualpi2-xstats
      -
        value: fq
        fixed-header: tc-fq-qd-stats
      -
        value: fq_codel
        fixed-header: tc-fq-codel-xstats
      -
        value: fq_pie
        fixed-header: tc-fq-pie-xstats
      -
        value: hhf
        fixed-header: tc-hhf-xstats
      -
        value: pie
        fixed-header: tc-pie-xstats
      -
        value: red
        fixed-header: tc-red-xstats
      -
        value: sfb
        fixed-header: tc-sfb-xstats
      -
        value: sfq
        fixed-header: tc-sfq-xstats

operations:
  enum-model: directional
  name-prefix: rtm-
  list:
    -
      name: newqdisc
      doc: Create new tc qdisc.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 36
          attributes: &create-params
            - kind
            - options
            - rate
            - chain
            - ingress-block
            - egress-block
    -
      name: delqdisc
      doc: Delete existing tc qdisc.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 37
    -
      name: getqdisc
      doc: Get / dump tc qdisc information.
      attribute-set: attrs
      fixed-header: tcmsg
      do: &getqdisc-do
        request:
          value: 38
          attributes:
            - dump-invisible
        reply:
          value: 36
          attributes: &tc-all
            - kind
            - options
            - stats
            - xstats
            - rate
            - fcnt
            - stats2
            - stab
            - chain
            - ingress-block
            - egress-block
      dump: *getqdisc-do
    -
      name: newtclass
      doc: Get / dump tc traffic class information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 40
          attributes: *create-params
    -
      name: deltclass
      doc: Get / dump tc traffic class information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 41
    -
      name: gettclass
      doc: Get / dump tc traffic class information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 42
        reply:
          value: 40
          attributes: *tc-all
    -
      name: newtfilter
      doc: Get / dump tc filter information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 44
          attributes: *create-params
    -
      name: deltfilter
      doc: Get / dump tc filter information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 45
          attributes:
            - chain
            - kind
    -
      name: gettfilter
      doc: Get / dump tc filter information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 46
          attributes:
            - chain
            - kind
        reply:
          value: 44
          attributes: *tc-all
      dump:
        request:
          value: 46
          attributes:
            - chain
            - dump-flags
        reply:
          value: 44
          attributes: *tc-all
    -
      name: newchain
      doc: Get / dump tc chain information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 100
          attributes: *create-params
    -
      name: delchain
      doc: Get / dump tc chain information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 101
          attributes:
            - chain
    -
      name: getchain
      doc: Get / dump tc chain information.
      attribute-set: attrs
      fixed-header: tcmsg
      do:
        request:
          value: 102
          attributes:
            - chain
        reply:
          value: 100
          attributes: *tc-all

mcast-groups:
  list:
    -
      name: rtnlgrp-tc
      value: 4
