|  | ============================= | 
|  | Netlink interface for ethtool | 
|  | ============================= | 
|  |  | 
|  |  | 
|  | Basic information | 
|  | ================= | 
|  |  | 
|  | Netlink interface for ethtool uses generic netlink family ``ethtool`` | 
|  | (userspace application should use macros ``ETHTOOL_GENL_NAME`` and | 
|  | ``ETHTOOL_GENL_VERSION`` defined in ``<linux/ethtool_netlink.h>`` uapi | 
|  | header). This family does not use a specific header, all information in | 
|  | requests and replies is passed using netlink attributes. | 
|  |  | 
|  | The ethtool netlink interface uses extended ACK for error and warning | 
|  | reporting, userspace application developers are encouraged to make these | 
|  | messages available to user in a suitable way. | 
|  |  | 
|  | Requests can be divided into three categories: "get" (retrieving information), | 
|  | "set" (setting parameters) and "action" (invoking an action). | 
|  |  | 
|  | All "set" and "action" type requests require admin privileges | 
|  | (``CAP_NET_ADMIN`` in the namespace). Most "get" type requests are allowed for | 
|  | anyone but there are exceptions (where the response contains sensitive | 
|  | information). In some cases, the request as such is allowed for anyone but | 
|  | unprivileged users have attributes with sensitive information (e.g. | 
|  | wake-on-lan password) omitted. | 
|  |  | 
|  |  | 
|  | Conventions | 
|  | =========== | 
|  |  | 
|  | Attributes which represent a boolean value usually use NLA_U8 type so that we | 
|  | can distinguish three states: "on", "off" and "not present" (meaning the | 
|  | information is not available in "get" requests or value is not to be changed | 
|  | in "set" requests). For these attributes, the "true" value should be passed as | 
|  | number 1 but any non-zero value should be understood as "true" by recipient. | 
|  | In the tables below, "bool" denotes NLA_U8 attributes interpreted in this way. | 
|  |  | 
|  | In the message structure descriptions below, if an attribute name is suffixed | 
|  | with "+", parent nest can contain multiple attributes of the same type. This | 
|  | implements an array of entries. | 
|  |  | 
|  | Attributes that need to be filled-in by device drivers and that are dumped to | 
|  | user space based on whether they are valid or not should not use zero as a | 
|  | valid value. This avoids the need to explicitly signal the validity of the | 
|  | attribute in the device driver API. | 
|  |  | 
|  |  | 
|  | Request header | 
|  | ============== | 
|  |  | 
|  | Each request or reply message contains a nested attribute with common header. | 
|  | Structure of this header is | 
|  |  | 
|  | ==============================  ======  ============================= | 
|  | ``ETHTOOL_A_HEADER_DEV_INDEX``  u32     device ifindex | 
|  | ``ETHTOOL_A_HEADER_DEV_NAME``   string  device name | 
|  | ``ETHTOOL_A_HEADER_FLAGS``      u32     flags common for all requests | 
|  | ``ETHTOOL_A_HEADER_PHY_INDEX``  u32     phy device index | 
|  | ==============================  ======  ============================= | 
|  |  | 
|  | ``ETHTOOL_A_HEADER_DEV_INDEX`` and ``ETHTOOL_A_HEADER_DEV_NAME`` identify the | 
|  | device message relates to. One of them is sufficient in requests, if both are | 
|  | used, they must identify the same device. Some requests, e.g. global string | 
|  | sets, do not require device identification. Most ``GET`` requests also allow | 
|  | dump requests without device identification to query the same information for | 
|  | all devices providing it (each device in a separate message). | 
|  |  | 
|  | ``ETHTOOL_A_HEADER_FLAGS`` is a bitmap of request flags common for all request | 
|  | types. The interpretation of these flags is the same for all request types but | 
|  | 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, | 
|  | the behaviour is backward compatible, i.e. requests from old clients not aware | 
|  | of the flag should be interpreted the way the client expects. A client must | 
|  | not set flags it does not understand. | 
|  |  | 
|  | ``ETHTOOL_A_HEADER_PHY_INDEX`` identifies the Ethernet PHY the message relates to. | 
|  | As there are numerous commands that are related to PHY configuration, and because | 
|  | there may be more than one PHY on the link, the PHY index can be passed in the | 
|  | request for the commands that needs it. It is, however, not mandatory, and if it | 
|  | is not passed for commands that target a PHY, the net_device.phydev pointer | 
|  | is used. | 
|  |  | 
|  | Bit sets | 
|  | ======== | 
|  |  | 
|  | For short bitmaps of (reasonably) fixed length, standard ``NLA_BITFIELD32`` | 
|  | type is used. For arbitrary length bitmaps, ethtool netlink uses a nested | 
|  | attribute with contents of one of two forms: compact (two binary bitmaps | 
|  | representing bit values and mask of affected bits) and bit-by-bit (list of | 
|  | bits identified by either index or name). | 
|  |  | 
|  | Verbose (bit-by-bit) bitsets allow sending symbolic names for bits together | 
|  | with their values which saves a round trip (when the bitset is passed in a | 
|  | request) or at least a second request (when the bitset is in a reply). This is | 
|  | useful for one shot applications like traditional ethtool command. On the | 
|  | other hand, long running applications like ethtool monitor (displaying | 
|  | notifications) or network management daemons may prefer fetching the names | 
|  | only once and using compact form to save message size. Notifications from | 
|  | ethtool netlink interface always use compact form for bitsets. | 
|  |  | 
|  | A bitset can represent either a value/mask pair (``ETHTOOL_A_BITSET_NOMASK`` | 
|  | not set) or a single bitmap (``ETHTOOL_A_BITSET_NOMASK`` set). In requests | 
|  | modifying a bitmap, the former changes the bit set in mask to values set in | 
|  | value and preserves the rest; the latter sets the bits set in the bitmap and | 
|  | clears the rest. | 
|  |  | 
|  | Compact form: nested (bitset) attribute contents: | 
|  |  | 
|  | ============================  ======  ============================ | 
|  | ``ETHTOOL_A_BITSET_NOMASK``   flag    no mask, only a list | 
|  | ``ETHTOOL_A_BITSET_SIZE``     u32     number of significant bits | 
|  | ``ETHTOOL_A_BITSET_VALUE``    binary  bitmap of bit values | 
|  | ``ETHTOOL_A_BITSET_MASK``     binary  bitmap of valid bits | 
|  | ============================  ======  ============================ | 
|  |  | 
|  | Value and mask must have length at least ``ETHTOOL_A_BITSET_SIZE`` bits | 
|  | rounded up to a multiple of 32 bits. They consist of 32-bit words in host byte | 
|  | order, words ordered from least significant to most significant (i.e. the same | 
|  | way as bitmaps are passed with ioctl interface). | 
|  |  | 
|  | For compact form, ``ETHTOOL_A_BITSET_SIZE`` and ``ETHTOOL_A_BITSET_VALUE`` are | 
|  | mandatory. ``ETHTOOL_A_BITSET_MASK`` attribute is mandatory if | 
|  | ``ETHTOOL_A_BITSET_NOMASK`` is not set (bitset represents a value/mask pair); | 
|  | if ``ETHTOOL_A_BITSET_NOMASK`` is not set, ``ETHTOOL_A_BITSET_MASK`` is not | 
|  | allowed (bitset represents a single bitmap. | 
|  |  | 
|  | Kernel bit set length may differ from userspace length if older application is | 
|  | used on newer kernel or vice versa. If userspace bitmap is longer, an error is | 
|  | issued only if the request actually tries to set values of some bits not | 
|  | recognized by kernel. | 
|  |  | 
|  | Bit-by-bit form: nested (bitset) attribute contents: | 
|  |  | 
|  | +------------------------------------+--------+-----------------------------+ | 
|  | | ``ETHTOOL_A_BITSET_NOMASK``        | flag   | no mask, only a list        | | 
|  | +------------------------------------+--------+-----------------------------+ | 
|  | | ``ETHTOOL_A_BITSET_SIZE``          | u32    | number of significant bits  | | 
|  | +------------------------------------+--------+-----------------------------+ | 
|  | | ``ETHTOOL_A_BITSET_BITS``          | nested | array of bits               | | 
|  | +-+----------------------------------+--------+-----------------------------+ | 
|  | | | ``ETHTOOL_A_BITSET_BITS_BIT+``   | nested | one bit                     | | 
|  | +-+-+--------------------------------+--------+-----------------------------+ | 
|  | | | | ``ETHTOOL_A_BITSET_BIT_INDEX`` | u32    | bit index (0 for LSB)       | | 
|  | +-+-+--------------------------------+--------+-----------------------------+ | 
|  | | | | ``ETHTOOL_A_BITSET_BIT_NAME``  | string | bit name                    | | 
|  | +-+-+--------------------------------+--------+-----------------------------+ | 
|  | | | | ``ETHTOOL_A_BITSET_BIT_VALUE`` | flag   | present if bit is set       | | 
|  | +-+-+--------------------------------+--------+-----------------------------+ | 
|  |  | 
|  | Bit size is optional for bit-by-bit form. ``ETHTOOL_A_BITSET_BITS`` nest can | 
|  | only contain ``ETHTOOL_A_BITSET_BITS_BIT`` attributes but there can be an | 
|  | arbitrary number of them.  A bit may be identified by its index or by its | 
|  | name. When used in requests, listed bits are set to 0 or 1 according to | 
|  | ``ETHTOOL_A_BITSET_BIT_VALUE``, the rest is preserved. A request fails if | 
|  | index exceeds kernel bit length or if name is not recognized. | 
|  |  | 
|  | When ``ETHTOOL_A_BITSET_NOMASK`` flag is present, bitset is interpreted as | 
|  | a simple bitmap. ``ETHTOOL_A_BITSET_BIT_VALUE`` attributes are not used in | 
|  | such case. Such bitset represents a bitmap with listed bits set and the rest | 
|  | zero. | 
|  |  | 
|  | In requests, application can use either form. Form used by kernel in reply is | 
|  | 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 | 
|  | ===================== | 
|  |  | 
|  | All constants identifying message types use ``ETHTOOL_CMD_`` prefix and suffix | 
|  | according to message purpose: | 
|  |  | 
|  | ==============    ====================================== | 
|  | ``_GET``          userspace request to retrieve data | 
|  | ``_SET``          userspace request to set data | 
|  | ``_ACT``          userspace request to perform an action | 
|  | ``_GET_REPLY``    kernel reply to a ``GET`` request | 
|  | ``_SET_REPLY``    kernel reply to a ``SET`` request | 
|  | ``_ACT_REPLY``    kernel reply to an ``ACT`` request | 
|  | ``_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 | 
|  | ``ETHTOOL_MSG_FEC_GET``               get FEC settings | 
|  | ``ETHTOOL_MSG_FEC_SET``               set FEC settings | 
|  | ``ETHTOOL_MSG_MODULE_EEPROM_GET``     read SFP module EEPROM | 
|  | ``ETHTOOL_MSG_STATS_GET``             get standard statistics | 
|  | ``ETHTOOL_MSG_PHC_VCLOCKS_GET``       get PHC virtual clocks info | 
|  | ``ETHTOOL_MSG_MODULE_SET``            set transceiver module parameters | 
|  | ``ETHTOOL_MSG_MODULE_GET``            get transceiver module parameters | 
|  | ``ETHTOOL_MSG_PSE_SET``               set PSE parameters | 
|  | ``ETHTOOL_MSG_PSE_GET``               get PSE parameters | 
|  | ``ETHTOOL_MSG_RSS_GET``               get RSS settings | 
|  | ``ETHTOOL_MSG_PLCA_GET_CFG``          get PLCA RS parameters | 
|  | ``ETHTOOL_MSG_PLCA_SET_CFG``          set PLCA RS parameters | 
|  | ``ETHTOOL_MSG_PLCA_GET_STATUS``       get PLCA RS status | 
|  | ``ETHTOOL_MSG_MM_GET``                get MAC merge layer state | 
|  | ``ETHTOOL_MSG_MM_SET``                set MAC merge layer parameters | 
|  | ``ETHTOOL_MSG_MODULE_FW_FLASH_ACT``   flash transceiver module firmware | 
|  | ``ETHTOOL_MSG_PHY_GET``               get Ethernet PHY information | 
|  | ===================================== ================================= | 
|  |  | 
|  | 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 | 
|  | ``ETHTOOL_MSG_FEC_GET_REPLY``            FEC settings | 
|  | ``ETHTOOL_MSG_FEC_NTF``                  FEC settings | 
|  | ``ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY``  read SFP module EEPROM | 
|  | ``ETHTOOL_MSG_STATS_GET_REPLY``          standard statistics | 
|  | ``ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY``    PHC virtual clocks info | 
|  | ``ETHTOOL_MSG_MODULE_GET_REPLY``         transceiver module parameters | 
|  | ``ETHTOOL_MSG_PSE_GET_REPLY``            PSE parameters | 
|  | ``ETHTOOL_MSG_RSS_GET_REPLY``            RSS settings | 
|  | ``ETHTOOL_MSG_PLCA_GET_CFG_REPLY``       PLCA RS parameters | 
|  | ``ETHTOOL_MSG_PLCA_GET_STATUS_REPLY``    PLCA RS status | 
|  | ``ETHTOOL_MSG_PLCA_NTF``                 PLCA RS parameters | 
|  | ``ETHTOOL_MSG_MM_GET_REPLY``             MAC merge layer status | 
|  | ``ETHTOOL_MSG_MODULE_FW_FLASH_NTF``      transceiver module flash updates | 
|  | ``ETHTOOL_MSG_PHY_GET_REPLY``            Ethernet PHY information | 
|  | ``ETHTOOL_MSG_PHY_NTF``                  Ethernet PHY information change | 
|  | ======================================== ================================= | 
|  |  | 
|  | ``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`` | 
|  | request with ``NLM_F_DUMP`` and no device identification can be used to query | 
|  | the information for all devices supporting the request. | 
|  |  | 
|  | If the data can be also modified, corresponding ``SET`` message with the same | 
|  | layout as corresponding ``GET_REPLY`` is used to request changes. Only | 
|  | attributes where a change is requested are included in such request (also, not | 
|  | all attributes may be changed). Replies to most ``SET`` request consist only | 
|  | of error code and extack; if kernel provides additional data, it is sent in | 
|  | the form of corresponding ``SET_REPLY`` message which can be suppressed by | 
|  | setting ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header. | 
|  |  | 
|  | Data modification also triggers sending a ``NTF`` message with a notification. | 
|  | These usually bear only a subset of attributes which was affected by the | 
|  | change. The same notification is issued if the data is modified using other | 
|  | means (mostly ioctl ethtool interface). Unlike notifications from ethtool | 
|  | netlink code which are only sent if something actually changed, notifications | 
|  | triggered by ioctl interface may be sent even if the request did not actually | 
|  | change any data. | 
|  |  | 
|  | ``ACT`` messages request kernel (driver) to perform a specific action. If some | 
|  | information is reported by kernel (which can be suppressed by setting | 
|  | ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header), the reply takes form of | 
|  | an ``ACT_REPLY`` message. Performing an action also triggers a notification | 
|  | (``NTF`` message). | 
|  |  | 
|  | 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 | 
|  | ``ETHTOOL_A_LINKMODES_RATE_MATCHING``       u8      PHY rate matching | 
|  | ==========================================  ======  ========================== | 
|  |  | 
|  | 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_RATE_MATCHING``       u8      PHY rate matching | 
|  | ``ETHTOOL_A_LINKMODES_LANES``               u32     lanes | 
|  | ==========================================  ======  ========================== | 
|  |  | 
|  | ``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, duplex and lanes is specified, kernel adjusts advertised modes to all | 
|  | supported modes matching speed, duplex, lanes or all (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 | 
|  | ``ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT``  u32     count of link down events | 
|  | ====================================  ======  ============================ | 
|  |  | 
|  | 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 | 
|  |  | 
|  | ``ETHTOOL_LINK_EXT_STATE_MODULE``                     Transceiver module issue | 
|  | ================================================      ============================================ | 
|  |  | 
|  | 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 | 
|  | ===================================================   ============================================ | 
|  |  | 
|  | Transceiver module issue substates: | 
|  |  | 
|  | ===================================================   ============================================ | 
|  | ``ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY``   The CMIS Module State Machine did not reach | 
|  | the ModuleReady state. For example, if the | 
|  | module is stuck at ModuleFault state | 
|  | ===================================================   ============================================ | 
|  |  | 
|  | 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 contains 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 | 
|  | ``ETHTOOL_A_RINGS_RX_BUF_LEN``            u32     size of buffers on the ring | 
|  | ``ETHTOOL_A_RINGS_TCP_DATA_SPLIT``        u8      TCP header / data split | 
|  | ``ETHTOOL_A_RINGS_CQE_SIZE``              u32     Size of TX/RX CQE | 
|  | ``ETHTOOL_A_RINGS_TX_PUSH``               u8      flag of TX Push mode | 
|  | ``ETHTOOL_A_RINGS_RX_PUSH``               u8      flag of RX Push mode | 
|  | ``ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN``       u32     size of TX push buffer | 
|  | ``ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX``   u32     max size of TX push buffer | 
|  | =======================================   ======  =========================== | 
|  |  | 
|  | ``ETHTOOL_A_RINGS_TCP_DATA_SPLIT`` indicates whether the device is usable with | 
|  | page-flipping TCP zero-copy receive (``getsockopt(TCP_ZEROCOPY_RECEIVE)``). | 
|  | If enabled the device is configured to place frame headers and data into | 
|  | separate buffers. The device configuration must make it possible to receive | 
|  | full memory pages of data, for example because MTU is high enough or through | 
|  | HW-GRO. | 
|  |  | 
|  | ``ETHTOOL_A_RINGS_[RX|TX]_PUSH`` flag is used to enable descriptor fast | 
|  | path to send or receive packets. In ordinary path, driver fills descriptors in DRAM and | 
|  | notifies NIC hardware. In fast path, driver pushes descriptors to the device | 
|  | through MMIO writes, thus reducing the latency. However, enabling this feature | 
|  | may increase the CPU cost. Drivers may enforce additional per-packet | 
|  | eligibility checks (e.g. on packet size). | 
|  |  | 
|  | ``ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN`` specifies the maximum number of bytes of a | 
|  | transmitted packet a driver can push directly to the underlying device | 
|  | ('push' mode). Pushing some of the payload bytes to the device has the | 
|  | advantages of reducing latency for small packets by avoiding DMA mapping (same | 
|  | as ``ETHTOOL_A_RINGS_TX_PUSH`` parameter) as well as allowing the underlying | 
|  | device to process packet headers ahead of fetching its payload. | 
|  | This can help the device to make fast actions based on the packet's headers. | 
|  | This is similar to the "tx-copybreak" parameter, which copies the packet to a | 
|  | preallocated DMA memory area instead of mapping new memory. However, | 
|  | tx-push-buff parameter copies the packet directly to the device to allow the | 
|  | device to take faster actions on the packet. | 
|  |  | 
|  | 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 | 
|  | ``ETHTOOL_A_RINGS_RX_BUF_LEN``        u32     size of buffers on the ring | 
|  | ``ETHTOOL_A_RINGS_CQE_SIZE``          u32     Size of TX/RX CQE | 
|  | ``ETHTOOL_A_RINGS_TX_PUSH``           u8      flag of TX Push mode | 
|  | ``ETHTOOL_A_RINGS_RX_PUSH``           u8      flag of RX Push mode | 
|  | ``ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN``   u32     size of TX push buffer | 
|  | ====================================  ======  =========================== | 
|  |  | 
|  | Kernel checks that requested ring sizes do not exceed limits reported by | 
|  | driver. Driver may impose additional constraints and may not support all | 
|  | attributes. | 
|  |  | 
|  |  | 
|  | ``ETHTOOL_A_RINGS_CQE_SIZE`` specifies the completion queue event size. | 
|  | Completion queue events (CQE) are the events posted by NIC to indicate the | 
|  | completion status of a packet when the packet is sent (like send success or | 
|  | error) or received (like pointers to packet fragments). The CQE size parameter | 
|  | enables to modify the CQE size other than default size if NIC supports it. | 
|  | A bigger CQE can have more receive buffer pointers, and in turn the NIC can | 
|  | transfer a bigger frame from wire. Based on the NIC hardware, the overall | 
|  | completion queue size can be adjusted in the driver if CQE size is modified. | 
|  |  | 
|  | 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 support 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 | 
|  | ``ETHTOOL_A_COALESCE_USE_CQE_TX``            bool    timer reset mode, Tx | 
|  | ``ETHTOOL_A_COALESCE_USE_CQE_RX``            bool    timer reset mode, Rx | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES``     u32     max aggr size, Tx | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES``    u32     max aggr packets, Tx | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS``    u32     time (us), aggr, Tx | 
|  | ``ETHTOOL_A_COALESCE_RX_PROFILE``            nested  profile of DIM, Rx | 
|  | ``ETHTOOL_A_COALESCE_TX_PROFILE``            nested  profile of DIM, Tx | 
|  | ===========================================  ======  ======================= | 
|  |  | 
|  | 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). | 
|  |  | 
|  | Timer reset mode (``ETHTOOL_A_COALESCE_USE_CQE_TX`` and | 
|  | ``ETHTOOL_A_COALESCE_USE_CQE_RX``) controls the interaction between packet | 
|  | arrival and the various time based delay parameters. By default timers are | 
|  | expected to limit the max delay between any packet arrival/departure and a | 
|  | corresponding interrupt. In this mode timer should be started by packet | 
|  | arrival (sometimes delivery of previous interrupt) and reset when interrupt | 
|  | is delivered. | 
|  | Setting the appropriate attribute to 1 will enable ``CQE`` mode, where | 
|  | each packet event resets the timer. In this mode timer is used to force | 
|  | the interrupt if queue goes idle, while busy queues depend on the packet | 
|  | limit to trigger interrupts. | 
|  |  | 
|  | Tx aggregation consists of copying frames into a contiguous buffer so that they | 
|  | can be submitted as a single IO operation. ``ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES`` | 
|  | describes the maximum size in bytes for the submitted buffer. | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES`` describes the maximum number of frames | 
|  | that can be aggregated into a single buffer. | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS`` describes the amount of time in usecs, | 
|  | counted since the first packet arrival in an aggregated block, after which the | 
|  | block should be sent. | 
|  | This feature is mainly of interest for specific USB devices which does not cope | 
|  | well with frequent small-sized URBs transmissions. | 
|  |  | 
|  | ``ETHTOOL_A_COALESCE_RX_PROFILE`` and ``ETHTOOL_A_COALESCE_TX_PROFILE`` refer | 
|  | to DIM parameters, see `Generic Network Dynamic Interrupt Moderation (Net DIM) | 
|  | <https://www.kernel.org/doc/Documentation/networking/net_dim.rst>`_. | 
|  |  | 
|  | 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 | 
|  | ``ETHTOOL_A_COALESCE_USE_CQE_TX``            bool    timer reset mode, Tx | 
|  | ``ETHTOOL_A_COALESCE_USE_CQE_RX``            bool    timer reset mode, Rx | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES``     u32     max aggr size, Tx | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES``    u32     max aggr packets, Tx | 
|  | ``ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS``    u32     time (us), aggr, Tx | 
|  | ``ETHTOOL_A_COALESCE_RX_PROFILE``            nested  profile of DIM, Rx | 
|  | ``ETHTOOL_A_COALESCE_TX_PROFILE``            nested  profile of DIM, Tx | 
|  | ===========================================  ======  ======================= | 
|  |  | 
|  | 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. | 
|  |  | 
|  | Compared to requests issued via the ``ioctl()`` netlink version of this request | 
|  | will try harder to make sure that values specified by the user have been applied | 
|  | and may call the driver twice. | 
|  |  | 
|  |  | 
|  | PAUSE_GET | 
|  | ========= | 
|  |  | 
|  | Gets pause frame settings like ``ETHTOOL_GPAUSEPARAM`` ioctl request. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PAUSE_HEADER``             nested  request header | 
|  | ``ETHTOOL_A_PAUSE_STATS_SRC``          u32     source of statistics | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | ``ETHTOOL_A_PAUSE_STATS_SRC`` is optional. It takes values from: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_mac_stats_src | 
|  |  | 
|  | If absent from the request, stats will be provided with | 
|  | an ``ETHTOOL_A_PAUSE_STATS_SRC`` attribute in the response equal to | 
|  | ``ETHTOOL_MAC_STATS_SRC_AGGREGATE``. | 
|  |  | 
|  | 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 Energy Efficient Ethernet settings 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 Energy Efficient Ethernet parameters like ``ETHTOOL_SEEE`` 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_STATS``             nested  HW timestamping statistics | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | ``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). | 
|  |  | 
|  | Additional hardware timestamping statistics response contents: | 
|  |  | 
|  | =====================================  ======  =================================== | 
|  | ``ETHTOOL_A_TS_STAT_TX_PKTS``          uint    Packets with Tx HW timestamps | 
|  | ``ETHTOOL_A_TS_STAT_TX_LOST``          uint    Tx HW timestamp not arrived count | 
|  | ``ETHTOOL_A_TS_STAT_TX_ERR``           uint    HW error request Tx timestamp count | 
|  | =====================================  ======  =================================== | 
|  |  | 
|  | 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_RESULT_SRC``          | u32    | information source  | | 
|  | +-+-+-----------------------------------------+--------+---------------------+ | 
|  | | | ``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        | | 
|  | +-+-+-----------------------------------------+--------+---------------------+ | 
|  | | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_SRC``    | u32    | information source  | | 
|  | +-+-+-----------------------------------------+--------+---------------------+ | 
|  |  | 
|  |  | 
|  | 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. | 
|  |  | 
|  | FEC_GET | 
|  | ======= | 
|  |  | 
|  | Gets FEC configuration and state like ``ETHTOOL_GFECPARAM`` ioctl request. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_FEC_HEADER``               nested  request header | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_FEC_HEADER``               nested  request header | 
|  | ``ETHTOOL_A_FEC_MODES``                bitset  configured modes | 
|  | ``ETHTOOL_A_FEC_AUTO``                 bool    FEC mode auto selection | 
|  | ``ETHTOOL_A_FEC_ACTIVE``               u32     index of active FEC mode | 
|  | ``ETHTOOL_A_FEC_STATS``                nested  FEC statistics | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | ``ETHTOOL_A_FEC_ACTIVE`` is the bit index of the FEC link mode currently | 
|  | active on the interface. This attribute may not be present if device does | 
|  | not support FEC. | 
|  |  | 
|  | ``ETHTOOL_A_FEC_MODES`` and ``ETHTOOL_A_FEC_AUTO`` are only meaningful when | 
|  | autonegotiation is disabled. If ``ETHTOOL_A_FEC_AUTO`` is non-zero driver will | 
|  | select the FEC mode automatically based on the parameters of the SFP module. | 
|  | This is equivalent to the ``ETHTOOL_FEC_AUTO`` bit of the ioctl interface. | 
|  | ``ETHTOOL_A_FEC_MODES`` carry the current FEC configuration using link mode | 
|  | bits (rather than old ``ETHTOOL_FEC_*`` bits). | 
|  |  | 
|  | ``ETHTOOL_A_FEC_STATS`` are reported if ``ETHTOOL_FLAG_STATS`` was set in | 
|  | ``ETHTOOL_A_HEADER_FLAGS``. | 
|  | Each attribute carries an array of 64bit statistics. First entry in the array | 
|  | contains the total number of events on the port, while the following entries | 
|  | are counters corresponding to lanes/PCS instances. The number of entries in | 
|  | the array will be: | 
|  |  | 
|  | +--------------+---------------------------------------------+ | 
|  | | `0`          | device does not support FEC statistics      | | 
|  | +--------------+---------------------------------------------+ | 
|  | | `1`          | device does not support per-lane break down | | 
|  | +--------------+---------------------------------------------+ | 
|  | | `1 + #lanes` | device has full support for FEC stats       | | 
|  | +--------------+---------------------------------------------+ | 
|  |  | 
|  | Drivers fill in the statistics in the following structure: | 
|  |  | 
|  | .. kernel-doc:: include/linux/ethtool.h | 
|  | :identifiers: ethtool_fec_stats | 
|  |  | 
|  | FEC_SET | 
|  | ======= | 
|  |  | 
|  | Sets FEC parameters like ``ETHTOOL_SFECPARAM`` ioctl request. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_FEC_HEADER``               nested  request header | 
|  | ``ETHTOOL_A_FEC_MODES``                bitset  configured modes | 
|  | ``ETHTOOL_A_FEC_AUTO``                 bool    FEC mode auto selection | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | ``FEC_SET`` is only meaningful when autonegotiation is disabled. Otherwise | 
|  | FEC mode is selected as part of autonegotiation. | 
|  |  | 
|  | ``ETHTOOL_A_FEC_MODES`` selects which FEC mode should be used. It's recommended | 
|  | to set only one bit, if multiple bits are set driver may choose between them | 
|  | in an implementation specific way. | 
|  |  | 
|  | ``ETHTOOL_A_FEC_AUTO`` requests the driver to choose FEC mode based on SFP | 
|  | module parameters. This does not mean autonegotiation. | 
|  |  | 
|  | MODULE_EEPROM_GET | 
|  | ================= | 
|  |  | 
|  | Fetch module EEPROM data dump. | 
|  | This interface is designed to allow dumps of at most 1/2 page at once. This | 
|  | means only dumps of 128 (or less) bytes are allowed, without crossing half page | 
|  | boundary located at offset 128. For pages other than 0 only high 128 bytes are | 
|  | accessible. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =======================================  ======  ========================== | 
|  | ``ETHTOOL_A_MODULE_EEPROM_HEADER``       nested  request header | 
|  | ``ETHTOOL_A_MODULE_EEPROM_OFFSET``       u32     offset within a page | 
|  | ``ETHTOOL_A_MODULE_EEPROM_LENGTH``       u32     amount of bytes to read | 
|  | ``ETHTOOL_A_MODULE_EEPROM_PAGE``         u8      page number | 
|  | ``ETHTOOL_A_MODULE_EEPROM_BANK``         u8      bank number | 
|  | ``ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS``  u8      page I2C address | 
|  | =======================================  ======  ========================== | 
|  |  | 
|  | If ``ETHTOOL_A_MODULE_EEPROM_BANK`` is not specified, bank 0 is assumed. | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | +---------------------------------------------+--------+---------------------+ | 
|  | | ``ETHTOOL_A_MODULE_EEPROM_HEADER``          | nested | reply header        | | 
|  | +---------------------------------------------+--------+---------------------+ | 
|  | | ``ETHTOOL_A_MODULE_EEPROM_DATA``            | binary | array of bytes from | | 
|  | |                                             |        | module EEPROM       | | 
|  | +---------------------------------------------+--------+---------------------+ | 
|  |  | 
|  | ``ETHTOOL_A_MODULE_EEPROM_DATA`` has an attribute length equal to the amount of | 
|  | bytes driver actually read. | 
|  |  | 
|  | STATS_GET | 
|  | ========= | 
|  |  | 
|  | Get standard statistics for the interface. Note that this is not | 
|  | a re-implementation of ``ETHTOOL_GSTATS`` which exposed driver-defined | 
|  | stats. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =======================================  ======  ========================== | 
|  | ``ETHTOOL_A_STATS_HEADER``               nested  request header | 
|  | ``ETHTOOL_A_STATS_SRC``                  u32     source of statistics | 
|  | ``ETHTOOL_A_STATS_GROUPS``               bitset  requested groups of stats | 
|  | =======================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | +-----------------------------------+--------+--------------------------------+ | 
|  | | ``ETHTOOL_A_STATS_HEADER``        | nested | reply header                   | | 
|  | +-----------------------------------+--------+--------------------------------+ | 
|  | | ``ETHTOOL_A_STATS_SRC``           | u32    | source of statistics           | | 
|  | +-----------------------------------+--------+--------------------------------+ | 
|  | | ``ETHTOOL_A_STATS_GRP``           | nested | one or more group of stats     | | 
|  | +-+---------------------------------+--------+--------------------------------+ | 
|  | | | ``ETHTOOL_A_STATS_GRP_ID``      | u32    | group ID - ``ETHTOOL_STATS_*`` | | 
|  | +-+---------------------------------+--------+--------------------------------+ | 
|  | | | ``ETHTOOL_A_STATS_GRP_SS_ID``   | u32    | string set ID for names        | | 
|  | +-+---------------------------------+--------+--------------------------------+ | 
|  | | | ``ETHTOOL_A_STATS_GRP_STAT``    | nested | nest containing a statistic    | | 
|  | +-+---------------------------------+--------+--------------------------------+ | 
|  | | | ``ETHTOOL_A_STATS_GRP_HIST_RX`` | nested | histogram statistic (Rx)       | | 
|  | +-+---------------------------------+--------+--------------------------------+ | 
|  | | | ``ETHTOOL_A_STATS_GRP_HIST_TX`` | nested | histogram statistic (Tx)       | | 
|  | +-+---------------------------------+--------+--------------------------------+ | 
|  |  | 
|  | Users specify which groups of statistics they are requesting via | 
|  | the ``ETHTOOL_A_STATS_GROUPS`` bitset. Currently defined values are: | 
|  |  | 
|  | ====================== ======== =============================================== | 
|  | ETHTOOL_STATS_ETH_MAC  eth-mac  Basic IEEE 802.3 MAC statistics (30.3.1.1.*) | 
|  | ETHTOOL_STATS_ETH_PHY  eth-phy  Basic IEEE 802.3 PHY statistics (30.3.2.1.*) | 
|  | ETHTOOL_STATS_ETH_CTRL eth-ctrl Basic IEEE 802.3 MAC Ctrl statistics (30.3.3.*) | 
|  | ETHTOOL_STATS_RMON     rmon     RMON (RFC 2819) statistics | 
|  | ====================== ======== =============================================== | 
|  |  | 
|  | Each group should have a corresponding ``ETHTOOL_A_STATS_GRP`` in the reply. | 
|  | ``ETHTOOL_A_STATS_GRP_ID`` identifies which group's statistics nest contains. | 
|  | ``ETHTOOL_A_STATS_GRP_SS_ID`` identifies the string set ID for the names of | 
|  | the statistics in the group, if available. | 
|  |  | 
|  | Statistics are added to the ``ETHTOOL_A_STATS_GRP`` nest under | 
|  | ``ETHTOOL_A_STATS_GRP_STAT``. ``ETHTOOL_A_STATS_GRP_STAT`` should contain | 
|  | single 8 byte (u64) attribute inside - the type of that attribute is | 
|  | the statistic ID and the value is the value of the statistic. | 
|  | Each group has its own interpretation of statistic IDs. | 
|  | Attribute IDs correspond to strings from the string set identified | 
|  | by ``ETHTOOL_A_STATS_GRP_SS_ID``. Complex statistics (such as RMON histogram | 
|  | entries) are also listed inside ``ETHTOOL_A_STATS_GRP`` and do not have | 
|  | a string defined in the string set. | 
|  |  | 
|  | RMON "histogram" counters count number of packets within given size range. | 
|  | Because RFC does not specify the ranges beyond the standard 1518 MTU devices | 
|  | differ in definition of buckets. For this reason the definition of packet ranges | 
|  | is left to each driver. | 
|  |  | 
|  | ``ETHTOOL_A_STATS_GRP_HIST_RX`` and ``ETHTOOL_A_STATS_GRP_HIST_TX`` nests | 
|  | contain the following attributes: | 
|  |  | 
|  | ================================= ====== =================================== | 
|  | ETHTOOL_A_STATS_RMON_HIST_BKT_LOW u32    low bound of the packet size bucket | 
|  | ETHTOOL_A_STATS_RMON_HIST_BKT_HI  u32    high bound of the bucket | 
|  | ETHTOOL_A_STATS_RMON_HIST_VAL     u64    packet counter | 
|  | ================================= ====== =================================== | 
|  |  | 
|  | Low and high bounds are inclusive, for example: | 
|  |  | 
|  | ============================= ==== ==== | 
|  | RFC statistic                 low  high | 
|  | ============================= ==== ==== | 
|  | etherStatsPkts64Octets          0    64 | 
|  | etherStatsPkts512to1023Octets 512  1023 | 
|  | ============================= ==== ==== | 
|  |  | 
|  | ``ETHTOOL_A_STATS_SRC`` is optional. Similar to ``PAUSE_GET``, it takes values | 
|  | from ``enum ethtool_mac_stats_src``. If absent from the request, stats will be | 
|  | provided with an ``ETHTOOL_A_STATS_SRC`` attribute in the response equal to | 
|  | ``ETHTOOL_MAC_STATS_SRC_AGGREGATE``. | 
|  |  | 
|  | PHC_VCLOCKS_GET | 
|  | =============== | 
|  |  | 
|  | Query device PHC virtual clocks information. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | ====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PHC_VCLOCKS_HEADER``      nested  request header | 
|  | ====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | ====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PHC_VCLOCKS_HEADER``      nested  reply header | 
|  | ``ETHTOOL_A_PHC_VCLOCKS_NUM``         u32     PHC virtual clocks number | 
|  | ``ETHTOOL_A_PHC_VCLOCKS_INDEX``       s32     PHC index array | 
|  | ====================================  ======  ========================== | 
|  |  | 
|  | MODULE_GET | 
|  | ========== | 
|  |  | 
|  | Gets transceiver module parameters. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_MODULE_HEADER``            nested  request header | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | ======================================  ======  ========================== | 
|  | ``ETHTOOL_A_MODULE_HEADER``             nested  reply header | 
|  | ``ETHTOOL_A_MODULE_POWER_MODE_POLICY``  u8      power mode policy | 
|  | ``ETHTOOL_A_MODULE_POWER_MODE``         u8      operational power mode | 
|  | ======================================  ======  ========================== | 
|  |  | 
|  | The optional ``ETHTOOL_A_MODULE_POWER_MODE_POLICY`` attribute encodes the | 
|  | transceiver module power mode policy enforced by the host. The default policy | 
|  | is driver-dependent, but "auto" is the recommended default and it should be | 
|  | implemented by new drivers and drivers where conformance to a legacy behavior | 
|  | is not critical. | 
|  |  | 
|  | The optional ``ETHTHOOL_A_MODULE_POWER_MODE`` attribute encodes the operational | 
|  | power mode policy of the transceiver module. It is only reported when a module | 
|  | is plugged-in. Possible values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_module_power_mode | 
|  |  | 
|  | MODULE_SET | 
|  | ========== | 
|  |  | 
|  | Sets transceiver module parameters. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | ======================================  ======  ========================== | 
|  | ``ETHTOOL_A_MODULE_HEADER``             nested  request header | 
|  | ``ETHTOOL_A_MODULE_POWER_MODE_POLICY``  u8      power mode policy | 
|  | ======================================  ======  ========================== | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_MODULE_POWER_MODE_POLICY`` attribute is used | 
|  | to set the transceiver module power policy enforced by the host. Possible | 
|  | values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_module_power_mode_policy | 
|  |  | 
|  | For SFF-8636 modules, low power mode is forced by the host according to table | 
|  | 6-10 in revision 2.10a of the specification. | 
|  |  | 
|  | For CMIS modules, low power mode is forced by the host according to table 6-12 | 
|  | in revision 5.0 of the specification. | 
|  |  | 
|  | PSE_GET | 
|  | ======= | 
|  |  | 
|  | Gets PSE attributes. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PSE_HEADER``               nested  request header | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | ==========================================  ======  ============================= | 
|  | ``ETHTOOL_A_PSE_HEADER``                    nested  reply header | 
|  | ``ETHTOOL_A_PODL_PSE_ADMIN_STATE``             u32  Operational state of the PoDL | 
|  | PSE functions | 
|  | ``ETHTOOL_A_PODL_PSE_PW_D_STATUS``             u32  power detection status of the | 
|  | PoDL PSE. | 
|  | ``ETHTOOL_A_C33_PSE_ADMIN_STATE``              u32  Operational state of the PoE | 
|  | PSE functions. | 
|  | ``ETHTOOL_A_C33_PSE_PW_D_STATUS``              u32  power detection status of the | 
|  | PoE PSE. | 
|  | ``ETHTOOL_A_C33_PSE_PW_CLASS``                 u32  power class of the PoE PSE. | 
|  | ``ETHTOOL_A_C33_PSE_ACTUAL_PW``                u32  actual power drawn on the | 
|  | PoE PSE. | 
|  | ``ETHTOOL_A_C33_PSE_EXT_STATE``                u32  power extended state of the | 
|  | PoE PSE. | 
|  | ``ETHTOOL_A_C33_PSE_EXT_SUBSTATE``             u32  power extended substatus of | 
|  | the PoE PSE. | 
|  | ``ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT``           u32  currently configured power | 
|  | limit of the PoE PSE. | 
|  | ``ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES``       nested  Supported power limit | 
|  | configuration ranges. | 
|  | ==========================================  ======  ============================= | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PODL_PSE_ADMIN_STATE`` attribute identifies | 
|  | the operational state of the PoDL PSE functions.  The operational state of the | 
|  | PSE function can be changed using the ``ETHTOOL_A_PODL_PSE_ADMIN_CONTROL`` | 
|  | action. This attribute corresponds to ``IEEE 802.3-2018`` 30.15.1.1.2 | 
|  | aPoDLPSEAdminState. Possible values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_podl_pse_admin_state | 
|  |  | 
|  | The same goes for ``ETHTOOL_A_C33_PSE_ADMIN_STATE`` implementing | 
|  | ``IEEE 802.3-2022`` 30.9.1.1.2 aPSEAdminState. | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_c33_pse_admin_state | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PODL_PSE_PW_D_STATUS`` attribute identifies | 
|  | the power detection status of the PoDL PSE.  The status depend on internal PSE | 
|  | state machine and automatic PD classification support. This attribute | 
|  | corresponds to ``IEEE 802.3-2018`` 30.15.1.1.3 aPoDLPSEPowerDetectionStatus. | 
|  | Possible values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_podl_pse_pw_d_status | 
|  |  | 
|  | The same goes for ``ETHTOOL_A_C33_PSE_ADMIN_PW_D_STATUS`` implementing | 
|  | ``IEEE 802.3-2022`` 30.9.1.1.5 aPSEPowerDetectionStatus. | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_c33_pse_pw_d_status | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_C33_PSE_PW_CLASS`` attribute identifies | 
|  | the power class of the C33 PSE. It depends on the class negotiated between | 
|  | the PSE and the PD. This attribute corresponds to ``IEEE 802.3-2022`` | 
|  | 30.9.1.1.8 aPSEPowerClassification. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_C33_PSE_ACTUAL_PW`` attribute identifies | 
|  | the actual power drawn by the C33 PSE. This attribute corresponds to | 
|  | ``IEEE 802.3-2022`` 30.9.1.1.23 aPSEActualPower. Actual power is reported | 
|  | in mW. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_C33_PSE_EXT_STATE`` attribute identifies | 
|  | the extended error state of the C33 PSE. Possible values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_c33_pse_ext_state | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_C33_PSE_EXT_SUBSTATE`` attribute identifies | 
|  | the extended error state of the C33 PSE. Possible values are: | 
|  | Possible values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_c33_pse_ext_substate_class_num_events | 
|  | ethtool_c33_pse_ext_substate_error_condition | 
|  | ethtool_c33_pse_ext_substate_mr_pse_enable | 
|  | ethtool_c33_pse_ext_substate_option_detect_ted | 
|  | ethtool_c33_pse_ext_substate_option_vport_lim | 
|  | ethtool_c33_pse_ext_substate_ovld_detected | 
|  | ethtool_c33_pse_ext_substate_pd_dll_power_type | 
|  | ethtool_c33_pse_ext_substate_power_not_available | 
|  | ethtool_c33_pse_ext_substate_short_detected | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_C33_PSE_AVAIL_PW_LIMIT`` attribute | 
|  | identifies the C33 PSE power limit in mW. | 
|  |  | 
|  | When set the optional ``ETHTOOL_A_C33_PSE_PW_LIMIT_RANGES`` nested attribute | 
|  | identifies the C33 PSE power limit ranges through | 
|  | ``ETHTOOL_A_C33_PSE_PWR_VAL_LIMIT_RANGE_MIN`` and | 
|  | ``ETHTOOL_A_C33_PSE_PWR_VAL_LIMIT_RANGE_MAX``. | 
|  | If the controller works with fixed classes, the min and max values will be | 
|  | equal. | 
|  |  | 
|  | PSE_SET | 
|  | ======= | 
|  |  | 
|  | Sets PSE parameters. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | ======================================  ======  ============================= | 
|  | ``ETHTOOL_A_PSE_HEADER``                nested  request header | 
|  | ``ETHTOOL_A_PODL_PSE_ADMIN_CONTROL``       u32  Control PoDL PSE Admin state | 
|  | ``ETHTOOL_A_C33_PSE_ADMIN_CONTROL``        u32  Control PSE Admin state | 
|  | ``ETHTOOL_A_C33_PSE_AVAIL_PWR_LIMIT``      u32  Control PoE PSE available | 
|  | power limit | 
|  | ======================================  ======  ============================= | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PODL_PSE_ADMIN_CONTROL`` attribute is used | 
|  | to control PoDL PSE Admin functions. This option implements | 
|  | ``IEEE 802.3-2018`` 30.15.1.2.1 acPoDLPSEAdminControl. See | 
|  | ``ETHTOOL_A_PODL_PSE_ADMIN_STATE`` for supported values. | 
|  |  | 
|  | The same goes for ``ETHTOOL_A_C33_PSE_ADMIN_CONTROL`` implementing | 
|  | ``IEEE 802.3-2022`` 30.9.1.2.1 acPSEAdminControl. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_C33_PSE_AVAIL_PWR_LIMIT`` attribute is | 
|  | used to control the available power value limit for C33 PSE in milliwatts. | 
|  | This attribute corresponds  to the `pse_available_power` variable described in | 
|  | ``IEEE 802.3-2022`` 33.2.4.4 Variables  and `pse_avail_pwr` in 145.2.5.4 | 
|  | Variables, which are described in power classes. | 
|  |  | 
|  | It was decided to use milliwatts for this interface to unify it with other | 
|  | power monitoring interfaces, which also use milliwatts, and to align with | 
|  | various existing products that document power consumption in watts rather than | 
|  | classes. If power limit configuration based on classes is needed, the | 
|  | conversion can be done in user space, for example by ethtool. | 
|  |  | 
|  | RSS_GET | 
|  | ======= | 
|  |  | 
|  | Get indirection table, hash key and hash function info associated with a | 
|  | RSS context of an interface similar to ``ETHTOOL_GRSSH`` ioctl request. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ============================ | 
|  | ``ETHTOOL_A_RSS_HEADER``             nested  request header | 
|  | ``ETHTOOL_A_RSS_CONTEXT``            u32     context number | 
|  | ``ETHTOOL_A_RSS_START_CONTEXT``      u32     start context number (dumps) | 
|  | =====================================  ======  ============================ | 
|  |  | 
|  | ``ETHTOOL_A_RSS_CONTEXT`` specifies which RSS context number to query, | 
|  | if not set context 0 (the main context) is queried. Dumps can be filtered | 
|  | by device (only listing contexts of a given netdev). Filtering single | 
|  | context number is not supported but ``ETHTOOL_A_RSS_START_CONTEXT`` | 
|  | can be used to start dumping context from the given number (primarily | 
|  | used to ignore context 0s and only dump additional contexts). | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_RSS_HEADER``             nested  reply header | 
|  | ``ETHTOOL_A_RSS_CONTEXT``            u32     context number | 
|  | ``ETHTOOL_A_RSS_HFUNC``              u32     RSS hash func | 
|  | ``ETHTOOL_A_RSS_INDIR``              binary  Indir table bytes | 
|  | ``ETHTOOL_A_RSS_HKEY``               binary  Hash key bytes | 
|  | ``ETHTOOL_A_RSS_INPUT_XFRM``         u32     RSS input data transformation | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | ETHTOOL_A_RSS_HFUNC attribute is bitmap indicating the hash function | 
|  | being used. Current supported options are toeplitz, xor or crc32. | 
|  | ETHTOOL_A_RSS_INDIR attribute returns RSS indirection table where each byte | 
|  | indicates queue number. | 
|  | ETHTOOL_A_RSS_INPUT_XFRM attribute is a bitmap indicating the type of | 
|  | transformation applied to the input protocol fields before given to the RSS | 
|  | hfunc. Current supported option is symmetric-xor. | 
|  |  | 
|  | PLCA_GET_CFG | 
|  | ============ | 
|  |  | 
|  | Gets the IEEE 802.3cg-2019 Clause 148 Physical Layer Collision Avoidance | 
|  | (PLCA) Reconciliation Sublayer (RS) attributes. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PLCA_HEADER``              nested  request header | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | ======================================  ======  ============================= | 
|  | ``ETHTOOL_A_PLCA_HEADER``               nested  reply header | 
|  | ``ETHTOOL_A_PLCA_VERSION``              u16     Supported PLCA management | 
|  | interface standard/version | 
|  | ``ETHTOOL_A_PLCA_ENABLED``              u8      PLCA Admin State | 
|  | ``ETHTOOL_A_PLCA_NODE_ID``              u32     PLCA unique local node ID | 
|  | ``ETHTOOL_A_PLCA_NODE_CNT``             u32     Number of PLCA nodes on the | 
|  | network, including the | 
|  | coordinator | 
|  | ``ETHTOOL_A_PLCA_TO_TMR``               u32     Transmit Opportunity Timer | 
|  | value in bit-times (BT) | 
|  | ``ETHTOOL_A_PLCA_BURST_CNT``            u32     Number of additional packets | 
|  | the node is allowed to send | 
|  | within a single TO | 
|  | ``ETHTOOL_A_PLCA_BURST_TMR``            u32     Time to wait for the MAC to | 
|  | transmit a new frame before | 
|  | terminating the burst | 
|  | ======================================  ======  ============================= | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_VERSION`` attribute indicates which | 
|  | standard and version the PLCA management interface complies to. When not set, | 
|  | the interface is vendor-specific and (possibly) supplied by the driver. | 
|  | The OPEN Alliance SIG specifies a standard register map for 10BASE-T1S PHYs | 
|  | embedding the PLCA Reconciliation Sublayer. See "10BASE-T1S PLCA Management | 
|  | Registers" at https://www.opensig.org/about/specifications/. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_ENABLED`` attribute indicates the | 
|  | administrative state of the PLCA RS. When not set, the node operates in "plain" | 
|  | CSMA/CD mode. This option is corresponding to ``IEEE 802.3cg-2019`` 30.16.1.1.1 | 
|  | aPLCAAdminState / 30.16.1.2.1 acPLCAAdminControl. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_NODE_ID`` attribute indicates the | 
|  | configured local node ID of the PHY. This ID determines which transmit | 
|  | opportunity (TO) is reserved for the node to transmit into. This option is | 
|  | corresponding to ``IEEE 802.3cg-2019`` 30.16.1.1.4 aPLCALocalNodeID. The valid | 
|  | range for this attribute is [0 .. 255] where 255 means "not configured". | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_NODE_CNT`` attribute indicates the | 
|  | configured maximum number of PLCA nodes on the mixing-segment. This number | 
|  | determines the total number of transmit opportunities generated during a | 
|  | PLCA cycle. This attribute is relevant only for the PLCA coordinator, which is | 
|  | the node with aPLCALocalNodeID set to 0. Follower nodes ignore this setting. | 
|  | This option is corresponding to ``IEEE 802.3cg-2019`` 30.16.1.1.3 | 
|  | aPLCANodeCount. The valid range for this attribute is [1 .. 255]. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_TO_TMR`` attribute indicates the | 
|  | configured value of the transmit opportunity timer in bit-times. This value | 
|  | must be set equal across all nodes sharing the medium for PLCA to work | 
|  | correctly. This option is corresponding to ``IEEE 802.3cg-2019`` 30.16.1.1.5 | 
|  | aPLCATransmitOpportunityTimer. The valid range for this attribute is | 
|  | [0 .. 255]. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_BURST_CNT`` attribute indicates the | 
|  | configured number of extra packets that the node is allowed to send during a | 
|  | single transmit opportunity. By default, this attribute is 0, meaning that | 
|  | the node can only send a single frame per TO. When greater than 0, the PLCA RS | 
|  | keeps the TO after any transmission, waiting for the MAC to send a new frame | 
|  | for up to aPLCABurstTimer BTs. This can only happen a number of times per PLCA | 
|  | cycle up to the value of this parameter. After that, the burst is over and the | 
|  | normal counting of TOs resumes. This option is corresponding to | 
|  | ``IEEE 802.3cg-2019`` 30.16.1.1.6 aPLCAMaxBurstCount. The valid range for this | 
|  | attribute is [0 .. 255]. | 
|  |  | 
|  | When set, the optional ``ETHTOOL_A_PLCA_BURST_TMR`` attribute indicates how | 
|  | many bit-times the PLCA RS waits for the MAC to initiate a new transmission | 
|  | when aPLCAMaxBurstCount is greater than 0. If the MAC fails to send a new | 
|  | frame within this time, the burst ends and the counting of TOs resumes. | 
|  | Otherwise, the new frame is sent as part of the current burst. This option | 
|  | is corresponding to ``IEEE 802.3cg-2019`` 30.16.1.1.7 aPLCABurstTimer. The | 
|  | valid range for this attribute is [0 .. 255]. Although, the value should be | 
|  | set greater than the Inter-Frame-Gap (IFG) time of the MAC (plus some margin) | 
|  | for PLCA burst mode to work as intended. | 
|  |  | 
|  | PLCA_SET_CFG | 
|  | ============ | 
|  |  | 
|  | Sets PLCA RS parameters. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | ======================================  ======  ============================= | 
|  | ``ETHTOOL_A_PLCA_HEADER``               nested  request header | 
|  | ``ETHTOOL_A_PLCA_ENABLED``              u8      PLCA Admin State | 
|  | ``ETHTOOL_A_PLCA_NODE_ID``              u8      PLCA unique local node ID | 
|  | ``ETHTOOL_A_PLCA_NODE_CNT``             u8      Number of PLCA nodes on the | 
|  | network, including the | 
|  | coordinator | 
|  | ``ETHTOOL_A_PLCA_TO_TMR``               u8      Transmit Opportunity Timer | 
|  | value in bit-times (BT) | 
|  | ``ETHTOOL_A_PLCA_BURST_CNT``            u8      Number of additional packets | 
|  | the node is allowed to send | 
|  | within a single TO | 
|  | ``ETHTOOL_A_PLCA_BURST_TMR``            u8      Time to wait for the MAC to | 
|  | transmit a new frame before | 
|  | terminating the burst | 
|  | ======================================  ======  ============================= | 
|  |  | 
|  | For a description of each attribute, see ``PLCA_GET_CFG``. | 
|  |  | 
|  | PLCA_GET_STATUS | 
|  | =============== | 
|  |  | 
|  | Gets PLCA RS status information. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PLCA_HEADER``              nested  request header | 
|  | =====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | ======================================  ======  ============================= | 
|  | ``ETHTOOL_A_PLCA_HEADER``               nested  reply header | 
|  | ``ETHTOOL_A_PLCA_STATUS``               u8      PLCA RS operational status | 
|  | ======================================  ======  ============================= | 
|  |  | 
|  | When set, the ``ETHTOOL_A_PLCA_STATUS`` attribute indicates whether the node is | 
|  | detecting the presence of the BEACON on the network. This flag is | 
|  | corresponding to ``IEEE 802.3cg-2019`` 30.16.1.1.2 aPLCAStatus. | 
|  |  | 
|  | MM_GET | 
|  | ====== | 
|  |  | 
|  | Retrieve 802.3 MAC Merge parameters. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | ====================================  ======  ========================== | 
|  | ``ETHTOOL_A_MM_HEADER``               nested  request header | 
|  | ====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | =================================  ======  =================================== | 
|  | ``ETHTOOL_A_MM_HEADER``            nested  request header | 
|  | ``ETHTOOL_A_MM_PMAC_ENABLED``      bool    set if RX of preemptible and SMD-V | 
|  | frames is enabled | 
|  | ``ETHTOOL_A_MM_TX_ENABLED``        bool    set if TX of preemptible frames is | 
|  | administratively enabled (might be | 
|  | inactive if verification failed) | 
|  | ``ETHTOOL_A_MM_TX_ACTIVE``         bool    set if TX of preemptible frames is | 
|  | operationally enabled | 
|  | ``ETHTOOL_A_MM_TX_MIN_FRAG_SIZE``  u32     minimum size of transmitted | 
|  | non-final fragments, in octets | 
|  | ``ETHTOOL_A_MM_RX_MIN_FRAG_SIZE``  u32     minimum size of received non-final | 
|  | fragments, in octets | 
|  | ``ETHTOOL_A_MM_VERIFY_ENABLED``    bool    set if TX of SMD-V frames is | 
|  | administratively enabled | 
|  | ``ETHTOOL_A_MM_VERIFY_STATUS``     u8      state of the verification function | 
|  | ``ETHTOOL_A_MM_VERIFY_TIME``       u32     delay between verification attempts | 
|  | ``ETHTOOL_A_MM_MAX_VERIFY_TIME```  u32     maximum verification interval | 
|  | supported by device | 
|  | ``ETHTOOL_A_MM_STATS``             nested  IEEE 802.3-2018 subclause 30.14.1 | 
|  | oMACMergeEntity statistics counters | 
|  | =================================  ======  =================================== | 
|  |  | 
|  | The attributes are populated by the device driver through the following | 
|  | structure: | 
|  |  | 
|  | .. kernel-doc:: include/linux/ethtool.h | 
|  | :identifiers: ethtool_mm_state | 
|  |  | 
|  | The ``ETHTOOL_A_MM_VERIFY_STATUS`` will report one of the values from | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_mm_verify_status | 
|  |  | 
|  | If ``ETHTOOL_A_MM_VERIFY_ENABLED`` was passed as false in the ``MM_SET`` | 
|  | command, ``ETHTOOL_A_MM_VERIFY_STATUS`` will report either | 
|  | ``ETHTOOL_MM_VERIFY_STATUS_INITIAL`` or ``ETHTOOL_MM_VERIFY_STATUS_DISABLED``, | 
|  | otherwise it should report one of the other states. | 
|  |  | 
|  | It is recommended that drivers start with the pMAC disabled, and enable it upon | 
|  | user space request. It is also recommended that user space does not depend upon | 
|  | the default values from ``ETHTOOL_MSG_MM_GET`` requests. | 
|  |  | 
|  | ``ETHTOOL_A_MM_STATS`` are reported if ``ETHTOOL_FLAG_STATS`` was set in | 
|  | ``ETHTOOL_A_HEADER_FLAGS``. The attribute 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_mm_stats | 
|  |  | 
|  | MM_SET | 
|  | ====== | 
|  |  | 
|  | Modifies the configuration of the 802.3 MAC Merge layer. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =================================  ======  ========================== | 
|  | ``ETHTOOL_A_MM_VERIFY_TIME``       u32     see MM_GET description | 
|  | ``ETHTOOL_A_MM_VERIFY_ENABLED``    bool    see MM_GET description | 
|  | ``ETHTOOL_A_MM_TX_ENABLED``        bool    see MM_GET description | 
|  | ``ETHTOOL_A_MM_PMAC_ENABLED``      bool    see MM_GET description | 
|  | ``ETHTOOL_A_MM_TX_MIN_FRAG_SIZE``  u32     see MM_GET description | 
|  | =================================  ======  ========================== | 
|  |  | 
|  | The attributes are propagated to the driver through the following structure: | 
|  |  | 
|  | .. kernel-doc:: include/linux/ethtool.h | 
|  | :identifiers: ethtool_mm_cfg | 
|  |  | 
|  | MODULE_FW_FLASH_ACT | 
|  | =================== | 
|  |  | 
|  | Flashes transceiver module firmware. | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | =======================================  ======  =========================== | 
|  | ``ETHTOOL_A_MODULE_FW_FLASH_HEADER``     nested  request header | 
|  | ``ETHTOOL_A_MODULE_FW_FLASH_FILE_NAME``  string  firmware image file name | 
|  | ``ETHTOOL_A_MODULE_FW_FLASH_PASSWORD``   u32     transceiver module password | 
|  | =======================================  ======  =========================== | 
|  |  | 
|  | The firmware update process consists of three logical steps: | 
|  |  | 
|  | 1. Downloading a firmware image to the transceiver module and validating it. | 
|  | 2. Running the firmware image. | 
|  | 3. Committing the firmware image so that it is run upon reset. | 
|  |  | 
|  | When flash command is given, those three steps are taken in that order. | 
|  |  | 
|  | This message merely schedules the update process and returns immediately | 
|  | without blocking. The process then runs asynchronously. | 
|  | Since it can take several minutes to complete, during the update process | 
|  | notifications are emitted from the kernel to user space updating it about | 
|  | the status and progress. | 
|  |  | 
|  | The ``ETHTOOL_A_MODULE_FW_FLASH_FILE_NAME`` attribute encodes the firmware | 
|  | image file name. The firmware image is downloaded to the transceiver module, | 
|  | validated, run and committed. | 
|  |  | 
|  | The optional ``ETHTOOL_A_MODULE_FW_FLASH_PASSWORD`` attribute encodes a password | 
|  | that might be required as part of the transceiver module firmware update | 
|  | process. | 
|  |  | 
|  | The firmware update process can take several minutes to complete. Therefore, | 
|  | during the update process notifications are emitted from the kernel to user | 
|  | space updating it about the status and progress. | 
|  |  | 
|  |  | 
|  |  | 
|  | Notification contents: | 
|  |  | 
|  | +---------------------------------------------------+--------+----------------+ | 
|  | | ``ETHTOOL_A_MODULE_FW_FLASH_HEADER``              | nested | reply header   | | 
|  | +---------------------------------------------------+--------+----------------+ | 
|  | | ``ETHTOOL_A_MODULE_FW_FLASH_STATUS``              | u32    | status         | | 
|  | +---------------------------------------------------+--------+----------------+ | 
|  | | ``ETHTOOL_A_MODULE_FW_FLASH_STATUS_MSG``          | string | status message | | 
|  | +---------------------------------------------------+--------+----------------+ | 
|  | | ``ETHTOOL_A_MODULE_FW_FLASH_DONE``                | uint   | progress       | | 
|  | +---------------------------------------------------+--------+----------------+ | 
|  | | ``ETHTOOL_A_MODULE_FW_FLASH_TOTAL``               | uint   | total          | | 
|  | +---------------------------------------------------+--------+----------------+ | 
|  |  | 
|  | The ``ETHTOOL_A_MODULE_FW_FLASH_STATUS`` attribute encodes the current status | 
|  | of the firmware update process. Possible values are: | 
|  |  | 
|  | .. kernel-doc:: include/uapi/linux/ethtool.h | 
|  | :identifiers: ethtool_module_fw_flash_status | 
|  |  | 
|  | The ``ETHTOOL_A_MODULE_FW_FLASH_STATUS_MSG`` attribute encodes a status message | 
|  | string. | 
|  |  | 
|  | The ``ETHTOOL_A_MODULE_FW_FLASH_DONE`` and ``ETHTOOL_A_MODULE_FW_FLASH_TOTAL`` | 
|  | attributes encode the completed and total amount of work, respectively. | 
|  |  | 
|  | PHY_GET | 
|  | ======= | 
|  |  | 
|  | Retrieve information about a given Ethernet PHY sitting on the link. The DO | 
|  | operation returns all available information about dev->phydev. User can also | 
|  | specify a PHY_INDEX, in which case the DO request returns information about that | 
|  | specific PHY. | 
|  |  | 
|  | As there can be more than one PHY, the DUMP operation can be used to list the PHYs | 
|  | present on a given interface, by passing an interface index or name in | 
|  | the dump request. | 
|  |  | 
|  | For more information, refer to :ref:`phy_link_topology` | 
|  |  | 
|  | Request contents: | 
|  |  | 
|  | ====================================  ======  ========================== | 
|  | ``ETHTOOL_A_PHY_HEADER``              nested  request header | 
|  | ====================================  ======  ========================== | 
|  |  | 
|  | Kernel response contents: | 
|  |  | 
|  | ===================================== ======  =============================== | 
|  | ``ETHTOOL_A_PHY_HEADER``              nested  request header | 
|  | ``ETHTOOL_A_PHY_INDEX``               u32     the phy's unique index, that can | 
|  | be used for phy-specific | 
|  | requests | 
|  | ``ETHTOOL_A_PHY_DRVNAME``             string  the phy driver name | 
|  | ``ETHTOOL_A_PHY_NAME``                string  the phy device name | 
|  | ``ETHTOOL_A_PHY_UPSTREAM_TYPE``       u32     the type of device this phy is | 
|  | connected to | 
|  | ``ETHTOOL_A_PHY_UPSTREAM_INDEX``      u32     the PHY index of the upstream | 
|  | PHY | 
|  | ``ETHTOOL_A_PHY_UPSTREAM_SFP_NAME``   string  if this PHY is connected to | 
|  | its parent PHY through an SFP | 
|  | bus, the name of this sfp bus | 
|  | ``ETHTOOL_A_PHY_DOWNSTREAM_SFP_NAME`` string  if the phy controls an sfp bus, | 
|  | the name of the sfp bus | 
|  | ===================================== ======  =============================== | 
|  |  | 
|  | When ``ETHTOOL_A_PHY_UPSTREAM_TYPE`` is PHY_UPSTREAM_PHY, the PHY's parent is | 
|  | another PHY. | 
|  |  | 
|  | 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. | 
|  |  | 
|  | =================================== ===================================== | 
|  | 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_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_NWAY_RST``                n/a | 
|  | ``ETHTOOL_GLINK``                   ``ETHTOOL_MSG_LINKSTATE_GET`` | 
|  | ``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_TEST``                    n/a | 
|  | ``ETHTOOL_GSTRINGS``                ``ETHTOOL_MSG_STRSET_GET`` | 
|  | ``ETHTOOL_PHYS_ID``                 n/a | 
|  | ``ETHTOOL_GSTATS``                  n/a | 
|  | ``ETHTOOL_GTSO``                    ``ETHTOOL_MSG_FEATURES_GET`` | 
|  | ``ETHTOOL_STSO``                    ``ETHTOOL_MSG_FEATURES_SET`` | 
|  | ``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_GRXFH``                   n/a | 
|  | ``ETHTOOL_SRXFH``                   n/a | 
|  | ``ETHTOOL_GGRO``                    ``ETHTOOL_MSG_FEATURES_GET`` | 
|  | ``ETHTOOL_SGRO``                    ``ETHTOOL_MSG_FEATURES_SET`` | 
|  | ``ETHTOOL_GRXRINGS``                n/a | 
|  | ``ETHTOOL_GRXCLSRLCNT``             n/a | 
|  | ``ETHTOOL_GRXCLSRULE``              n/a | 
|  | ``ETHTOOL_GRXCLSRLALL``             n/a | 
|  | ``ETHTOOL_SRXCLSRLDEL``             n/a | 
|  | ``ETHTOOL_SRXCLSRLINS``             n/a | 
|  | ``ETHTOOL_FLASHDEV``                n/a | 
|  | ``ETHTOOL_RESET``                   n/a | 
|  | ``ETHTOOL_SRXNTUPLE``               n/a | 
|  | ``ETHTOOL_GRXNTUPLE``               n/a | 
|  | ``ETHTOOL_GSSET_INFO``              ``ETHTOOL_MSG_STRSET_GET`` | 
|  | ``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_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_GMODULEINFO``             ``ETHTOOL_MSG_MODULE_EEPROM_GET`` | 
|  | ``ETHTOOL_GMODULEEEPROM``           ``ETHTOOL_MSG_MODULE_EEPROM_GET`` | 
|  | ``ETHTOOL_GEEE``                    ``ETHTOOL_MSG_EEE_GET`` | 
|  | ``ETHTOOL_SEEE``                    ``ETHTOOL_MSG_EEE_SET`` | 
|  | ``ETHTOOL_GRSSH``                   ``ETHTOOL_MSG_RSS_GET`` | 
|  | ``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_PHY_GTUNABLE``            n/a | 
|  | ``ETHTOOL_PHY_STUNABLE``            n/a | 
|  | ``ETHTOOL_GFECPARAM``               ``ETHTOOL_MSG_FEC_GET`` | 
|  | ``ETHTOOL_SFECPARAM``               ``ETHTOOL_MSG_FEC_SET`` | 
|  | n/a                                 ``ETHTOOL_MSG_CABLE_TEST_ACT`` | 
|  | n/a                                 ``ETHTOOL_MSG_CABLE_TEST_TDR_ACT`` | 
|  | n/a                                 ``ETHTOOL_MSG_TUNNEL_INFO_GET`` | 
|  | n/a                                 ``ETHTOOL_MSG_PHC_VCLOCKS_GET`` | 
|  | n/a                                 ``ETHTOOL_MSG_MODULE_GET`` | 
|  | n/a                                 ``ETHTOOL_MSG_MODULE_SET`` | 
|  | n/a                                 ``ETHTOOL_MSG_PLCA_GET_CFG`` | 
|  | n/a                                 ``ETHTOOL_MSG_PLCA_SET_CFG`` | 
|  | n/a                                 ``ETHTOOL_MSG_PLCA_GET_STATUS`` | 
|  | n/a                                 ``ETHTOOL_MSG_MM_GET`` | 
|  | n/a                                 ``ETHTOOL_MSG_MM_SET`` | 
|  | n/a                                 ``ETHTOOL_MSG_MODULE_FW_FLASH_ACT`` | 
|  | n/a                                 ``ETHTOOL_MSG_PHY_GET`` | 
|  | =================================== ===================================== |