.. SPDX-License-Identifier: GPL-2.0 .. NOTE: This document was auto-generated. ======================================= Family ``netdev`` netlink specification ======================================= .. contents:: :depth: 3 ------- Summary ------- netdev configuration over generic netlink. ---------- Operations ---------- .. _netdev-operation-dev-get: dev-get ======= Get / dump information about a netdev. :attribute-set: :ref:`netdev-attribute-set-dev` :do: **request** :attributes: [``ifindex``] **reply** :attributes: [``ifindex``, ``xdp-features``, ``xdp-zc-max-segs``, ``xdp-rx-metadata-features``, ``xsk-features``] :dump: **reply** :attributes: [``ifindex``, ``xdp-features``, ``xdp-zc-max-segs``, ``xdp-rx-metadata-features``, ``xsk-features``] .. _netdev-operation-dev-add-ntf: dev-add-ntf =========== Notification about device appearing. :notify: dev-get :mcgrp: mgmt .. _netdev-operation-dev-del-ntf: dev-del-ntf =========== Notification about device disappearing. :notify: dev-get :mcgrp: mgmt .. _netdev-operation-dev-change-ntf: dev-change-ntf ============== Notification about device configuration being changed. :notify: dev-get :mcgrp: mgmt .. _netdev-operation-page-pool-get: page-pool-get ============= Get / dump information about Page Pools.(Only Page Pools associated with a net_device can be listed.) :attribute-set: :ref:`netdev-attribute-set-page-pool` :config-cond: page-pool :do: **request** :attributes: [``id``] **reply** :attributes: [``id``, ``ifindex``, ``napi-id``, ``inflight``, ``inflight-mem``, ``detach-time``] :dump: **reply** :attributes: [``id``, ``ifindex``, ``napi-id``, ``inflight``, ``inflight-mem``, ``detach-time``] .. _netdev-operation-page-pool-add-ntf: page-pool-add-ntf ================= Notification about page pool appearing. :notify: page-pool-get :mcgrp: page-pool :config-cond: page-pool .. _netdev-operation-page-pool-del-ntf: page-pool-del-ntf ================= Notification about page pool disappearing. :notify: page-pool-get :mcgrp: page-pool :config-cond: page-pool .. _netdev-operation-page-pool-change-ntf: page-pool-change-ntf ==================== Notification about page pool configuration being changed. :notify: page-pool-get :mcgrp: page-pool :config-cond: page-pool .. _netdev-operation-page-pool-stats-get: page-pool-stats-get =================== Get page pool statistics. :attribute-set: :ref:`netdev-attribute-set-page-pool-stats` :config-cond: page-pool-stats :do: **request** :attributes: [``info``] **reply** :attributes: [``info``, ``alloc-fast``, ``alloc-slow``, ``alloc-slow-high-order``, ``alloc-empty``, ``alloc-refill``, ``alloc-waive``, ``recycle-cached``, ``recycle-cache-full``, ``recycle-ring``, ``recycle-ring-full``, ``recycle-released-refcnt``] :dump: **reply** :attributes: [``info``, ``alloc-fast``, ``alloc-slow``, ``alloc-slow-high-order``, ``alloc-empty``, ``alloc-refill``, ``alloc-waive``, ``recycle-cached``, ``recycle-cache-full``, ``recycle-ring``, ``recycle-ring-full``, ``recycle-released-refcnt``] .. _netdev-operation-queue-get: queue-get ========= Get queue information from the kernel. Only configured queues will be reported (as opposed to all available hardware queues). :attribute-set: :ref:`netdev-attribute-set-queue` :do: **request** :attributes: [``ifindex``, ``type``, ``id``] **reply** :attributes: [``id``, ``type``, ``napi-id``, ``ifindex``] :dump: **request** :attributes: [``ifindex``] **reply** :attributes: [``id``, ``type``, ``napi-id``, ``ifindex``] .. _netdev-operation-napi-get: napi-get ======== Get information about NAPI instances configured on the system. :attribute-set: :ref:`netdev-attribute-set-napi` :do: **request** :attributes: [``id``] **reply** :attributes: [``id``, ``ifindex``, ``irq``, ``pid``] :dump: **request** :attributes: [``ifindex``] **reply** :attributes: [``id``, ``ifindex``, ``irq``, ``pid``] .. _netdev-operation-qstats-get: qstats-get ========== Get / dump fine grained statistics. Which statistics are reporteddepends on the device and the driver, and whether the driver storessoftware counters per-queue. :attribute-set: :ref:`netdev-attribute-set-qstats` :dump: **request** :attributes: [``ifindex``, ``scope``] **reply** :attributes: [``ifindex``, ``queue-type``, ``queue-id``, ``rx-packets``, ``rx-bytes``, ``tx-packets``, ``tx-bytes``] ---------------- Multicast groups ---------------- - mgmt - page-pool ----------- Definitions ----------- .. _netdev-definition-xdp-act: xdp-act ======= :type: flags :entries: :basic: XDP features set supported by all drivers (XDP_ABORTED, XDP_DROP, XDP_PASS, XDP_TX) :redirect: The netdev supports XDP_REDIRECT :ndo-xmit: This feature informs if netdev implements ndo_xdp_xmit callback. :xsk-zerocopy: This feature informs if netdev supports AF_XDP in zero copy mode. :hw-offload: This feature informs if netdev supports XDP hw offloading. :rx-sg: This feature informs if netdev implements non-linear XDP buffer support in the driver napi callback. :ndo-xmit-sg: This feature informs if netdev implements non-linear XDP buffer support in ndo_xdp_xmit callback. .. _netdev-definition-xdp-rx-metadata: xdp-rx-metadata =============== :type: flags :entries: :timestamp: Device is capable of exposing receive HW timestamp via bpf_xdp_metadata_rx_timestamp(). :hash: Device is capable of exposing receive packet hash via bpf_xdp_metadata_rx_hash(). :vlan-tag: Device is capable of exposing receive packet VLAN tag via bpf_xdp_metadata_rx_vlan_tag(). .. _netdev-definition-xsk-flags: xsk-flags ========= :type: flags :entries: :tx-timestamp: HW timestamping egress packets is supported by the driver. :tx-checksum: L3 checksum HW offload is supported by the driver. .. _netdev-definition-queue-type: queue-type ========== :type: enum :entries: - ``rx`` - ``tx`` .. _netdev-definition-qstats-scope: qstats-scope ============ :type: flags :entries: - ``queue`` -------------- Attribute sets -------------- .. _netdev-attribute-set-dev: dev === ifindex (``u32``) ~~~~~~~~~~~~~~~~~ :doc: netdev ifindex pad (``pad``) ~~~~~~~~~~~~~ xdp-features (``u64``) ~~~~~~~~~~~~~~~~~~~~~~ :doc: Bitmask of enabled xdp-features. :enum: :ref:`netdev-definition-xdp-act` xdp-zc-max-segs (``u32``) ~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: max fragment count supported by ZC driver xdp-rx-metadata-features (``u64``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Bitmask of supported XDP receive metadata features. See Documentation/networking/xdp-rx-metadata.rst for more details. :enum: :ref:`netdev-definition-xdp-rx-metadata` xsk-features (``u64``) ~~~~~~~~~~~~~~~~~~~~~~ :doc: Bitmask of enabled AF_XDP features. :enum: :ref:`netdev-definition-xsk-flags` .. _netdev-attribute-set-page-pool: page-pool ========= id (``uint``) ~~~~~~~~~~~~~ :doc: Unique ID of a Page Pool instance. ifindex (``u32``) ~~~~~~~~~~~~~~~~~ :doc: ifindex of the netdev to which the pool belongs.May be reported as 0 if the page pool was allocated for a netdevwhich got destroyed already (page pools may outlast their netdevsbecause they wait for all memory to be returned). napi-id (``uint``) ~~~~~~~~~~~~~~~~~~ :doc: Id of NAPI using this Page Pool instance. inflight (``uint``) ~~~~~~~~~~~~~~~~~~~ :doc: Number of outstanding references to this page pool (allocatedbut yet to be freed pages). Allocated pages may be held insocket receive queues, driver receive ring, page pool recyclingring, the page pool cache, etc. inflight-mem (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~ :doc: Amount of memory held by inflight pages. detach-time (``uint``) ~~~~~~~~~~~~~~~~~~~~~~ :doc: Seconds in CLOCK_BOOTTIME of when Page Pool was detached bythe driver. Once detached Page Pool can no longer be used toallocate memory.Page Pools wait for all the memory allocated from them to be freedbefore truly disappearing. "Detached" Page Pools cannot be"re-attached", they are just waiting to disappear.Attribute is absent if Page Pool has not been detached, andcan still be used to allocate new memory. .. _netdev-attribute-set-page-pool-info: page-pool-info ============== id ~~ ifindex ~~~~~~~ .. _netdev-attribute-set-page-pool-stats: page-pool-stats =============== info (``nest``) ~~~~~~~~~~~~~~~ :doc: Page pool identifying information. :nested-attributes: :ref:`netdev-attribute-set-page-pool-info` alloc-fast (``uint``) ~~~~~~~~~~~~~~~~~~~~~ :value: 8 alloc-slow (``uint``) ~~~~~~~~~~~~~~~~~~~~~ alloc-slow-high-order (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ alloc-empty (``uint``) ~~~~~~~~~~~~~~~~~~~~~~ alloc-refill (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~ alloc-waive (``uint``) ~~~~~~~~~~~~~~~~~~~~~~ recycle-cached (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~ recycle-cache-full (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ recycle-ring (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~ recycle-ring-full (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ recycle-released-refcnt (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. _netdev-attribute-set-napi: napi ==== ifindex (``u32``) ~~~~~~~~~~~~~~~~~ :doc: ifindex of the netdevice to which NAPI instance belongs. id (``u32``) ~~~~~~~~~~~~ :doc: ID of the NAPI instance. irq (``u32``) ~~~~~~~~~~~~~ :doc: The associated interrupt vector number for the napi pid (``u32``) ~~~~~~~~~~~~~ :doc: PID of the napi thread, if NAPI is configured to operate in threaded mode. If NAPI is not in threaded mode (i.e. uses normal softirq context), the attribute will be absent. .. _netdev-attribute-set-queue: queue ===== id (``u32``) ~~~~~~~~~~~~ :doc: Queue index; most queue types are indexed like a C array, with indexes starting at 0 and ending at queue count - 1. Queue indexes are scoped to an interface and queue type. ifindex (``u32``) ~~~~~~~~~~~~~~~~~ :doc: ifindex of the netdevice to which the queue belongs. type (``u32``) ~~~~~~~~~~~~~~ :doc: Queue type as rx, tx. Each queue type defines a separate ID space. :enum: :ref:`netdev-definition-queue-type` napi-id (``u32``) ~~~~~~~~~~~~~~~~~ :doc: ID of the NAPI instance which services this queue. .. _netdev-attribute-set-qstats: qstats ====== ifindex (``u32``) ~~~~~~~~~~~~~~~~~ :doc: ifindex of the netdevice to which stats belong. queue-type (``u32``) ~~~~~~~~~~~~~~~~~~~~ :doc: Queue type as rx, tx, for queue-id. :enum: :ref:`netdev-definition-queue-type` queue-id (``u32``) ~~~~~~~~~~~~~~~~~~ :doc: Queue ID, if stats are scoped to a single queue instance. scope (``uint``) ~~~~~~~~~~~~~~~~ :doc: What object type should be used to iterate over the stats. :enum: :ref:`netdev-definition-qstats-scope` rx-packets (``uint``) ~~~~~~~~~~~~~~~~~~~~~ :doc: Number of wire packets successfully received and passed to the stack.For drivers supporting XDP, XDP is considered the first layerof the stack, so packets consumed by XDP are still counted here. :value: 8 rx-bytes (``uint``) ~~~~~~~~~~~~~~~~~~~ :doc: Successfully received bytes, see `rx-packets`. tx-packets (``uint``) ~~~~~~~~~~~~~~~~~~~~~ :doc: Number of wire packets successfully sent. Packet is considered to besuccessfully sent once it is in device memory (usually this meansthe device has issued a DMA completion for the packet). tx-bytes (``uint``) ~~~~~~~~~~~~~~~~~~~ :doc: Successfully sent bytes, see `tx-packets`. rx-alloc-fail (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of times skb or buffer allocation failed on the Rx datapath.Allocation failure may, or may not result in a packet drop, dependingon driver implementation and whether system recovers quickly. rx-hw-drops (``uint``) ~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of all packets which entered the device, but never left it,including but not limited to: packets dropped due to lack of bufferspace, processing errors, explicit or implicit policies and packetfilters. rx-hw-drop-overruns (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets dropped due to transient lack of resources, such asbuffer space, host descriptors etc. rx-csum-unnecessary (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that were marked as CHECKSUM_UNNECESSARY. rx-csum-none (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that were not checksummed by device. rx-csum-bad (``uint``) ~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets with bad checksum. The packets are not discarded,but still delivered to the stack. rx-hw-gro-packets (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that were coalesced from smaller packets by the device.Counts only packets coalesced with the HW-GRO netdevice feature,LRO-coalesced packets are not counted. rx-hw-gro-bytes (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: See `rx-hw-gro-packets`. rx-hw-gro-wire-packets (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that were coalesced to bigger packetss with the HW-GROnetdevice feature. LRO-coalesced packets are not counted. rx-hw-gro-wire-bytes (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: See `rx-hw-gro-wire-packets`. rx-hw-drop-ratelimits (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of the packets dropped by the device due to the receivedpackets bitrate exceeding the device rate limit. tx-hw-drops (``uint``) ~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that arrived at the device but never left it,encompassing packets dropped for reasons such as processing errors, aswell as those affected by explicitly defined policies and packetfiltering criteria. tx-hw-drop-errors (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets dropped because they were invalid or malformed. tx-csum-none (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that did not require the device to calculate thechecksum. tx-needs-csum (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that required the device to calculate the checksum. tx-hw-gso-packets (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of packets that necessitated segmentation into smaller packetsby the device. tx-hw-gso-bytes (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: See `tx-hw-gso-packets`. tx-hw-gso-wire-packets (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of wire-sized packets generated by processing`tx-hw-gso-packets` tx-hw-gso-wire-bytes (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: See `tx-hw-gso-wire-packets`. tx-hw-drop-ratelimits (``uint``) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :doc: Number of the packets dropped by the device due to the transmitpackets bitrate exceeding the device rate limit. tx-stop (``uint``) ~~~~~~~~~~~~~~~~~~ :doc: Number of times driver paused accepting new tx packetsfrom the stack to this queue, because the queue was full.Note that if BQL is supported and enabled on the devicethe networking stack will avoid queuing a lot of data at once. tx-wake (``uint``) ~~~~~~~~~~~~~~~~~~ :doc: Number of times driver re-started accepting sendrequests to this queue from the stack.