# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

name: ethtool

protocol: genetlink-legacy

doc: Partial family for Ethtool Netlink.
uapi-header: linux/ethtool_netlink_generated.h

definitions:
  -
    name: udp-tunnel-type
    enum-name:
    type: enum
    entries: [ vxlan, geneve, vxlan-gpe ]
    enum-cnt-name: __ethtool-udp-tunnel-type-cnt
    render-max: true
  -
    name: stringset
    type: enum
    entries: []
    header: linux/ethtool.h # skip rendering, no actual definition
  -
    name: header-flags
    type: flags
    name-prefix: ethtool-flag-
    doc: common ethtool header flags
    entries:
      -
        name: compact-bitsets
        doc: use compact bitsets in reply
      -
        name: omit-reply
        doc: provide optional reply for SET or ACT requests
      -
        name: stats
        doc: request statistics, if supported by the driver
  -
    name: module-fw-flash-status
    type: enum
    doc: plug-in module firmware flashing status
    header: linux/ethtool.h
    entries:
      -
        name: started
        doc: The firmware flashing process has started.
      -
        name: in_progress
        doc: The firmware flashing process is in progress.
      -
        name: completed
        doc: The firmware flashing process was completed successfully.
      -
        name: error
        doc: The firmware flashing process was stopped due to an error.
  -
    name: c33-pse-ext-state
    doc: "groups of PSE extended states functions. IEEE 802.3-2022 33.2.4.4 Variables"
    type: enum
    name-prefix: ethtool-c33-pse-ext-state-
    header: linux/ethtool.h
    entries:
        -
          name: none
          doc: none
        -
          name: error-condition
          doc: Group of error_condition states
        -
          name: mr-mps-valid
          doc: Group of mr_mps_valid states
        -
          name: mr-pse-enable
          doc: Group of mr_pse_enable states
        -
          name: option-detect-ted
          doc: Group of option_detect_ted states
        -
          name: option-vport-lim
          doc: Group of option_vport_lim states
        -
          name: ovld-detected
          doc: Group of ovld_detected states
        -
          name: power-not-available
          doc: Group of power_not_available states
        -
          name: short-detected
          doc: Group of short_detected states
  -
    name: phy-upstream-type
    enum-name:
    type: enum
    entries: [ mac, phy ]
  -
    name: tcp-data-split
    type: enum
    entries: [ unknown, disabled, enabled ]

attribute-sets:
  -
    name: header
    attr-cnt-name: __ethtool-a-header-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: dev-index
        type: u32
      -
        name: dev-name
        type: string
      -
        name: flags
        type: u32
        enum: header-flags
      -
        name: phy-index
        type: u32

  -
    name: bitset-bit
    attr-cnt-name: __ethtool-a-bitset-bit-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: index
        type: u32
      -
        name: name
        type: string
      -
        name: value
        type: flag
  -
    name: bitset-bits
    attr-cnt-name: __ethtool-a-bitset-bits-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: bit
        type: nest
        multi-attr: true
        nested-attributes: bitset-bit
  -
    name: bitset
    attr-cnt-name: __ethtool-a-bitset-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: nomask
        type: flag
      -
        name: size
        type: u32
      -
        name: bits
        type: nest
        nested-attributes: bitset-bits
      -
        name: value
        type: binary
      -
        name: mask
        type: binary
  -
    name: string
    attr-cnt-name: __ethtool-a-string-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: index
        type: u32
      -
        name: value
        type: string
  -
    name: strings
    attr-cnt-name: __ethtool-a-strings-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: unspec
        type: unused
        value: 0
      -
        name: string
        type: nest
        multi-attr: true
        nested-attributes: string
  -
    name: stringset
    attr-cnt-name: __ethtool-a-stringset-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: id
        type: u32
      -
        name: count
        type: u32
      -
        name: strings
        type: nest
        multi-attr: true
        nested-attributes: strings
  -
    name: stringsets
    attr-cnt-name: __ethtool-a-stringsets-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: stringset
        type: nest
        multi-attr: true
        nested-attributes: stringset
  -
    name: strset
    attr-cnt-name: __ethtool-a-strset-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: stringsets
        type: nest
        nested-attributes: stringsets
      -
        name: counts-only
        type: flag

  -
    name: privflags
    attr-cnt-name: __ethtool-a-privflags-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: flags
        type: nest
        nested-attributes: bitset

  -
    name: rings
    attr-cnt-name: __ethtool-a-rings-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: rx-max
        type: u32
      -
        name: rx-mini-max
        type: u32
      -
        name: rx-jumbo-max
        type: u32
      -
        name: tx-max
        type: u32
      -
        name: rx
        type: u32
      -
        name: rx-mini
        type: u32
      -
        name: rx-jumbo
        type: u32
      -
        name: tx
        type: u32
      -
        name: rx-buf-len
        type: u32
      -
        name: tcp-data-split
        type: u8
        enum: tcp-data-split
      -
        name: cqe-size
        type: u32
      -
        name: tx-push
        type: u8
      -
        name: rx-push
        type: u8
      -
        name: tx-push-buf-len
        type: u32
      -
        name: tx-push-buf-len-max
        type: u32
      -
        name: hds-thresh
        type: u32
      -
        name: hds-thresh-max
        type: u32

  -
    name: mm-stat
    attr-cnt-name: __ethtool-a-mm-stat-cnt
    doc: MAC Merge (802.3)
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pad
        type: pad
      -
        name: reassembly-errors
        doc: aMACMergeFrameAssErrorCount
        type: u64
      -
        name: smd-errors
        doc: aMACMergeFrameSmdErrorCount
        type: u64
      -
        name: reassembly-ok
        doc: aMACMergeFrameAssOkCount
        type: u64
      -
        name: rx-frag-count
        doc: aMACMergeFragCountRx
        type: u64
      -
        name: tx-frag-count
        doc: aMACMergeFragCountTx
        type: u64
      -
        name: hold-count
        doc: aMACMergeHoldCount
        type: u64
  -
    name: mm
    attr-cnt-name: __ethtool-a-mm-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: pmac-enabled
        type: u8
      -
        name: tx-enabled
        type: u8
      -
        name: tx-active
        type: u8
      -
        name: tx-min-frag-size
        type: u32
      -
        name: rx-min-frag-size
        type: u32
      -
        name: verify-enabled
        type: u8
      -
        name: verify-status
        type: u8
      -
        name: verify-time
        type: u32
      -
        name: max-verify-time
        type: u32
      -
        name: stats
        type: nest
        nested-attributes: mm-stat
  -
    name: linkinfo
    attr-cnt-name: __ethtool-a-linkinfo-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: port
        type: u8
      -
        name: phyaddr
        type: u8
      -
        name: tp-mdix
        type: u8
      -
        name: tp-mdix-ctrl
        type: u8
      -
        name: transceiver
        type: u8
  -
    name: linkmodes
    attr-cnt-name: __ethtool-a-linkmodes-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: autoneg
        type: u8
      -
        name: ours
        type: nest
        nested-attributes: bitset
      -
        name: peer
        type: nest
        nested-attributes: bitset
      -
        name: speed
        type: u32
      -
        name: duplex
        type: u8
      -
        name: master-slave-cfg
        type: u8
      -
        name: master-slave-state
        type: u8
      -
        name: lanes
        type: u32
      -
        name: rate-matching
        type: u8
  -
    name: linkstate
    attr-cnt-name: __ethtool-a-linkstate-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: link
        type: u8
      -
        name: sqi
        type: u32
      -
        name: sqi-max
        type: u32
      -
        name: ext-state
        type: u8
      -
        name: ext-substate
        type: u8
      -
        name: ext-down-cnt
        type: u32
  -
    name: debug
    attr-cnt-name: __ethtool-a-debug-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: msgmask
        type: nest
        nested-attributes: bitset
  -
    name: wol
    attr-cnt-name: __ethtool-a-wol-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: modes
        type: nest
        nested-attributes: bitset
      -
        name: sopass
        type: binary
  -
    name: features
    attr-cnt-name: __ethtool-a-features-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: hw
        type: nest
        nested-attributes: bitset
      -
        name: wanted
        type: nest
        nested-attributes: bitset
      -
        name: active
        type: nest
        nested-attributes: bitset
      -
        name: nochange
        type: nest
        nested-attributes: bitset
  -
    name: channels
    attr-cnt-name: __ethtool-a-channels-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: rx-max
        type: u32
      -
        name: tx-max
        type: u32
      -
        name: other-max
        type: u32
      -
        name: combined-max
        type: u32
      -
        name: rx-count
        type: u32
      -
        name: tx-count
        type: u32
      -
        name: other-count
        type: u32
      -
        name: combined-count
        type: u32

  -
    name: irq-moderation
    attr-cnt-name: __ethtool-a-irq-moderation-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: usec
        type: u32
      -
        name: pkts
        type: u32
      -
        name: comps
        type: u32
  -
    name: profile
    attr-cnt-name: __ethtool-a-profile-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: irq-moderation
        type: nest
        multi-attr: true
        nested-attributes: irq-moderation
  -
    name: coalesce
    attr-cnt-name: __ethtool-a-coalesce-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: rx-usecs
        type: u32
      -
        name: rx-max-frames
        type: u32
      -
        name: rx-usecs-irq
        type: u32
      -
        name: rx-max-frames-irq
        type: u32
      -
        name: tx-usecs
        type: u32
      -
        name: tx-max-frames
        type: u32
      -
        name: tx-usecs-irq
        type: u32
      -
        name: tx-max-frames-irq
        type: u32
      -
        name: stats-block-usecs
        type: u32
      -
        name: use-adaptive-rx
        type: u8
      -
        name: use-adaptive-tx
        type: u8
      -
        name: pkt-rate-low
        type: u32
      -
        name: rx-usecs-low
        type: u32
      -
        name: rx-max-frames-low
        type: u32
      -
        name: tx-usecs-low
        type: u32
      -
        name: tx-max-frames-low
        type: u32
      -
        name: pkt-rate-high
        type: u32
      -
        name: rx-usecs-high
        type: u32
      -
        name: rx-max-frames-high
        type: u32
      -
        name: tx-usecs-high
        type: u32
      -
        name: tx-max-frames-high
        type: u32
      -
        name: rate-sample-interval
        type: u32
      -
        name: use-cqe-mode-tx
        type: u8
      -
        name: use-cqe-mode-rx
        type: u8
      -
        name: tx-aggr-max-bytes
        type: u32
      -
        name: tx-aggr-max-frames
        type: u32
      -
        name: tx-aggr-time-usecs
        type: u32
      -
        name: rx-profile
        type: nest
        nested-attributes: profile
      -
        name: tx-profile
        type: nest
        nested-attributes: profile

  -
    name: pause-stat
    attr-cnt-name: __ethtool-a-pause-stat-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pad
        type: pad
      -
        name: tx-frames
        type: u64
      -
        name: rx-frames
        type: u64
  -
    name: pause
    attr-cnt-name: __ethtool-a-pause-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: autoneg
        type: u8
      -
        name: rx
        type: u8
      -
        name: tx
        type: u8
      -
        name: stats
        type: nest
        nested-attributes: pause-stat
      -
        name: stats-src
        type: u32
  -
    name: eee
    attr-cnt-name: __ethtool-a-eee-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: modes-ours
        type: nest
        nested-attributes: bitset
      -
        name: modes-peer
        type: nest
        nested-attributes: bitset
      -
        name: active
        type: u8
      -
        name: enabled
        type: u8
      -
        name: tx-lpi-enabled
        type: u8
      -
        name: tx-lpi-timer
        type: u32
  -
    name: ts-stat
    attr-cnt-name: __ethtool-a-ts-stat-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: tx-pkts
        type: uint
      -
        name: tx-lost
        type: uint
      -
        name: tx-err
        type: uint
      -
        name: tx-onestep-pkts-unconfirmed
        type: uint
  -
    name: ts-hwtstamp-provider
    attr-cnt-name: __ethtool-a-ts-hwtstamp-provider-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: index
        type: u32
      -
        name: qualifier
        type: u32
  -
    name: tsinfo
    attr-cnt-name: __ethtool-a-tsinfo-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: timestamping
        type: nest
        nested-attributes: bitset
      -
        name: tx-types
        type: nest
        nested-attributes: bitset
      -
        name: rx-filters
        type: nest
        nested-attributes: bitset
      -
        name: phc-index
        type: u32
      -
        name: stats
        type: nest
        nested-attributes: ts-stat
      -
        name: hwtstamp-provider
        type: nest
        nested-attributes: ts-hwtstamp-provider
  -
    name: cable-result
    attr-cnt-name: __ethtool-a-cable-result-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pair
        doc: ETHTOOL_A_CABLE_PAIR
        type: u8
      -
        name: code
        doc: ETHTOOL_A_CABLE_RESULT_CODE
        type: u8
      -
        name: src
        doc: ETHTOOL_A_CABLE_INF_SRC
        type: u32
  -
    name: cable-fault-length
    attr-cnt-name: __ethtool-a-cable-fault-length-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pair
        type: u8
      -
        name: cm
        type: u32
      -
        name: src
        type: u32
  -
    name: cable-nest
    attr-cnt-name: __ethtool-a-cable-nest-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: result
        type: nest
        nested-attributes: cable-result
      -
        name: fault-length
        type: nest
        nested-attributes: cable-fault-length
  -
    name: cable-test
    attr-cnt-name: __ethtool-a-cable-test-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
  -
    name: cable-test-ntf
    attr-cnt-name: __ethtool-a-cable-test-ntf-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: status
        doc: _STARTED/_COMPLETE
        type: u8
      -
        name: nest
        type: nest
        nested-attributes: cable-nest
  -
    name: cable-test-tdr-cfg
    attr-cnt-name: __ethtool-a-cable-test-tdr-cfg-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: first
        type: u32
      -
        name: last
        type: u32
      -
        name: step
        type: u32
      -
        name: pair
        type: u8
  -
    name: cable-test-tdr-ntf
    attr-cnt-name: __ethtool-a-cable-test-tdr-ntf-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: status
        type: u8
      -
        name: nest
        type: nest
        nested-attributes: cable-nest
  -
    name: cable-test-tdr
    attr-cnt-name: __ethtool-a-cable-test-tdr-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: cfg
        type: nest
        nested-attributes: cable-test-tdr-cfg
  -
    name: tunnel-udp-entry
    attr-cnt-name: __ethtool-a-tunnel-udp-entry-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: port
        type: u16
        byte-order: big-endian
      -
        name: type
        type: u32
        enum: udp-tunnel-type
  -
    name: tunnel-udp-table
    attr-cnt-name: __ethtool-a-tunnel-udp-table-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: size
        type: u32
      -
        name: types
        type: nest
        nested-attributes: bitset
      -
        name: entry
        type: nest
        multi-attr: true
        nested-attributes: tunnel-udp-entry
  -
    name: tunnel-udp
    attr-cnt-name: __ethtool-a-tunnel-udp-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: table
        type: nest
        nested-attributes: tunnel-udp-table
  -
    name: tunnel-info
    attr-cnt-name: __ethtool-a-tunnel-info-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: udp-ports
        type: nest
        nested-attributes: tunnel-udp
  -
    name: fec-stat
    attr-cnt-name: __ethtool-a-fec-stat-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pad
        type: pad
      -
        name: corrected
        type: binary
        sub-type: u64
      -
        name: uncorr
        type: binary
        sub-type: u64
      -
        name: corr-bits
        type: binary
        sub-type: u64
  -
    name: fec
    attr-cnt-name: __ethtool-a-fec-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: modes
        type: nest
        nested-attributes: bitset
      -
        name: auto
        type: u8
      -
        name: active
        type: u32
      -
        name: stats
        type: nest
        nested-attributes: fec-stat
  -
    name: module-eeprom
    attr-cnt-name: __ethtool-a-module-eeprom-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: offset
        type: u32
      -
        name: length
        type: u32
      -
        name: page
        type: u8
      -
        name: bank
        type: u8
      -
        name: i2c-address
        type: u8
      -
        name: data
        type: binary
  -
    name: stats-grp
    attr-cnt-name: __ethtool-a-stats-grp-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pad
        type: pad
      -
        name: id
        type: u32
      -
        name: ss-id
        type: u32
      -
        name: stat
        type: u64
        type-value: [ id ]
      -
        name: hist-rx
        type: nest
        nested-attributes: stats-grp-hist
      -
        name: hist-tx
        type: nest
        nested-attributes: stats-grp-hist
      -
        name: hist-bkt-low
        type: u32
      -
        name: hist-bkt-hi
        type: u32
      -
        name: hist-val
        type: u64
  -
    name: stats-grp-hist
    subset-of: stats-grp
    attributes:
      -
        name: hist-bkt-low
      -
        name: hist-bkt-hi
      -
        name: hist-val
  -
    name: stats
    attr-cnt-name: __ethtool-a-stats-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: pad
        type: pad
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: groups
        type: nest
        nested-attributes: bitset
      -
        name: grp
        type: nest
        nested-attributes: stats-grp
      -
        name: src
        type: u32
  -
    name: phc-vclocks
    attr-cnt-name: __ethtool-a-phc-vclocks-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: num
        type: u32
      -
        name: index
        type: binary
        sub-type: s32
  -
    name: module
    attr-cnt-name: __ethtool-a-module-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: power-mode-policy
        type: u8
      -
        name: power-mode
        type: u8
  -
    name: c33-pse-pw-limit
    attr-cnt-name: __ethtool-a-c33-pse-pw-limit-cnt
    attr-max-name: __ethtool-a-c33-pse-pw-limit-max
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: min
        type: u32
      -
        name: max
        type: u32
  -
    name: pse
    attr-cnt-name: __ethtool-a-pse-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: podl-pse-admin-state
        type: u32
        name-prefix: ethtool-a-
      -
        name: podl-pse-admin-control
        type: u32
        name-prefix: ethtool-a-
      -
        name: podl-pse-pw-d-status
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-admin-state
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-admin-control
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-pw-d-status
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-pw-class
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-actual-pw
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-ext-state
        type: u32
        name-prefix: ethtool-a-
        enum: c33-pse-ext-state
      -
        name: c33-pse-ext-substate
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-avail-pw-limit
        type: u32
        name-prefix: ethtool-a-
      -
        name: c33-pse-pw-limit-ranges
        name-prefix: ethtool-a-
        type: nest
        multi-attr: true
        nested-attributes: c33-pse-pw-limit
  -
    name: rss
    attr-cnt-name: __ethtool-a-rss-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: context
        type: u32
      -
        name: hfunc
        type: u32
      -
        name: indir
        type: binary
        sub-type: u32
      -
        name: hkey
        type: binary
      -
        name: input_xfrm
        type: u32
      -
        name: start-context
        type: u32
  -
    name: plca
    attr-cnt-name: __ethtool-a-plca-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: version
        type: u16
      -
        name: enabled
        type: u8
      -
        name: status
        type: u8
      -
        name: node-cnt
        type: u32
      -
        name: node-id
        type: u32
      -
        name: to-tmr
        type: u32
      -
        name: burst-cnt
        type: u32
      -
        name: burst-tmr
        type: u32
  -
    name: module-fw-flash
    attr-cnt-name: __ethtool-a-module-fw-flash-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: file-name
        type: string
      -
        name: password
        type: u32
      -
        name: status
        type: u32
        enum: module-fw-flash-status
      -
        name: status-msg
        type: string
      -
        name: done
        type: uint
      -
        name: total
        type: uint
  -
    name: phy
    attr-cnt-name: __ethtool-a-phy-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: index
        type: u32
      -
        name: drvname
        type: string
      -
        name: name
        type: string
      -
        name: upstream-type
        type: u32
        enum: phy-upstream-type
      -
        name: upstream-index
        type: u32
      -
        name: upstream-sfp-name
        type: string
      -
        name: downstream-sfp-name
        type: string
  -
    name: tsconfig
    attr-cnt-name: __ethtool-a-tsconfig-cnt
    attributes:
      -
        name: unspec
        type: unused
        value: 0
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: hwtstamp-provider
        type: nest
        nested-attributes: ts-hwtstamp-provider
      -
        name: tx-types
        type: nest
        nested-attributes: bitset
      -
        name: rx-filters
        type: nest
        nested-attributes: bitset
      -
        name: hwtstamp-flags
        type: u32

operations:
  enum-model: directional
  name-prefix: ethtool-msg-
  list:
    -
      name: strset-get
      doc: Get string set from the kernel.

      attribute-set: strset

      do: &strset-get-op
        request:
          attributes:
            - header
            - stringsets
            - counts-only
        reply:
          attributes:
            - header
            - stringsets
      dump: *strset-get-op
    -
      name: linkinfo-get
      doc: Get link info.

      attribute-set: linkinfo

      do: &linkinfo-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &linkinfo
            - header
            - port
            - phyaddr
            - tp-mdix
            - tp-mdix-ctrl
            - transceiver
      dump: *linkinfo-get-op
    -
      name: linkinfo-set
      doc: Set link info.

      attribute-set: linkinfo

      do:
        request:
          attributes: *linkinfo
    -
      name: linkinfo-ntf
      doc: Notification for change in link info.
      notify: linkinfo-get
    -
      name: linkmodes-get
      doc: Get link modes.

      attribute-set: linkmodes

      do: &linkmodes-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &linkmodes
            - header
            - autoneg
            - ours
            - peer
            - speed
            - duplex
            - master-slave-cfg
            - master-slave-state
            - lanes
            - rate-matching
      dump: *linkmodes-get-op
    -
      name: linkmodes-set
      doc: Set link modes.

      attribute-set: linkmodes

      do:
        request:
          attributes: *linkmodes
    -
      name: linkmodes-ntf
      doc: Notification for change in link modes.
      notify: linkmodes-get
    -
      name: linkstate-get
      doc: Get link state.

      attribute-set: linkstate

      do: &linkstate-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - link
            - sqi
            - sqi-max
            - ext-state
            - ext-substate
            - ext-down-cnt
      dump: *linkstate-get-op
    -
      name: debug-get
      doc: Get debug message mask.

      attribute-set: debug

      do: &debug-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &debug
            - header
            - msgmask
      dump: *debug-get-op
    -
      name: debug-set
      doc: Set debug message mask.

      attribute-set: debug

      do:
        request:
          attributes: *debug
    -
      name: debug-ntf
      doc: Notification for change in debug message mask.
      notify: debug-get
    -
      name: wol-get
      doc: Get WOL params.

      attribute-set: wol

      do: &wol-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &wol
            - header
            - modes
            - sopass
      dump: *wol-get-op
    -
      name: wol-set
      doc: Set WOL params.

      attribute-set: wol

      do:
        request:
          attributes: *wol
    -
      name: wol-ntf
      doc: Notification for change in WOL params.
      notify: wol-get
    -
      name: features-get
      doc: Get features.

      attribute-set: features

      do: &feature-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &feature
            - header
            # User-changeable features.
            - hw
            # User-requested features.
            - wanted
            # Currently active features.
            - active
            # Unchangeable features.
            - nochange
      dump: *feature-get-op
    -
      name: features-set
      doc: Set features.

      attribute-set: features

      do: &feature-set-op
        request:
          attributes: *feature
        reply:
          attributes: *feature
    -
      name: features-ntf
      doc: Notification for change in features.
      notify: features-get
    -
      name: privflags-get
      doc: Get device private flags.

      attribute-set: privflags

      do: &privflag-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &privflag
            - header
            - flags
      dump: *privflag-get-op
    -
      name: privflags-set
      doc: Set device private flags.

      attribute-set: privflags

      do:
        request:
          attributes: *privflag
    -
      name: privflags-ntf
      doc: Notification for change in device private flags.
      notify: privflags-get

    -
      name: rings-get
      doc: Get ring params.

      attribute-set: rings

      do: &ring-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &ring
            - header
            - rx-max
            - rx-mini-max
            - rx-jumbo-max
            - tx-max
            - rx
            - rx-mini
            - rx-jumbo
            - tx
            - rx-buf-len
            - tcp-data-split
            - cqe-size
            - tx-push
            - rx-push
            - tx-push-buf-len
            - tx-push-buf-len-max
            - hds-thresh
            - hds-thresh-max
      dump: *ring-get-op
    -
      name: rings-set
      doc: Set ring params.

      attribute-set: rings

      do:
        request:
          attributes: *ring
    -
      name: rings-ntf
      doc: Notification for change in ring params.
      notify: rings-get
    -
      name: channels-get
      doc: Get channel params.

      attribute-set: channels

      do: &channel-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &channel
            - header
            - rx-max
            - tx-max
            - other-max
            - combined-max
            - rx-count
            - tx-count
            - other-count
            - combined-count
      dump: *channel-get-op
    -
      name: channels-set
      doc: Set channel params.

      attribute-set: channels

      do:
        request:
          attributes: *channel
    -
      name: channels-ntf
      doc: Notification for change in channel params.
      notify: channels-get
    -
      name: coalesce-get
      doc: Get coalesce params.

      attribute-set: coalesce

      do: &coalesce-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &coalesce
            - header
            - rx-usecs
            - rx-max-frames
            - rx-usecs-irq
            - rx-max-frames-irq
            - tx-usecs
            - tx-max-frames
            - tx-usecs-irq
            - tx-max-frames-irq
            - stats-block-usecs
            - use-adaptive-rx
            - use-adaptive-tx
            - pkt-rate-low
            - rx-usecs-low
            - rx-max-frames-low
            - tx-usecs-low
            - tx-max-frames-low
            - pkt-rate-high
            - rx-usecs-high
            - rx-max-frames-high
            - tx-usecs-high
            - tx-max-frames-high
            - rate-sample-interval
            - use-cqe-mode-tx
            - use-cqe-mode-rx
            - tx-aggr-max-bytes
            - tx-aggr-max-frames
            - tx-aggr-time-usecs
            - rx-profile
            - tx-profile
      dump: *coalesce-get-op
    -
      name: coalesce-set
      doc: Set coalesce params.

      attribute-set: coalesce

      do:
        request:
          attributes: *coalesce
    -
      name: coalesce-ntf
      doc: Notification for change in coalesce params.
      notify: coalesce-get
    -
      name: pause-get
      doc: Get pause params.

      attribute-set: pause

      do: &pause-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &pause
            - header
            - autoneg
            - rx
            - tx
            - stats
            - stats-src
      dump: *pause-get-op
    -
      name: pause-set
      doc: Set pause params.

      attribute-set: pause

      do:
        request:
          attributes: *pause
    -
      name: pause-ntf
      doc: Notification for change in pause params.
      notify: pause-get
    -
      name: eee-get
      doc: Get eee params.

      attribute-set: eee

      do: &eee-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &eee
            - header
            - modes-ours
            - modes-peer
            - active
            - enabled
            - tx-lpi-enabled
            - tx-lpi-timer
      dump: *eee-get-op
    -
      name: eee-set
      doc: Set eee params.

      attribute-set: eee

      do:
        request:
          attributes: *eee
    -
      name: eee-ntf
      doc: Notification for change in eee params.
      notify: eee-get
    -
      name: tsinfo-get
      doc: Get tsinfo params.

      attribute-set: tsinfo

      do: &tsinfo-get-op
        request:
          attributes:
            - header
            - hwtstamp-provider
        reply:
          attributes:
            - header
            - timestamping
            - tx-types
            - rx-filters
            - phc-index
            - stats
            - hwtstamp-provider
      dump: *tsinfo-get-op
    -
      name: cable-test-act
      doc: Cable test.

      attribute-set: cable-test

      do:
        request:
          attributes:
            - header
    -
      name: cable-test-ntf
      doc: Cable test notification.

      attribute-set: cable-test-ntf

      event:
        attributes:
          - header
          - status
    -
      name: cable-test-tdr-act
      doc: Cable test TDR.

      attribute-set: cable-test-tdr

      do:
        request:
          attributes:
            - header
    -
      name: cable-test-tdr-ntf
      doc: Cable test TDR notification.

      attribute-set: cable-test-tdr-ntf

      event:
        attributes:
          - header
          - status
          - nest
    -
      name: tunnel-info-get
      doc: Get tsinfo params.

      attribute-set: tunnel-info

      do: &tunnel-info-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - udp-ports
      dump: *tunnel-info-get-op
    -
      name: fec-get
      doc: Get FEC params.

      attribute-set: fec

      do: &fec-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &fec
            - header
            - modes
            - auto
            - active
            - stats
      dump: *fec-get-op
    -
      name: fec-set
      doc: Set FEC params.

      attribute-set: fec

      do:
        request:
          attributes: *fec
    -
      name: fec-ntf
      doc: Notification for change in FEC params.
      notify: fec-get
    -
      name: module-eeprom-get
      doc: Get module EEPROM params.

      attribute-set: module-eeprom

      do: &module-eeprom-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - offset
            - length
            - page
            - bank
            - i2c-address
            - data
      dump: *module-eeprom-get-op
    -
      name: stats-get
      doc: Get statistics.

      attribute-set: stats

      do: &stats-get-op
        request:
          attributes:
            - header
            - groups
        reply:
          attributes:
            - header
            - groups
            - grp
            - src
      dump: *stats-get-op
    -
      name: phc-vclocks-get
      doc: Get PHC VCLOCKs.

      attribute-set: phc-vclocks

      do: &phc-vclocks-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - num
      dump: *phc-vclocks-get-op
    -
      name: module-get
      doc: Get module params.

      attribute-set: module

      do: &module-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &module
            - header
            - power-mode-policy
            - power-mode
      dump: *module-get-op
    -
      name: module-set
      doc: Set module params.

      attribute-set: module

      do:
        request:
          attributes: *module
    -
      name: module-ntf
      doc: Notification for change in module params.
      notify: module-get
    -
      name: pse-get
      doc: Get Power Sourcing Equipment params.

      attribute-set: pse

      do: &pse-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - podl-pse-admin-state
            - podl-pse-admin-control
            - podl-pse-pw-d-status
            - c33-pse-admin-state
            - c33-pse-admin-control
            - c33-pse-pw-d-status
            - c33-pse-pw-class
            - c33-pse-actual-pw
            - c33-pse-ext-state
            - c33-pse-ext-substate
            - c33-pse-avail-pw-limit
            - c33-pse-pw-limit-ranges
      dump: *pse-get-op
    -
      name: pse-set
      doc: Set Power Sourcing Equipment params.

      attribute-set: pse

      do:
        request:
          attributes:
            - header
            - podl-pse-admin-control
            - c33-pse-admin-control
            - c33-pse-avail-pw-limit
    -
      name: rss-get
      doc: Get RSS params.

      attribute-set: rss

      do:
        request:
          attributes:
            - header
            - context
        reply: &rss-reply
          attributes:
            - header
            - context
            - hfunc
            - indir
            - hkey
            - input_xfrm
      dump:
        request:
          attributes:
            - header
            - start-context
        reply: *rss-reply
    -
      name: plca-get-cfg
      doc: Get PLCA params.

      attribute-set: plca

      do: &plca-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &plca
            - header
            - version
            - enabled
            - status
            - node-cnt
            - node-id
            - to-tmr
            - burst-cnt
            - burst-tmr
      dump: *plca-get-op
    -
      name: plca-set-cfg
      doc: Set PLCA params.

      attribute-set: plca

      do:
        request:
          attributes: *plca
    -
      name: plca-get-status
      doc: Get PLCA status params.

      attribute-set: plca

      do: &plca-get-status-op
        request:
          attributes:
            - header
        reply:
          attributes: *plca
      dump: *plca-get-status-op
    -
      name: plca-ntf
      doc: Notification for change in PLCA params.
      notify: plca-get-cfg
    -
      name: mm-get
      doc: Get MAC Merge configuration and state

      attribute-set: mm

      do: &mm-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - pmac-enabled
            - tx-enabled
            - tx-active
            - tx-min-frag-size
            - rx-min-frag-size
            - verify-enabled
            - verify-time
            - max-verify-time
            - stats
      dump: *mm-get-op
    -
      name: mm-set
      doc: Set MAC Merge configuration

      attribute-set: mm

      do:
        request:
          attributes:
            - header
            - verify-enabled
            - verify-time
            - tx-enabled
            - pmac-enabled
            - tx-min-frag-size
    -
      name: mm-ntf
      doc: Notification for change in MAC Merge configuration.
      notify: mm-get
    -
      name: module-fw-flash-act
      doc: Flash transceiver module firmware.

      attribute-set: module-fw-flash

      do:
        request:
          attributes:
            - header
            - file-name
            - password
    -
      name: module-fw-flash-ntf
      doc: Notification for firmware flashing progress and status.

      attribute-set: module-fw-flash

      event:
        attributes:
          - header
          - status
          - status-msg
          - done
          - total
    -
      name: phy-get
      doc: Get PHY devices attached to an interface

      attribute-set: phy

      do: &phy-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - index
            - drvname
            - name
            - upstream-type
            - upstream-index
            - upstream-sfp-name
            - downstream-sfp-name
      dump: *phy-get-op
    -
      name: phy-ntf
      doc: Notification for change in PHY devices.
      notify: phy-get
    -
      name: tsconfig-get
      doc: Get hwtstamp config.

      attribute-set: tsconfig

      do: &tsconfig-get-op
        request:
          attributes:
            - header
        reply:
          attributes: &tsconfig
            - header
            - hwtstamp-provider
            - tx-types
            - rx-filters
            - hwtstamp-flags
      dump: *tsconfig-get-op
    -
      name: tsconfig-set
      doc: Set hwtstamp config.

      attribute-set: tsconfig

      do:
        request:
          attributes: *tsconfig
        reply:
          attributes: *tsconfig
