# 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

c-family-name: ethtool-genl-name
c-version-name: ethtool-genl-version

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: phy-upstream
    header: linux/ethtool.h
    type: enum
    name-prefix: phy-upstream
    entries: [mac, phy]
  -
    name: tcp-data-split
    type: enum
    entries: [unknown, disabled, enabled]
  -
    name: hwtstamp-source
    doc: Source of the hardware timestamp
    enum-name: hwtstamp-source
    name-prefix: hwtstamp-source-
    type: enum
    entries:
      -
        name: netdev
        doc: |
          Hardware timestamp comes from a MAC or a device
          which has MAC and PHY integrated
        value: 1
      -
        name: phylib
        doc: |
          Hardware timestamp comes from one PHY device
          of the network topology
  -
    name: pse-event
    doc: PSE event list for the PSE controller
    type: flags
    name-prefix: ethtool-
    entries:
      -
        name: pse-event-over-current
        doc: PSE output current is too high
      -
        name: pse-event-over-temp
        doc: PSE in over temperature state
      -
        name: c33-pse-event-detection
        doc: |
          detection process occur on the PSE. IEEE 802.3-2022 33.2.5 and
          145.2.6 PSE detection of PDs. IEEE 802.3-202 30.9.1.1.5
          aPSEPowerDetectionStatus
      -
        name: c33-pse-event-classification
        doc: |
          classification process occur on the PSE. IEEE 802.3-2022 33.2.6
          and 145.2.8 classification of PDs mutual identification.
          IEEE 802.3-2022 30.9.1.1.8 aPSEPowerClassification.
      -
        name: c33-pse-event-disconnection
        doc: |
          PD has been disconnected on the PSE. IEEE 802.3-2022 33.3.8
          and 145.3.9 PD Maintain Power Signature. IEEE 802.3-2022
          33.5.1.2.9 MPS Absent. IEEE 802.3-2022 30.9.1.1.20
          aPSEMPSAbsentCounter.
      -
        name: pse-event-over-budget
        doc: PSE turned off due to over budget situation
      -
        name: pse-event-sw-pw-control-error
        doc: PSE faced an error managing the power control from software
  -
    name: input-xfrm
    doc: RSS hash function transformations.
    type: flags
    enum-name:
    name-prefix: rxh-xfrm-
    header: linux/ethtool.h
    entries:
      -
        name: sym-xor
        doc: >-
          XOR the corresponding source and destination fields of each specified
          protocol. Both copies of the XOR'ed fields are fed into the RSS and
          RXHASH calculation. Note that this XORing reduces the input set
          entropy and could be exploited to reduce the RSS queue spread.
      -
        name: sym-or-xor
        doc: >-
          Similar to SYM_XOR, except that one copy of the XOR'ed fields is
          replaced by an OR of the same fields.
  -
    name: rxfh-fields
    name-prefix: rxh-
    enum-name:
    header: linux/ethtool.h
    type: flags
    entries:
      -
        name: l2da
        value: 1
      -
        name: vlan
      -
        name: l3-proto
      -
        name: ip-src
      -
        name: ip-dst
      -
        name: l4-b-0-1
        doc: src port in case of TCP/UDP/SCTP
      -
        name: l4-b-2-3
        doc: dst port in case of TCP/UDP/SCTP
      -
        name: gtp-teid
      -
        name: ip6-fl
        doc: IPv6 Flow Label
      -
        name: discard
        value: 31

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: hwtstamp-source
        type: u32
        enum: hwtstamp-source
      -
        name: hwtstamp-phyindex
        type: u32
  -
    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-hist
    attr-cnt-name: --ethtool-a-fec-hist-cnt
    attributes:
      -
        name: pad
        type: pad
      -
        name: bin-low
        type: u32
        doc: Low bound of FEC bin (inclusive)
      -
        name: bin-high
        type: u32
        doc: High bound of FEC bin (inclusive)
      -
        name: bin-val
        type: uint
        doc: Error count in the bin (optional if per-lane values exist)
      -
        name: bin-val-per-lane
        type: binary
        sub-type: u64
        doc: An array of per-lane error counters in the bin (optional)
  -
    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: hist
        type: nest
        multi-attr: true
        nested-attributes: fec-hist
  -
    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: pse-pw-d-id
        type: u32
        name-prefix: ethtool-a-
      -
        name: pse-prio-max
        type: u32
        name-prefix: ethtool-a-
      -
        name: pse-prio
        type: u32
        name-prefix: ethtool-a-
  -
    name: flow
    attr-cnt-name: --ethtool-a-flow-cnt
    doc: |
      Flow types, corresponding to those defined in the old
      ethtool header for RXFH and RXNFC as ${PROTO}_FLOW.
      The values are not matching the old ones to avoid carrying
      into Netlink the IP_USER_FLOW vs IPV4_FLOW vs IPV4_USER_FLOW confusion.
    attributes:
      -
        name: ether
        type: uint
        enum: rxfh-fields
      -
        name: ip4
        type: uint
        enum: rxfh-fields
      -
        name: ip6
        type: uint
        enum: rxfh-fields
      -
        name: tcp4
        type: uint
        enum: rxfh-fields
      -
        name: tcp6
        type: uint
        enum: rxfh-fields
      -
        name: udp4
        type: uint
        enum: rxfh-fields
      -
        name: udp6
        type: uint
        enum: rxfh-fields
      -
        name: sctp4
        type: uint
        enum: rxfh-fields
      -
        name: sctp6
        type: uint
        enum: rxfh-fields
      -
        name: ah4
        type: uint
        enum: rxfh-fields
      -
        name: ah6
        type: uint
        enum: rxfh-fields
      -
        name: esp4
        type: uint
        enum: rxfh-fields
      -
        name: esp6
        type: uint
        enum: rxfh-fields
      -
        name: ah-esp4
        type: uint
        enum: rxfh-fields
      -
        name: ah-esp6
        type: uint
        enum: rxfh-fields
      -
        name: gtpu4
        type: uint
        enum: rxfh-fields
      -
        name: gtpu6
        type: uint
        enum: rxfh-fields
      -
        name: gtpc4
        type: uint
        enum: rxfh-fields
      -
        name: gtpc6
        type: uint
        enum: rxfh-fields
      -
        name: gtpc-teid4
        type: uint
        enum: rxfh-fields
      -
        name: gtpc-teid6
        type: uint
        enum: rxfh-fields
      -
        name: gtpu-eh4
        type: uint
        enum: rxfh-fields
      -
        name: gtpu-eh6
        type: uint
        enum: rxfh-fields
      -
        name: gtpu-ul4
        type: uint
        enum: rxfh-fields
      -
        name: gtpu-ul6
        type: uint
        enum: rxfh-fields
      -
        name: gtpu-dl4
        type: uint
        enum: rxfh-fields
      -
        name: gtpu-dl6
        type: uint
        enum: rxfh-fields
  -
    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
        enum: input-xfrm
      -
        name: start-context
        type: u32
      -
        name: flow-hash
        type: nest
        nested-attributes: flow
  -
    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: nest
        nested-attributes: bitset
  -
    name: pse-ntf
    attr-cnt-name: --ethtool-a-pse-ntf-cnt
    attributes:
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: events
        type: uint
        enum: pse-event
        doc: List of events reported by the PSE controller
  -
    name: mse-capabilities
    doc: MSE capabilities attribute set
    attr-cnt-name: --ethtool-a-mse-capabilities-cnt
    attributes:
      -
        name: max-average-mse
        type: uint
      -
        name: max-peak-mse
        type: uint
      -
        name: refresh-rate-ps
        type: uint
      -
        name: num-symbols
        type: uint
  -
    name: mse-snapshot
    doc: MSE snapshot attribute set
    attr-cnt-name: --ethtool-a-mse-snapshot-cnt
    attributes:
      -
        name: average-mse
        type: uint
      -
        name: peak-mse
        type: uint
      -
        name: worst-peak-mse
        type: uint
  -
    name: mse
    attr-cnt-name: --ethtool-a-mse-cnt
    attributes:
      -
        name: header
        type: nest
        nested-attributes: header
      -
        name: capabilities
        type: nest
        nested-attributes: mse-capabilities
      -
        name: channel-a
        type: nest
        nested-attributes: mse-snapshot
      -
        name: channel-b
        type: nest
        nested-attributes: mse-snapshot
      -
        name: channel-c
        type: nest
        nested-attributes: mse-snapshot
      -
        name: channel-d
        type: nest
        nested-attributes: mse-snapshot
      -
        name: worst-channel
        type: nest
        nested-attributes: mse-snapshot
      -
        name: link
        type: nest
        nested-attributes: mse-snapshot

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
            - hwtstamp-source
            - hwtstamp-phyindex
      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
            - offset
            - length
            - page
            - bank
            - i2c-address
        reply:
          attributes:
            - header
            - 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
            - pse-pw-d-id
            - pse-prio-max
            - pse-prio
      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
            - pse-prio
    -
      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
            - flow-hash
      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
    -
      name: pse-ntf
      doc: Notification for PSE events.

      attribute-set: pse-ntf

      event:
        attributes:
          - header
          - events
    -
      name: rss-set
      doc: Set RSS params.

      attribute-set: rss

      do:
        request:
          attributes:
            - header
            - context
            - hfunc
            - indir
            - hkey
            - input-xfrm
            - flow-hash
    -
      name: rss-ntf
      doc: |
        Notification for change in RSS configuration.
        For additional contexts only modifications use this notification,
        creation and deletion have dedicated messages.
      notify: rss-get
    -
      name: rss-create-act
      doc: Create an RSS context.
      attribute-set: rss
      do:
        request: &rss-create-attrs
          attributes:
            - header
            - context
            - hfunc
            - indir
            - hkey
            - input-xfrm
        reply: *rss-create-attrs
    -
      name: rss-create-ntf
      doc: |
        Notification for creation of an additional RSS context.
      notify: rss-create-act
    -
      name: rss-delete-act
      doc: Delete an RSS context.
      attribute-set: rss
      do:
        request:
          attributes:
            - header
            - context
    -
      name: rss-delete-ntf
      doc: |
        Notification for deletion of an additional RSS context.
      attribute-set: rss
      event:
        attributes:
          - header
          - context
    -
      name: mse-get
      doc: Get PHY MSE measurement data and capabilities.
      attribute-set: mse
      do: &mse-get-op
        request:
          attributes:
            - header
        reply:
          attributes:
            - header
            - capabilities
            - channel-a
            - channel-b
            - channel-c
            - channel-d
            - worst-channel
            - link
      dump: *mse-get-op

mcast-groups:
  list:
    -
      name: monitor
      c-define-name: ethtool-mcgrp-monitor-name
