From a8224734c8ab1eb2efe3a410165fb8d0ef4055e2 Mon Sep 17 00:00:00 2001 From: Michal Kubecek 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 Reviewed-by: Florian Fainelli Reviewed-by: Andrew Lunn Signed-off-by: David S. Miller Signed-off-by: Xiaodong Li 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 +#include + +#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 + +/* 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 +#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(ðtool_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 +#include +#include + +#endif /* _NET_ETHTOOL_NETLINK_H */ -- 2.34.1