kernel/patches/0522-ethtool-introduce-ethtool-netlink-interface.patch
2023-11-17 14:19:46 +08:00

1472 lines
68 KiB
Diff

From a8224734c8ab1eb2efe3a410165fb8d0ef4055e2 Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Fri, 27 Dec 2019 15:55:18 +0100
Subject: [PATCH 161/283] ethtool: introduce ethtool netlink interface
mainline inclusion
from mainline-v5.6-rc1
commit 2b4a8990b7df55875745a80a609a1ceaaf51f322
category: feature
bugzilla: https://gitee.com/src-openeuler/kernel/issues/I8EN3D
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2b4a8990b7df55875745a80a609a1ceaaf51f322
--------------------------------
Basic genetlink and init infrastructure for the netlink interface, register
genetlink family "ethtool". Add CONFIG_ETHTOOL_NETLINK Kconfig option to
make the build optional. Add initial overall interface description into
Documentation/networking/ethtool-netlink.rst, further patches will add more
detailed information.
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Xiaodong Li <lixiaodong67@huawei.com>
Conflicts:
Documentation/networking/ethtool-netlink.rst
Documentation/networking/index.rst
---
Documentation/networking/ethtool-netlink.rst | 1177 +-----------------
Documentation/networking/index.rst | 10 +-
include/linux/ethtool_netlink.h | 9 +
include/uapi/linux/ethtool_netlink.h | 36 +
net/Kconfig | 8 +
net/ethtool/Makefile | 6 +-
net/ethtool/netlink.c | 33 +
net/ethtool/netlink.h | 10 +
8 files changed, 152 insertions(+), 1137 deletions(-)
create mode 100644 include/linux/ethtool_netlink.h
create mode 100644 include/uapi/linux/ethtool_netlink.h
create mode 100644 net/ethtool/netlink.c
create mode 100644 net/ethtool/netlink.h
diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst
index f7b88ee9227d..fc550a3e82b1 100644
--- a/Documentation/networking/ethtool-netlink.rst
+++ b/Documentation/networking/ethtool-netlink.rst
@@ -68,7 +68,6 @@ the flags may not apply to requests. Recognized flags are:
================================= ===================================
``ETHTOOL_FLAG_COMPACT_BITSETS`` use compact format bitsets in reply
``ETHTOOL_FLAG_OMIT_REPLY`` omit optional reply (_SET and _ACT)
- ``ETHTOOL_FLAG_STATS`` include optional device statistics
================================= ===================================
New request flags should follow the general idea that if the flag is not set,
@@ -77,8 +76,6 @@ of the flag should be interpreted the way the client expects. A client must
not set flags it does not understand.
-Bit sets
-========
For short bitmaps of (reasonably) fixed length, standard ``NLA_BITFIELD32``
type is used. For arbitrary length bitmaps, ethtool netlink uses a nested
@@ -161,6 +158,7 @@ determined by ``ETHTOOL_FLAG_COMPACT_BITSETS`` flag in flags field of request
header. Semantics of value and mask depends on the attribute.
+=======
List of message types
=====================
@@ -177,73 +175,6 @@ according to message purpose:
``_NTF`` kernel notification
============== ======================================
-Userspace to kernel:
-
- ===================================== ================================
- ``ETHTOOL_MSG_STRSET_GET`` get string set
- ``ETHTOOL_MSG_LINKINFO_GET`` get link settings
- ``ETHTOOL_MSG_LINKINFO_SET`` set link settings
- ``ETHTOOL_MSG_LINKMODES_GET`` get link modes info
- ``ETHTOOL_MSG_LINKMODES_SET`` set link modes info
- ``ETHTOOL_MSG_LINKSTATE_GET`` get link state
- ``ETHTOOL_MSG_DEBUG_GET`` get debugging settings
- ``ETHTOOL_MSG_DEBUG_SET`` set debugging settings
- ``ETHTOOL_MSG_WOL_GET`` get wake-on-lan settings
- ``ETHTOOL_MSG_WOL_SET`` set wake-on-lan settings
- ``ETHTOOL_MSG_FEATURES_GET`` get device features
- ``ETHTOOL_MSG_FEATURES_SET`` set device features
- ``ETHTOOL_MSG_PRIVFLAGS_GET`` get private flags
- ``ETHTOOL_MSG_PRIVFLAGS_SET`` set private flags
- ``ETHTOOL_MSG_RINGS_GET`` get ring sizes
- ``ETHTOOL_MSG_RINGS_SET`` set ring sizes
- ``ETHTOOL_MSG_CHANNELS_GET`` get channel counts
- ``ETHTOOL_MSG_CHANNELS_SET`` set channel counts
- ``ETHTOOL_MSG_COALESCE_GET`` get coalescing parameters
- ``ETHTOOL_MSG_COALESCE_SET`` set coalescing parameters
- ``ETHTOOL_MSG_PAUSE_GET`` get pause parameters
- ``ETHTOOL_MSG_PAUSE_SET`` set pause parameters
- ``ETHTOOL_MSG_EEE_GET`` get EEE settings
- ``ETHTOOL_MSG_EEE_SET`` set EEE settings
- ``ETHTOOL_MSG_TSINFO_GET`` get timestamping info
- ``ETHTOOL_MSG_CABLE_TEST_ACT`` action start cable test
- ``ETHTOOL_MSG_CABLE_TEST_TDR_ACT`` action start raw TDR cable test
- ``ETHTOOL_MSG_TUNNEL_INFO_GET`` get tunnel offload info
- ===================================== ================================
-
-Kernel to userspace:
-
- ===================================== =================================
- ``ETHTOOL_MSG_STRSET_GET_REPLY`` string set contents
- ``ETHTOOL_MSG_LINKINFO_GET_REPLY`` link settings
- ``ETHTOOL_MSG_LINKINFO_NTF`` link settings notification
- ``ETHTOOL_MSG_LINKMODES_GET_REPLY`` link modes info
- ``ETHTOOL_MSG_LINKMODES_NTF`` link modes notification
- ``ETHTOOL_MSG_LINKSTATE_GET_REPLY`` link state info
- ``ETHTOOL_MSG_DEBUG_GET_REPLY`` debugging settings
- ``ETHTOOL_MSG_DEBUG_NTF`` debugging settings notification
- ``ETHTOOL_MSG_WOL_GET_REPLY`` wake-on-lan settings
- ``ETHTOOL_MSG_WOL_NTF`` wake-on-lan settings notification
- ``ETHTOOL_MSG_FEATURES_GET_REPLY`` device features
- ``ETHTOOL_MSG_FEATURES_SET_REPLY`` optional reply to FEATURES_SET
- ``ETHTOOL_MSG_FEATURES_NTF`` netdev features notification
- ``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY`` private flags
- ``ETHTOOL_MSG_PRIVFLAGS_NTF`` private flags
- ``ETHTOOL_MSG_RINGS_GET_REPLY`` ring sizes
- ``ETHTOOL_MSG_RINGS_NTF`` ring sizes
- ``ETHTOOL_MSG_CHANNELS_GET_REPLY`` channel counts
- ``ETHTOOL_MSG_CHANNELS_NTF`` channel counts
- ``ETHTOOL_MSG_COALESCE_GET_REPLY`` coalescing parameters
- ``ETHTOOL_MSG_COALESCE_NTF`` coalescing parameters
- ``ETHTOOL_MSG_PAUSE_GET_REPLY`` pause parameters
- ``ETHTOOL_MSG_PAUSE_NTF`` pause parameters
- ``ETHTOOL_MSG_EEE_GET_REPLY`` EEE settings
- ``ETHTOOL_MSG_EEE_NTF`` EEE settings
- ``ETHTOOL_MSG_TSINFO_GET_REPLY`` timestamping info
- ``ETHTOOL_MSG_CABLE_TEST_NTF`` Cable test results
- ``ETHTOOL_MSG_CABLE_TEST_TDR_NTF`` Cable test TDR results
- ``ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY`` tunnel offload info
- ===================================== =================================
-
``GET`` requests are sent by userspace applications to retrieve device
information. They usually do not contain any message specific attributes.
Kernel replies with corresponding "GET_REPLY" message. For most types, ``GET``
@@ -275,1074 +206,59 @@ an ``ACT_REPLY`` message. Performing an action also triggers a notification
Later sections describe the format and semantics of these messages.
-STRSET_GET
-==========
-
-Requests contents of a string set as provided by ioctl commands
-``ETHTOOL_GSSET_INFO`` and ``ETHTOOL_GSTRINGS.`` String sets are not user
-writeable so that the corresponding ``STRSET_SET`` message is only used in
-kernel replies. There are two types of string sets: global (independent of
-a device, e.g. device feature names) and device specific (e.g. device private
-flags).
-
-Request contents:
-
- +---------------------------------------+--------+------------------------+
- | ``ETHTOOL_A_STRSET_HEADER`` | nested | request header |
- +---------------------------------------+--------+------------------------+
- | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | string set to request |
- +-+-------------------------------------+--------+------------------------+
- | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set |
- +-+-+-----------------------------------+--------+------------------------+
- | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id |
- +-+-+-----------------------------------+--------+------------------------+
-
-Kernel response contents:
-
- +---------------------------------------+--------+-----------------------+
- | ``ETHTOOL_A_STRSET_HEADER`` | nested | reply header |
- +---------------------------------------+--------+-----------------------+
- | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | array of string sets |
- +-+-------------------------------------+--------+-----------------------+
- | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set |
- +-+-+-----------------------------------+--------+-----------------------+
- | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id |
- +-+-+-----------------------------------+--------+-----------------------+
- | | | ``ETHTOOL_A_STRINGSET_COUNT`` | u32 | number of strings |
- +-+-+-----------------------------------+--------+-----------------------+
- | | | ``ETHTOOL_A_STRINGSET_STRINGS`` | nested | array of strings |
- +-+-+-+---------------------------------+--------+-----------------------+
- | | | | ``ETHTOOL_A_STRINGS_STRING+`` | nested | one string |
- +-+-+-+-+-------------------------------+--------+-----------------------+
- | | | | | ``ETHTOOL_A_STRING_INDEX`` | u32 | string index |
- +-+-+-+-+-------------------------------+--------+-----------------------+
- | | | | | ``ETHTOOL_A_STRING_VALUE`` | string | string value |
- +-+-+-+-+-------------------------------+--------+-----------------------+
- | ``ETHTOOL_A_STRSET_COUNTS_ONLY`` | flag | return only counts |
- +---------------------------------------+--------+-----------------------+
-
-Device identification in request header is optional. Depending on its presence
-a and ``NLM_F_DUMP`` flag, there are three type of ``STRSET_GET`` requests:
-
- - no ``NLM_F_DUMP,`` no device: get "global" stringsets
- - no ``NLM_F_DUMP``, with device: get string sets related to the device
- - ``NLM_F_DUMP``, no device: get device related string sets for all devices
-
-If there is no ``ETHTOOL_A_STRSET_STRINGSETS`` array, all string sets of
-requested type are returned, otherwise only those specified in the request.
-Flag ``ETHTOOL_A_STRSET_COUNTS_ONLY`` tells kernel to only return string
-counts of the sets, not the actual strings.
-
-
-LINKINFO_GET
-============
-
-Requests link settings as provided by ``ETHTOOL_GLINKSETTINGS`` except for
-link modes and autonegotiation related information. The request does not use
-any attributes.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_LINKINFO_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_LINKINFO_HEADER`` nested reply header
- ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port
- ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address
- ``ETHTOOL_A_LINKINFO_TP_MDIX`` u8 MDI(-X) status
- ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control
- ``ETHTOOL_A_LINKINFO_TRANSCEIVER`` u8 transceiver
- ==================================== ====== ==========================
-
-Attributes and their values have the same meaning as matching members of the
-corresponding ioctl structures.
-
-``LINKINFO_GET`` allows dump requests (kernel returns reply message for all
-devices supporting the request).
-
-
-LINKINFO_SET
-============
-
-``LINKINFO_SET`` request allows setting some of the attributes reported by
-``LINKINFO_GET``.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_LINKINFO_HEADER`` nested request header
- ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port
- ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address
- ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control
- ==================================== ====== ==========================
-
-MDI(-X) status and transceiver cannot be set, request with the corresponding
-attributes is rejected.
-
-
-LINKMODES_GET
-=============
-
-Requests link modes (supported, advertised and peer advertised) and related
-information (autonegotiation status, link speed and duplex) as provided by
-``ETHTOOL_GLINKSETTINGS``. The request does not use any attributes.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_LINKMODES_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ========================================== ====== ==========================
- ``ETHTOOL_A_LINKMODES_HEADER`` nested reply header
- ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status
- ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes
- ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes
- ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s)
- ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode
- ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG`` u8 Master/slave port mode
- ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE`` u8 Master/slave port state
- ========================================== ====== ==========================
-
-For ``ETHTOOL_A_LINKMODES_OURS``, value represents advertised modes and mask
-represents supported modes. ``ETHTOOL_A_LINKMODES_PEER`` in the reply is a bit
-list.
-
-``LINKMODES_GET`` allows dump requests (kernel returns reply messages for all
-devices supporting the request).
-
-
-LINKMODES_SET
-=============
-
-Request contents:
-
- ========================================== ====== ==========================
- ``ETHTOOL_A_LINKMODES_HEADER`` nested request header
- ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status
- ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes
- ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes
- ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s)
- ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode
- ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG`` u8 Master/slave port mode
- ========================================== ====== ==========================
-
-``ETHTOOL_A_LINKMODES_OURS`` bit set allows setting advertised link modes. If
-autonegotiation is on (either set now or kept from before), advertised modes
-are not changed (no ``ETHTOOL_A_LINKMODES_OURS`` attribute) and at least one
-of speed and duplex is specified, kernel adjusts advertised modes to all
-supported modes matching speed, duplex or both (whatever is specified). This
-autoselection is done on ethtool side with ioctl interface, netlink interface
-is supposed to allow requesting changes without knowing what exactly kernel
-supports.
-
-
-LINKSTATE_GET
-=============
-
-Requests link state information. Link up/down flag (as provided by
-``ETHTOOL_GLINK`` ioctl command) is provided. Optionally, extended state might
-be provided as well. In general, extended state describes reasons for why a port
-is down, or why it operates in some non-obvious mode. This request does not have
-any attributes.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_LINKSTATE_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ============================
- ``ETHTOOL_A_LINKSTATE_HEADER`` nested reply header
- ``ETHTOOL_A_LINKSTATE_LINK`` bool link state (up/down)
- ``ETHTOOL_A_LINKSTATE_SQI`` u32 Current Signal Quality Index
- ``ETHTOOL_A_LINKSTATE_SQI_MAX`` u32 Max support SQI value
- ``ETHTOOL_A_LINKSTATE_EXT_STATE`` u8 link extended state
- ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE`` u8 link extended substate
- ==================================== ====== ============================
-
-For most NIC drivers, the value of ``ETHTOOL_A_LINKSTATE_LINK`` returns
-carrier flag provided by ``netif_carrier_ok()`` but there are drivers which
-define their own handler.
-
-``ETHTOOL_A_LINKSTATE_EXT_STATE`` and ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE`` are
-optional values. ethtool core can provide either both
-``ETHTOOL_A_LINKSTATE_EXT_STATE`` and ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE``,
-or only ``ETHTOOL_A_LINKSTATE_EXT_STATE``, or none of them.
-
-``LINKSTATE_GET`` allows dump requests (kernel returns reply messages for all
-devices supporting the request).
-
-
-Link extended states:
-
- ================================================ ============================================
- ``ETHTOOL_LINK_EXT_STATE_AUTONEG`` States relating to the autonegotiation or
- issues therein
-
- ``ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE`` Failure during link training
-
- ``ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH`` Logical mismatch in physical coding sublayer
- or forward error correction sublayer
-
- ``ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY`` Signal integrity issues
-
- ``ETHTOOL_LINK_EXT_STATE_NO_CABLE`` No cable connected
-
- ``ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE`` Failure is related to cable,
- e.g., unsupported cable
-
- ``ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE`` Failure is related to EEPROM, e.g., failure
- during reading or parsing the data
-
- ``ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE`` Failure during calibration algorithm
-
- ``ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED`` The hardware is not able to provide the
- power required from cable or module
-
- ``ETHTOOL_LINK_EXT_STATE_OVERHEAT`` The module is overheated
- ================================================ ============================================
-
-Link extended substates:
-
- Autoneg substates:
-
- =============================================================== ================================
- ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED`` Peer side is down
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED`` Ack not received from peer side
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED`` Next page exchange failed
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE`` Peer side is down during force
- mode or there is no agreement of
- speed
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE`` Forward error correction modes
- in both sides are mismatched
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD`` No Highest Common Denominator
- =============================================================== ================================
-
- Link training substates:
-
- =========================================================================== ====================
- ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED`` Frames were not
- recognized, the
- lock failed
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT`` The lock did not
- occur before
- timeout
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY`` Peer side did not
- send ready signal
- after training
- process
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT`` Remote side is not
- ready yet
- =========================================================================== ====================
-
- Link logical mismatch substates:
-
- ================================================================ ===============================
- ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK`` Physical coding sublayer was
- not locked in first phase -
- block lock
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK`` Physical coding sublayer was
- not locked in second phase -
- alignment markers lock
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS`` Physical coding sublayer did
- not get align status
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED`` FC forward error correction is
- not locked
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED`` RS forward error correction is
- not locked
- ================================================================ ===============================
-
- Bad signal integrity substates:
-
- ================================================================= =============================
- ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS`` Large number of physical
- errors
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE`` The system attempted to
- operate the cable at a rate
- that is not formally
- supported, which led to
- signal integrity issues
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST`` The external clock signal for
- SerDes is too weak or
- unavailable.
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS`` The received signal for
- SerDes is too weak because
- analog loss of signal.
- ================================================================= =============================
-
- Cable issue substates:
-
- =================================================== ============================================
- ``ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE`` Unsupported cable
-
- ``ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE`` Cable test failure
- =================================================== ============================================
-
-DEBUG_GET
-=========
-
-Requests debugging settings of a device. At the moment, only message mask is
-provided.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_DEBUG_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_DEBUG_HEADER`` nested reply header
- ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask
- ==================================== ====== ==========================
-
-The message mask (``ETHTOOL_A_DEBUG_MSGMASK``) is equal to message level as
-provided by ``ETHTOOL_GMSGLVL`` and set by ``ETHTOOL_SMSGLVL`` in ioctl
-interface. While it is called message level there for historical reasons, most
-drivers and almost all newer drivers use it as a mask of enabled message
-classes (represented by ``NETIF_MSG_*`` constants); therefore netlink
-interface follows its actual use in practice.
-
-``DEBUG_GET`` allows dump requests (kernel returns reply messages for all
-devices supporting the request).
-
-
-DEBUG_SET
-=========
-
-Set or update debugging settings of a device. At the moment, only message mask
-is supported.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_DEBUG_HEADER`` nested request header
- ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask
- ==================================== ====== ==========================
-
-``ETHTOOL_A_DEBUG_MSGMASK`` bit set allows setting or modifying mask of
-enabled debugging message types for the device.
-
-
-WOL_GET
-=======
-
-Query device wake-on-lan settings. Unlike most "GET" type requests,
-``ETHTOOL_MSG_WOL_GET`` requires (netns) ``CAP_NET_ADMIN`` privileges as it
-(potentially) provides SecureOn(tm) password which is confidential.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_WOL_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_WOL_HEADER`` nested reply header
- ``ETHTOOL_A_WOL_MODES`` bitset mask of enabled WoL modes
- ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password
- ==================================== ====== ==========================
-
-In reply, ``ETHTOOL_A_WOL_MODES`` mask consists of modes supported by the
-device, value of modes which are enabled. ``ETHTOOL_A_WOL_SOPASS`` is only
-included in reply if ``WAKE_MAGICSECURE`` mode is supported.
-
-
-WOL_SET
-=======
-
-Set or update wake-on-lan settings.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_WOL_HEADER`` nested request header
- ``ETHTOOL_A_WOL_MODES`` bitset enabled WoL modes
- ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password
- ==================================== ====== ==========================
-
-``ETHTOOL_A_WOL_SOPASS`` is only allowed for devices supporting
-``WAKE_MAGICSECURE`` mode.
-
-
-FEATURES_GET
-============
-
-Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_FEATURES_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_FEATURES_HEADER`` nested reply header
- ``ETHTOOL_A_FEATURES_HW`` bitset dev->hw_features
- ``ETHTOOL_A_FEATURES_WANTED`` bitset dev->wanted_features
- ``ETHTOOL_A_FEATURES_ACTIVE`` bitset dev->features
- ``ETHTOOL_A_FEATURES_NOCHANGE`` bitset NETIF_F_NEVER_CHANGE
- ==================================== ====== ==========================
-
-Bitmaps in kernel response have the same meaning as bitmaps used in ioctl
-interference but attribute names are different (they are based on
-corresponding members of struct net_device). Legacy "flags" are not provided,
-if userspace needs them (most likely only ethtool for backward compatibility),
-it can calculate their values from related feature bits itself.
-ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to
-provide all names when using verbose bitmap format), the other three use no
-mask (simple bit lists).
-
-
-FEATURES_SET
-============
-
-Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_FEATURES_HEADER`` nested request header
- ``ETHTOOL_A_FEATURES_WANTED`` bitset requested features
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_FEATURES_HEADER`` nested reply header
- ``ETHTOOL_A_FEATURES_WANTED`` bitset diff wanted vs. result
- ``ETHTOOL_A_FEATURES_ACTIVE`` bitset diff old vs. new active
- ==================================== ====== ==========================
-
-Request constains only one bitset which can be either value/mask pair (request
-to change specific feature bits and leave the rest) or only a value (request
-to set all features to specified set).
-
-As request is subject to netdev_change_features() sanity checks, optional
-kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request
-header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED``
-reports the difference between client request and actual result: mask consists
-of bits which differ between requested features and result (dev->features
-after the operation), value consists of values of these bits in the request
-(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE``
-reports the difference between old and new dev->features: mask consists of
-bits which have changed, values are their values in new dev->features (after
-the operation).
-
-``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features
-are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl
-request but also each time features are modified with netdev_update_features()
-or netdev_change_features().
-
-
-PRIVFLAGS_GET
-=============
-
-Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested reply header
- ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
- ==================================== ====== ==========================
-
-``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags.
-These flags are defined by driver, their number and names (and also meaning)
-are device dependent. For compact bitset format, names can be retrieved as
-``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested,
-response uses all private flags supported by the device as mask so that client
-gets the full information without having to fetch the string set with names.
-
-
-PRIVFLAGS_SET
-=============
-
-Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS``
-ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
- ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
- ==================================== ====== ==========================
-
-``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or
-modify only values of some of them.
-
-
-RINGS_GET
-=========
-
-Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_RINGS_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_RINGS_HEADER`` nested reply header
- ``ETHTOOL_A_RINGS_RX_MAX`` u32 max size of RX ring
- ``ETHTOOL_A_RINGS_RX_MINI_MAX`` u32 max size of RX mini ring
- ``ETHTOOL_A_RINGS_RX_JUMBO_MAX`` u32 max size of RX jumbo ring
- ``ETHTOOL_A_RINGS_TX_MAX`` u32 max size of TX ring
- ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
- ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
- ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
- ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
- ==================================== ====== ==========================
-
-
-RINGS_SET
-=========
-
-Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_RINGS_HEADER`` nested reply header
- ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
- ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
- ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
- ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
- ==================================== ====== ==========================
-
-Kernel checks that requested ring sizes do not exceed limits reported by
-driver. Driver may impose additional constraints and may not suspport all
-attributes.
-
-
-CHANNELS_GET
-============
-
-Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_CHANNELS_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_CHANNELS_HEADER`` nested reply header
- ``ETHTOOL_A_CHANNELS_RX_MAX`` u32 max receive channels
- ``ETHTOOL_A_CHANNELS_TX_MAX`` u32 max transmit channels
- ``ETHTOOL_A_CHANNELS_OTHER_MAX`` u32 max other channels
- ``ETHTOOL_A_CHANNELS_COMBINED_MAX`` u32 max combined channels
- ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
- ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
- ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
- ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
- ===================================== ====== ==========================
-
-
-CHANNELS_SET
-============
-
-Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_CHANNELS_HEADER`` nested request header
- ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
- ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
- ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
- ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
- ===================================== ====== ==========================
-
-Kernel checks that requested channel counts do not exceed limits reported by
-driver. Driver may impose additional constraints and may not suspport all
-attributes.
-
-
-COALESCE_GET
-============
-
-Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_COALESCE_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Kernel response contents:
-
- =========================================== ====== =======================
- ``ETHTOOL_A_COALESCE_HEADER`` nested reply header
- ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
- ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
- ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
- ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
- ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
- ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
- ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
- ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
- ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
- ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
- ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
- ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
- ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
- ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
- =========================================== ====== =======================
-
-Attributes are only included in reply if their value is not zero or the
-corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e.
-they are declared as supported by driver).
-
-
-COALESCE_SET
-============
-
-Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request.
-
-Request contents:
-
- =========================================== ====== =======================
- ``ETHTOOL_A_COALESCE_HEADER`` nested request header
- ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
- ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
- ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
- ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
- ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
- ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
- ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
- ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
- ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
- ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
- ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
- ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
- ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
- ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
- ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
- ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
- =========================================== ====== =======================
-
-Request is rejected if it attributes declared as unsupported by driver (i.e.
-such that the corresponding bit in ``ethtool_ops::supported_coalesce_params``
-is not set), regardless of their values. Driver may impose additional
-constraints on coalescing parameters and their values.
-
-
-PAUSE_GET
-============
-
-Gets channel counts like ``ETHTOOL_GPAUSE`` ioctl request.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_PAUSE_HEADER`` nested request header
- ===================================== ====== ==========================
-
-Kernel response contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_PAUSE_HEADER`` nested request header
- ``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation
- ``ETHTOOL_A_PAUSE_RX`` bool receive pause frames
- ``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames
- ``ETHTOOL_A_PAUSE_STATS`` nested pause statistics
- ===================================== ====== ==========================
-
-``ETHTOOL_A_PAUSE_STATS`` are reported if ``ETHTOOL_FLAG_STATS`` was set
-in ``ETHTOOL_A_HEADER_FLAGS``.
-It will be empty if driver did not report any statistics. Drivers fill in
-the statistics in the following structure:
-
-.. kernel-doc:: include/linux/ethtool.h
- :identifiers: ethtool_pause_stats
-
-Each member has a corresponding attribute defined.
-
-PAUSE_SET
-============
-
-Sets pause parameters like ``ETHTOOL_GPAUSEPARAM`` ioctl request.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_PAUSE_HEADER`` nested request header
- ``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation
- ``ETHTOOL_A_PAUSE_RX`` bool receive pause frames
- ``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames
- ===================================== ====== ==========================
-
-
-EEE_GET
-=======
-
-Gets channel counts like ``ETHTOOL_GEEE`` ioctl request.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_EEE_HEADER`` nested request header
- ===================================== ====== ==========================
-
-Kernel response contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_EEE_HEADER`` nested request header
- ``ETHTOOL_A_EEE_MODES_OURS`` bool supported/advertised modes
- ``ETHTOOL_A_EEE_MODES_PEER`` bool peer advertised link modes
- ``ETHTOOL_A_EEE_ACTIVE`` bool EEE is actively used
- ``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled
- ``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled
- ``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us)
- ===================================== ====== ==========================
-
-In ``ETHTOOL_A_EEE_MODES_OURS``, mask consists of link modes for which EEE is
-enabled, value of link modes for which EEE is advertised. Link modes for which
-peer advertises EEE are listed in ``ETHTOOL_A_EEE_MODES_PEER`` (no mask). The
-netlink interface allows reporting EEE status for all link modes but only
-first 32 are provided by the ``ethtool_ops`` callback.
-
-
-EEE_SET
-=======
-
-Sets pause parameters like ``ETHTOOL_GEEEPARAM`` ioctl request.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_EEE_HEADER`` nested request header
- ``ETHTOOL_A_EEE_MODES_OURS`` bool advertised modes
- ``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled
- ``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled
- ``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us)
- ===================================== ====== ==========================
-
-``ETHTOOL_A_EEE_MODES_OURS`` is used to either list link modes to advertise
-EEE for (if there is no mask) or specify changes to the list (if there is
-a mask). The netlink interface allows reporting EEE status for all link modes
-but only first 32 can be set at the moment as that is what the ``ethtool_ops``
-callback supports.
-
-
-TSINFO_GET
-==========
-
-Gets timestamping information like ``ETHTOOL_GET_TS_INFO`` ioctl request.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_TSINFO_HEADER`` nested request header
- ===================================== ====== ==========================
-
-Kernel response contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_TSINFO_HEADER`` nested request header
- ``ETHTOOL_A_TSINFO_TIMESTAMPING`` bitset SO_TIMESTAMPING flags
- ``ETHTOOL_A_TSINFO_TX_TYPES`` bitset supported Tx types
- ``ETHTOOL_A_TSINFO_RX_FILTERS`` bitset supported Rx filters
- ``ETHTOOL_A_TSINFO_PHC_INDEX`` u32 PTP hw clock index
- ===================================== ====== ==========================
-
-``ETHTOOL_A_TSINFO_PHC_INDEX`` is absent if there is no associated PHC (there
-is no special value for this case). The bitset attributes are omitted if they
-would be empty (no bit set).
-
-CABLE_TEST
-==========
-
-Start a cable test.
-
-Request contents:
-
- ==================================== ====== ==========================
- ``ETHTOOL_A_CABLE_TEST_HEADER`` nested request header
- ==================================== ====== ==========================
-
-Notification contents:
-
-An Ethernet cable typically contains 1, 2 or 4 pairs. The length of
-the pair can only be measured when there is a fault in the pair and
-hence a reflection. Information about the fault may not be available,
-depending on the specific hardware. Hence the contents of the notify
-message are mostly optional. The attributes can be repeated an
-arbitrary number of times, in an arbitrary order, for an arbitrary
-number of pairs.
-
-The example shows the notification sent when the test is completed for
-a T2 cable, i.e. two pairs. One pair is OK and hence has no length
-information. The second pair has a fault and does have length
-information.
-
- +---------------------------------------------+--------+---------------------+
- | ``ETHTOOL_A_CABLE_TEST_HEADER`` | nested | reply header |
- +---------------------------------------------+--------+---------------------+
- | ``ETHTOOL_A_CABLE_TEST_STATUS`` | u8 | completed |
- +---------------------------------------------+--------+---------------------+
- | ``ETHTOOL_A_CABLE_TEST_NTF_NEST`` | nested | all the results |
- +-+-------------------------------------------+--------+---------------------+
- | | ``ETHTOOL_A_CABLE_NEST_RESULT`` | nested | cable test result |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_CODE`` | u8 | result code |
- +-+-+-----------------------------------------+--------+---------------------+
- | | ``ETHTOOL_A_CABLE_NEST_RESULT`` | nested | cable test results |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_CODE`` | u8 | result code |
- +-+-+-----------------------------------------+--------+---------------------+
- | | ``ETHTOOL_A_CABLE_NEST_FAULT_LENGTH`` | nested | cable length |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR`` | u8 | pair number |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_CM`` | u32 | length in cm |
- +-+-+-----------------------------------------+--------+---------------------+
-
-CABLE_TEST TDR
-==============
-
-Start a cable test and report raw TDR data
-
-Request contents:
-
- +--------------------------------------------+--------+-----------------------+
- | ``ETHTOOL_A_CABLE_TEST_TDR_HEADER`` | nested | reply header |
- +--------------------------------------------+--------+-----------------------+
- | ``ETHTOOL_A_CABLE_TEST_TDR_CFG`` | nested | test configuration |
- +-+------------------------------------------+--------+-----------------------+
- | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE`` | u32 | first data distance |
- +-+-+----------------------------------------+--------+-----------------------+
- | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE`` | u32 | last data distance |
- +-+-+----------------------------------------+--------+-----------------------+
- | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE`` | u32 | distance of each step |
- +-+-+----------------------------------------+--------+-----------------------+
- | | ``ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR`` | u8 | pair to test |
- +-+-+----------------------------------------+--------+-----------------------+
-
-The ETHTOOL_A_CABLE_TEST_TDR_CFG is optional, as well as all members
-of the nest. All distances are expressed in centimeters. The PHY takes
-the distances as a guide, and rounds to the nearest distance it
-actually supports. If a pair is passed, only that one pair will be
-tested. Otherwise all pairs are tested.
-
-Notification contents:
-
-Raw TDR data is gathered by sending a pulse down the cable and
-recording the amplitude of the reflected pulse for a given distance.
-
-It can take a number of seconds to collect TDR data, especial if the
-full 100 meters is probed at 1 meter intervals. When the test is
-started a notification will be sent containing just
-ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value
-ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED.
-
-When the test has completed a second notification will be sent
-containing ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value
-ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED and the TDR data.
-
-The message may optionally contain the amplitude of the pulse send
-down the cable. This is measured in mV. A reflection should not be
-bigger than transmitted pulse.
-
-Before the raw TDR data should be an ETHTOOL_A_CABLE_TDR_NEST_STEP
-nest containing information about the distance along the cable for the
-first reading, the last reading, and the step between each
-reading. Distances are measured in centimeters. These should be the
-exact values the PHY used. These may be different to what the user
-requested, if the native measurement resolution is greater than 1 cm.
-
-For each step along the cable, a ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE is
-used to report the amplitude of the reflection for a given pair.
-
- +---------------------------------------------+--------+----------------------+
- | ``ETHTOOL_A_CABLE_TEST_TDR_HEADER`` | nested | reply header |
- +---------------------------------------------+--------+----------------------+
- | ``ETHTOOL_A_CABLE_TEST_TDR_STATUS`` | u8 | completed |
- +---------------------------------------------+--------+----------------------+
- | ``ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST`` | nested | all the results |
- +-+-------------------------------------------+--------+----------------------+
- | | ``ETHTOOL_A_CABLE_TDR_NEST_PULSE`` | nested | TX Pulse amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_PULSE_mV`` | s16 | Pulse amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | ``ETHTOOL_A_CABLE_NEST_STEP`` | nested | TDR step info |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE`` | u32 | First data distance |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE`` | u32 | Last data distance |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE`` | u32 | distance of each step|
- +-+-+-----------------------------------------+--------+----------------------+
- | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
- +-+-+-----------------------------------------+--------+----------------------+
- | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude |
- +-+-+-----------------------------------------+--------+----------------------+
-
-TUNNEL_INFO
-===========
-
-Gets information about the tunnel state NIC is aware of.
-
-Request contents:
-
- ===================================== ====== ==========================
- ``ETHTOOL_A_TUNNEL_INFO_HEADER`` nested request header
- ===================================== ====== ==========================
-
-Kernel response contents:
-
- +---------------------------------------------+--------+---------------------+
- | ``ETHTOOL_A_TUNNEL_INFO_HEADER`` | nested | reply header |
- +---------------------------------------------+--------+---------------------+
- | ``ETHTOOL_A_TUNNEL_INFO_UDP_PORTS`` | nested | all UDP port tables |
- +-+-------------------------------------------+--------+---------------------+
- | | ``ETHTOOL_A_TUNNEL_UDP_TABLE`` | nested | one UDP port table |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE`` | u32 | max size of the |
- | | | | | table |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES`` | bitset | tunnel types which |
- | | | | | table can hold |
- +-+-+-----------------------------------------+--------+---------------------+
- | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY`` | nested | offloaded UDP port |
- +-+-+-+---------------------------------------+--------+---------------------+
- | | | | ``ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT`` | be16 | UDP port |
- +-+-+-+---------------------------------------+--------+---------------------+
- | | | | ``ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE`` | u32 | tunnel type |
- +-+-+-+---------------------------------------+--------+---------------------+
-
-For UDP tunnel table empty ``ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES`` indicates that
-the table contains static entries, hard-coded by the NIC.
-
Request translation
===================
The following table maps ioctl commands to netlink commands providing their
functionality. Entries with "n/a" in right column are commands which do not
-have their netlink replacement yet. Entries which "n/a" in the left column
-are netlink only.
+have their netlink replacement yet.
=================================== =====================================
ioctl command netlink command
=================================== =====================================
- ``ETHTOOL_GSET`` ``ETHTOOL_MSG_LINKINFO_GET``
- ``ETHTOOL_MSG_LINKMODES_GET``
- ``ETHTOOL_SSET`` ``ETHTOOL_MSG_LINKINFO_SET``
- ``ETHTOOL_MSG_LINKMODES_SET``
+ ``ETHTOOL_GSET`` n/a
+ ``ETHTOOL_SSET`` n/a
``ETHTOOL_GDRVINFO`` n/a
``ETHTOOL_GREGS`` n/a
- ``ETHTOOL_GWOL`` ``ETHTOOL_MSG_WOL_GET``
- ``ETHTOOL_SWOL`` ``ETHTOOL_MSG_WOL_SET``
- ``ETHTOOL_GMSGLVL`` ``ETHTOOL_MSG_DEBUG_GET``
- ``ETHTOOL_SMSGLVL`` ``ETHTOOL_MSG_DEBUG_SET``
+ ``ETHTOOL_GWOL`` n/a
+ ``ETHTOOL_SWOL`` n/a
+ ``ETHTOOL_GMSGLVL`` n/a
+ ``ETHTOOL_SMSGLVL`` n/a
``ETHTOOL_NWAY_RST`` n/a
- ``ETHTOOL_GLINK`` ``ETHTOOL_MSG_LINKSTATE_GET``
+ ``ETHTOOL_GLINK`` n/a
``ETHTOOL_GEEPROM`` n/a
``ETHTOOL_SEEPROM`` n/a
- ``ETHTOOL_GCOALESCE`` ``ETHTOOL_MSG_COALESCE_GET``
- ``ETHTOOL_SCOALESCE`` ``ETHTOOL_MSG_COALESCE_SET``
- ``ETHTOOL_GRINGPARAM`` ``ETHTOOL_MSG_RINGS_GET``
- ``ETHTOOL_SRINGPARAM`` ``ETHTOOL_MSG_RINGS_SET``
- ``ETHTOOL_GPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_GET``
- ``ETHTOOL_SPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_SET``
- ``ETHTOOL_GRXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SRXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
- ``ETHTOOL_GTXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_STXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
- ``ETHTOOL_GSG`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SSG`` ``ETHTOOL_MSG_FEATURES_SET``
+ ``ETHTOOL_GCOALESCE`` n/a
+ ``ETHTOOL_SCOALESCE`` n/a
+ ``ETHTOOL_GRINGPARAM`` n/a
+ ``ETHTOOL_SRINGPARAM`` n/a
+ ``ETHTOOL_GPAUSEPARAM`` n/a
+ ``ETHTOOL_SPAUSEPARAM`` n/a
+ ``ETHTOOL_GRXCSUM`` n/a
+ ``ETHTOOL_SRXCSUM`` n/a
+ ``ETHTOOL_GTXCSUM`` n/a
+ ``ETHTOOL_STXCSUM`` n/a
+ ``ETHTOOL_GSG`` n/a
+ ``ETHTOOL_SSG`` n/a
``ETHTOOL_TEST`` n/a
- ``ETHTOOL_GSTRINGS`` ``ETHTOOL_MSG_STRSET_GET``
+ ``ETHTOOL_GSTRINGS`` n/a
``ETHTOOL_PHYS_ID`` n/a
``ETHTOOL_GSTATS`` n/a
- ``ETHTOOL_GTSO`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_STSO`` ``ETHTOOL_MSG_FEATURES_SET``
+ ``ETHTOOL_GTSO`` n/a
+ ``ETHTOOL_STSO`` n/a
``ETHTOOL_GPERMADDR`` rtnetlink ``RTM_GETLINK``
- ``ETHTOOL_GUFO`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SUFO`` ``ETHTOOL_MSG_FEATURES_SET``
- ``ETHTOOL_GGSO`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SGSO`` ``ETHTOOL_MSG_FEATURES_SET``
- ``ETHTOOL_GFLAGS`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SFLAGS`` ``ETHTOOL_MSG_FEATURES_SET``
- ``ETHTOOL_GPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_GET``
- ``ETHTOOL_SPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_SET``
+ ``ETHTOOL_GUFO`` n/a
+ ``ETHTOOL_SUFO`` n/a
+ ``ETHTOOL_GGSO`` n/a
+ ``ETHTOOL_SGSO`` n/a
+ ``ETHTOOL_GFLAGS`` n/a
+ ``ETHTOOL_SFLAGS`` n/a
+ ``ETHTOOL_GPFLAGS`` n/a
+ ``ETHTOOL_SPFLAGS`` n/a
``ETHTOOL_GRXFH`` n/a
``ETHTOOL_SRXFH`` n/a
- ``ETHTOOL_GGRO`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SGRO`` ``ETHTOOL_MSG_FEATURES_SET``
+ ``ETHTOOL_GGRO`` n/a
+ ``ETHTOOL_SGRO`` n/a
``ETHTOOL_GRXRINGS`` n/a
``ETHTOOL_GRXCLSRLCNT`` n/a
``ETHTOOL_GRXCLSRULE`` n/a
@@ -1353,36 +269,31 @@ are netlink only.
``ETHTOOL_RESET`` n/a
``ETHTOOL_SRXNTUPLE`` n/a
``ETHTOOL_GRXNTUPLE`` n/a
- ``ETHTOOL_GSSET_INFO`` ``ETHTOOL_MSG_STRSET_GET``
+ ``ETHTOOL_GSSET_INFO`` n/a
``ETHTOOL_GRXFHINDIR`` n/a
``ETHTOOL_SRXFHINDIR`` n/a
- ``ETHTOOL_GFEATURES`` ``ETHTOOL_MSG_FEATURES_GET``
- ``ETHTOOL_SFEATURES`` ``ETHTOOL_MSG_FEATURES_SET``
- ``ETHTOOL_GCHANNELS`` ``ETHTOOL_MSG_CHANNELS_GET``
- ``ETHTOOL_SCHANNELS`` ``ETHTOOL_MSG_CHANNELS_SET``
+ ``ETHTOOL_GFEATURES`` n/a
+ ``ETHTOOL_SFEATURES`` n/a
+ ``ETHTOOL_GCHANNELS`` n/a
+ ``ETHTOOL_SCHANNELS`` n/a
``ETHTOOL_SET_DUMP`` n/a
``ETHTOOL_GET_DUMP_FLAG`` n/a
``ETHTOOL_GET_DUMP_DATA`` n/a
- ``ETHTOOL_GET_TS_INFO`` ``ETHTOOL_MSG_TSINFO_GET``
+ ``ETHTOOL_GET_TS_INFO`` n/a
``ETHTOOL_GMODULEINFO`` n/a
``ETHTOOL_GMODULEEEPROM`` n/a
- ``ETHTOOL_GEEE`` ``ETHTOOL_MSG_EEE_GET``
- ``ETHTOOL_SEEE`` ``ETHTOOL_MSG_EEE_SET``
+ ``ETHTOOL_GEEE`` n/a
+ ``ETHTOOL_SEEE`` n/a
``ETHTOOL_GRSSH`` n/a
``ETHTOOL_SRSSH`` n/a
``ETHTOOL_GTUNABLE`` n/a
``ETHTOOL_STUNABLE`` n/a
``ETHTOOL_GPHYSTATS`` n/a
``ETHTOOL_PERQUEUE`` n/a
- ``ETHTOOL_GLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_GET``
- ``ETHTOOL_MSG_LINKMODES_GET``
- ``ETHTOOL_SLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_SET``
- ``ETHTOOL_MSG_LINKMODES_SET``
+ ``ETHTOOL_GLINKSETTINGS`` n/a
+ ``ETHTOOL_SLINKSETTINGS`` n/a
``ETHTOOL_PHY_GTUNABLE`` n/a
``ETHTOOL_PHY_STUNABLE`` n/a
``ETHTOOL_GFECPARAM`` n/a
``ETHTOOL_SFECPARAM`` n/a
- n/a ''ETHTOOL_MSG_CABLE_TEST_ACT''
- n/a ''ETHTOOL_MSG_CABLE_TEST_TDR_ACT''
- n/a ``ETHTOOL_MSG_TUNNEL_INFO_GET``
=================================== =====================================
diff --git a/Documentation/networking/index.rst b/Documentation/networking/index.rst
index 3786f3b7274c..510d4c45270d 100644
--- a/Documentation/networking/index.rst
+++ b/Documentation/networking/index.rst
@@ -11,9 +11,13 @@ Contents:
batman-adv
can
can_ucan_protocol
- dpaa2/index
- e100
- e1000
+ device_drivers/index
+ dsa/index
+ devlink-info-versions
+ devlink-trap
+ devlink-trap-netdevsim
+ ethtool-netlink
+ ieee802154
j1939
kapi
z8530book
diff --git a/include/linux/ethtool_netlink.h b/include/linux/ethtool_netlink.h
new file mode 100644
index 000000000000..f27e92b5f344
--- /dev/null
+++ b/include/linux/ethtool_netlink.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _LINUX_ETHTOOL_NETLINK_H_
+#define _LINUX_ETHTOOL_NETLINK_H_
+
+#include <uapi/linux/ethtool_netlink.h>
+#include <linux/ethtool.h>
+
+#endif /* _LINUX_ETHTOOL_NETLINK_H_ */
diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h
new file mode 100644
index 000000000000..3c93276ba066
--- /dev/null
+++ b/include/uapi/linux/ethtool_netlink.h
@@ -0,0 +1,36 @@
+/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
+/*
+ * include/uapi/linux/ethtool_netlink.h - netlink interface for ethtool
+ *
+ * See Documentation/networking/ethtool-netlink.txt in kernel source tree for
+ * doucumentation of the interface.
+ */
+
+#ifndef _UAPI_LINUX_ETHTOOL_NETLINK_H_
+#define _UAPI_LINUX_ETHTOOL_NETLINK_H_
+
+#include <linux/ethtool.h>
+
+/* message types - userspace to kernel */
+enum {
+ ETHTOOL_MSG_USER_NONE,
+
+ /* add new constants above here */
+ __ETHTOOL_MSG_USER_CNT,
+ ETHTOOL_MSG_USER_MAX = __ETHTOOL_MSG_USER_CNT - 1
+};
+
+/* message types - kernel to userspace */
+enum {
+ ETHTOOL_MSG_KERNEL_NONE,
+
+ /* add new constants above here */
+ __ETHTOOL_MSG_KERNEL_CNT,
+ ETHTOOL_MSG_KERNEL_MAX = __ETHTOOL_MSG_KERNEL_CNT - 1
+};
+
+/* generic netlink info */
+#define ETHTOOL_GENL_NAME "ethtool"
+#define ETHTOOL_GENL_VERSION 1
+
+#endif /* _UAPI_LINUX_ETHTOOL_NETLINK_H_ */
diff --git a/net/Kconfig b/net/Kconfig
index 4bef62b4c806..a279f66876c9 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -443,6 +443,14 @@ config FAILOVER
migration of VMs with direct attached VFs by failing over to the
paravirtual datapath when the VF is unplugged.
+config ETHTOOL_NETLINK
+ bool "Netlink interface for ethtool"
+ default y
+ help
+ An alternative userspace interface for ethtool based on generic
+ netlink. It provides better extensibility and some new features,
+ e.g. notification messages.
+
endif # if NET
# Used by archs to tell that they support BPF JIT compiler plus which flavour.
diff --git a/net/ethtool/Makefile b/net/ethtool/Makefile
index f68387618973..59d5ee230c29 100644
--- a/net/ethtool/Makefile
+++ b/net/ethtool/Makefile
@@ -1,3 +1,7 @@
# SPDX-License-Identifier: GPL-2.0-only
-obj-y += ioctl.o common.o
+obj-y += ioctl.o common.o
+
+obj-$(CONFIG_ETHTOOL_NETLINK) += ethtool_nl.o
+
+ethtool_nl-y := netlink.o
diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c
new file mode 100644
index 000000000000..59e1ebde2f15
--- /dev/null
+++ b/net/ethtool/netlink.c
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#include <linux/ethtool_netlink.h>
+#include "netlink.h"
+
+/* genetlink setup */
+
+static const struct genl_ops ethtool_genl_ops[] = {
+};
+
+static struct genl_family ethtool_genl_family = {
+ .name = ETHTOOL_GENL_NAME,
+ .version = ETHTOOL_GENL_VERSION,
+ .netnsok = true,
+ .parallel_ops = true,
+ .ops = ethtool_genl_ops,
+ .n_ops = ARRAY_SIZE(ethtool_genl_ops),
+};
+
+/* module setup */
+
+static int __init ethnl_init(void)
+{
+ int ret;
+
+ ret = genl_register_family(&ethtool_genl_family);
+ if (WARN(ret < 0, "ethtool: genetlink family registration failed"))
+ return ret;
+
+ return 0;
+}
+
+subsys_initcall(ethnl_init);
diff --git a/net/ethtool/netlink.h b/net/ethtool/netlink.h
new file mode 100644
index 000000000000..e4220780d368
--- /dev/null
+++ b/net/ethtool/netlink.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef _NET_ETHTOOL_NETLINK_H
+#define _NET_ETHTOOL_NETLINK_H
+
+#include <linux/ethtool_netlink.h>
+#include <linux/netdevice.h>
+#include <net/genetlink.h>
+
+#endif /* _NET_ETHTOOL_NETLINK_H */
--
2.34.1