Linux Audio

Check our new training course

Loading...
   1=============================
   2Netlink interface for ethtool
   3=============================
   4
   5
   6Basic information
   7=================
   8
   9Netlink interface for ethtool uses generic netlink family ``ethtool``
  10(userspace application should use macros ``ETHTOOL_GENL_NAME`` and
  11``ETHTOOL_GENL_VERSION`` defined in ``<linux/ethtool_netlink.h>`` uapi
  12header). This family does not use a specific header, all information in
  13requests and replies is passed using netlink attributes.
  14
  15The ethtool netlink interface uses extended ACK for error and warning
  16reporting, userspace application developers are encouraged to make these
  17messages available to user in a suitable way.
  18
  19Requests can be divided into three categories: "get" (retrieving information),
  20"set" (setting parameters) and "action" (invoking an action).
  21
  22All "set" and "action" type requests require admin privileges
  23(``CAP_NET_ADMIN`` in the namespace). Most "get" type requests are allowed for
  24anyone but there are exceptions (where the response contains sensitive
  25information). In some cases, the request as such is allowed for anyone but
  26unprivileged users have attributes with sensitive information (e.g.
  27wake-on-lan password) omitted.
  28
  29
  30Conventions
  31===========
  32
  33Attributes which represent a boolean value usually use NLA_U8 type so that we
  34can distinguish three states: "on", "off" and "not present" (meaning the
  35information is not available in "get" requests or value is not to be changed
  36in "set" requests). For these attributes, the "true" value should be passed as
  37number 1 but any non-zero value should be understood as "true" by recipient.
  38In the tables below, "bool" denotes NLA_U8 attributes interpreted in this way.
  39
  40In the message structure descriptions below, if an attribute name is suffixed
  41with "+", parent nest can contain multiple attributes of the same type. This
  42implements an array of entries.
  43
  44
  45Request header
  46==============
  47
  48Each request or reply message contains a nested attribute with common header.
  49Structure of this header is
  50
  51  ==============================  ======  =============================
  52  ``ETHTOOL_A_HEADER_DEV_INDEX``  u32     device ifindex
  53  ``ETHTOOL_A_HEADER_DEV_NAME``   string  device name
  54  ``ETHTOOL_A_HEADER_FLAGS``      u32     flags common for all requests
  55  ==============================  ======  =============================
  56
  57``ETHTOOL_A_HEADER_DEV_INDEX`` and ``ETHTOOL_A_HEADER_DEV_NAME`` identify the
  58device message relates to. One of them is sufficient in requests, if both are
  59used, they must identify the same device. Some requests, e.g. global string
  60sets, do not require device identification. Most ``GET`` requests also allow
  61dump requests without device identification to query the same information for
  62all devices providing it (each device in a separate message).
  63
  64``ETHTOOL_A_HEADER_FLAGS`` is a bitmap of request flags common for all request
  65types. The interpretation of these flags is the same for all request types but
  66the flags may not apply to requests. Recognized flags are:
  67
  68  =================================  ===================================
  69  ``ETHTOOL_FLAG_COMPACT_BITSETS``   use compact format bitsets in reply
  70  ``ETHTOOL_FLAG_OMIT_REPLY``        omit optional reply (_SET and _ACT)
  71  =================================  ===================================
  72
  73New request flags should follow the general idea that if the flag is not set,
  74the behaviour is backward compatible, i.e. requests from old clients not aware
  75of the flag should be interpreted the way the client expects. A client must
  76not set flags it does not understand.
  77
  78
  79Bit sets
  80========
  81
  82For short bitmaps of (reasonably) fixed length, standard ``NLA_BITFIELD32``
  83type is used. For arbitrary length bitmaps, ethtool netlink uses a nested
  84attribute with contents of one of two forms: compact (two binary bitmaps
  85representing bit values and mask of affected bits) and bit-by-bit (list of
  86bits identified by either index or name).
  87
  88Verbose (bit-by-bit) bitsets allow sending symbolic names for bits together
  89with their values which saves a round trip (when the bitset is passed in a
  90request) or at least a second request (when the bitset is in a reply). This is
  91useful for one shot applications like traditional ethtool command. On the
  92other hand, long running applications like ethtool monitor (displaying
  93notifications) or network management daemons may prefer fetching the names
  94only once and using compact form to save message size. Notifications from
  95ethtool netlink interface always use compact form for bitsets.
  96
  97A bitset can represent either a value/mask pair (``ETHTOOL_A_BITSET_NOMASK``
  98not set) or a single bitmap (``ETHTOOL_A_BITSET_NOMASK`` set). In requests
  99modifying a bitmap, the former changes the bit set in mask to values set in
 100value and preserves the rest; the latter sets the bits set in the bitmap and
 101clears the rest.
 102
 103Compact form: nested (bitset) atrribute contents:
 104
 105  ============================  ======  ============================
 106  ``ETHTOOL_A_BITSET_NOMASK``   flag    no mask, only a list
 107  ``ETHTOOL_A_BITSET_SIZE``     u32     number of significant bits
 108  ``ETHTOOL_A_BITSET_VALUE``    binary  bitmap of bit values
 109  ``ETHTOOL_A_BITSET_MASK``     binary  bitmap of valid bits
 110  ============================  ======  ============================
 111
 112Value and mask must have length at least ``ETHTOOL_A_BITSET_SIZE`` bits
 113rounded up to a multiple of 32 bits. They consist of 32-bit words in host byte
 114order, words ordered from least significant to most significant (i.e. the same
 115way as bitmaps are passed with ioctl interface).
 116
 117For compact form, ``ETHTOOL_A_BITSET_SIZE`` and ``ETHTOOL_A_BITSET_VALUE`` are
 118mandatory. ``ETHTOOL_A_BITSET_MASK`` attribute is mandatory if
 119``ETHTOOL_A_BITSET_NOMASK`` is not set (bitset represents a value/mask pair);
 120if ``ETHTOOL_A_BITSET_NOMASK`` is not set, ``ETHTOOL_A_BITSET_MASK`` is not
 121allowed (bitset represents a single bitmap.
 122
 123Kernel bit set length may differ from userspace length if older application is
 124used on newer kernel or vice versa. If userspace bitmap is longer, an error is
 125issued only if the request actually tries to set values of some bits not
 126recognized by kernel.
 127
 128Bit-by-bit form: nested (bitset) attribute contents:
 129
 130 +------------------------------------+--------+-----------------------------+
 131 | ``ETHTOOL_A_BITSET_NOMASK``        | flag   | no mask, only a list        |
 132 +------------------------------------+--------+-----------------------------+
 133 | ``ETHTOOL_A_BITSET_SIZE``          | u32    | number of significant bits  |
 134 +------------------------------------+--------+-----------------------------+
 135 | ``ETHTOOL_A_BITSET_BITS``          | nested | array of bits               |
 136 +-+----------------------------------+--------+-----------------------------+
 137 | | ``ETHTOOL_A_BITSET_BITS_BIT+``   | nested | one bit                     |
 138 +-+-+--------------------------------+--------+-----------------------------+
 139 | | | ``ETHTOOL_A_BITSET_BIT_INDEX`` | u32    | bit index (0 for LSB)       |
 140 +-+-+--------------------------------+--------+-----------------------------+
 141 | | | ``ETHTOOL_A_BITSET_BIT_NAME``  | string | bit name                    |
 142 +-+-+--------------------------------+--------+-----------------------------+
 143 | | | ``ETHTOOL_A_BITSET_BIT_VALUE`` | flag   | present if bit is set       |
 144 +-+-+--------------------------------+--------+-----------------------------+
 145
 146Bit size is optional for bit-by-bit form. ``ETHTOOL_A_BITSET_BITS`` nest can
 147only contain ``ETHTOOL_A_BITSET_BITS_BIT`` attributes but there can be an
 148arbitrary number of them.  A bit may be identified by its index or by its
 149name. When used in requests, listed bits are set to 0 or 1 according to
 150``ETHTOOL_A_BITSET_BIT_VALUE``, the rest is preserved. A request fails if
 151index exceeds kernel bit length or if name is not recognized.
 152
 153When ``ETHTOOL_A_BITSET_NOMASK`` flag is present, bitset is interpreted as
 154a simple bitmap. ``ETHTOOL_A_BITSET_BIT_VALUE`` attributes are not used in
 155such case. Such bitset represents a bitmap with listed bits set and the rest
 156zero.
 157
 158In requests, application can use either form. Form used by kernel in reply is
 159determined by ``ETHTOOL_FLAG_COMPACT_BITSETS`` flag in flags field of request
 160header. Semantics of value and mask depends on the attribute.
 161
 162
 163List of message types
 164=====================
 165
 166All constants identifying message types use ``ETHTOOL_CMD_`` prefix and suffix
 167according to message purpose:
 168
 169  ==============    ======================================
 170  ``_GET``          userspace request to retrieve data
 171  ``_SET``          userspace request to set data
 172  ``_ACT``          userspace request to perform an action
 173  ``_GET_REPLY``    kernel reply to a ``GET`` request
 174  ``_SET_REPLY``    kernel reply to a ``SET`` request
 175  ``_ACT_REPLY``    kernel reply to an ``ACT`` request
 176  ``_NTF``          kernel notification
 177  ==============    ======================================
 178
 179Userspace to kernel:
 180
 181  ===================================== ================================
 182  ``ETHTOOL_MSG_STRSET_GET``            get string set
 183  ``ETHTOOL_MSG_LINKINFO_GET``          get link settings
 184  ``ETHTOOL_MSG_LINKINFO_SET``          set link settings
 185  ``ETHTOOL_MSG_LINKMODES_GET``         get link modes info
 186  ``ETHTOOL_MSG_LINKMODES_SET``         set link modes info
 187  ``ETHTOOL_MSG_LINKSTATE_GET``         get link state
 188  ``ETHTOOL_MSG_DEBUG_GET``             get debugging settings
 189  ``ETHTOOL_MSG_DEBUG_SET``             set debugging settings
 190  ``ETHTOOL_MSG_WOL_GET``               get wake-on-lan settings
 191  ``ETHTOOL_MSG_WOL_SET``               set wake-on-lan settings
 192  ``ETHTOOL_MSG_FEATURES_GET``          get device features
 193  ``ETHTOOL_MSG_FEATURES_SET``          set device features
 194  ``ETHTOOL_MSG_PRIVFLAGS_GET``         get private flags
 195  ``ETHTOOL_MSG_PRIVFLAGS_SET``         set private flags
 196  ``ETHTOOL_MSG_RINGS_GET``             get ring sizes
 197  ``ETHTOOL_MSG_RINGS_SET``             set ring sizes
 198  ``ETHTOOL_MSG_CHANNELS_GET``          get channel counts
 199  ``ETHTOOL_MSG_CHANNELS_SET``          set channel counts
 200  ``ETHTOOL_MSG_COALESCE_GET``          get coalescing parameters
 201  ``ETHTOOL_MSG_COALESCE_SET``          set coalescing parameters
 202  ``ETHTOOL_MSG_PAUSE_GET``             get pause parameters
 203  ``ETHTOOL_MSG_PAUSE_SET``             set pause parameters
 204  ``ETHTOOL_MSG_EEE_GET``               get EEE settings
 205  ``ETHTOOL_MSG_EEE_SET``               set EEE settings
 206  ``ETHTOOL_MSG_TSINFO_GET``		get timestamping info
 207  ``ETHTOOL_MSG_CABLE_TEST_ACT``        action start cable test
 208  ``ETHTOOL_MSG_CABLE_TEST_TDR_ACT``    action start raw TDR cable test
 209  ``ETHTOOL_MSG_TUNNEL_INFO_GET``       get tunnel offload info
 210  ===================================== ================================
 211
 212Kernel to userspace:
 213
 214  ===================================== =================================
 215  ``ETHTOOL_MSG_STRSET_GET_REPLY``      string set contents
 216  ``ETHTOOL_MSG_LINKINFO_GET_REPLY``    link settings
 217  ``ETHTOOL_MSG_LINKINFO_NTF``          link settings notification
 218  ``ETHTOOL_MSG_LINKMODES_GET_REPLY``   link modes info
 219  ``ETHTOOL_MSG_LINKMODES_NTF``         link modes notification
 220  ``ETHTOOL_MSG_LINKSTATE_GET_REPLY``   link state info
 221  ``ETHTOOL_MSG_DEBUG_GET_REPLY``       debugging settings
 222  ``ETHTOOL_MSG_DEBUG_NTF``             debugging settings notification
 223  ``ETHTOOL_MSG_WOL_GET_REPLY``         wake-on-lan settings
 224  ``ETHTOOL_MSG_WOL_NTF``               wake-on-lan settings notification
 225  ``ETHTOOL_MSG_FEATURES_GET_REPLY``    device features
 226  ``ETHTOOL_MSG_FEATURES_SET_REPLY``    optional reply to FEATURES_SET
 227  ``ETHTOOL_MSG_FEATURES_NTF``          netdev features notification
 228  ``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY``   private flags
 229  ``ETHTOOL_MSG_PRIVFLAGS_NTF``         private flags
 230  ``ETHTOOL_MSG_RINGS_GET_REPLY``       ring sizes
 231  ``ETHTOOL_MSG_RINGS_NTF``             ring sizes
 232  ``ETHTOOL_MSG_CHANNELS_GET_REPLY``    channel counts
 233  ``ETHTOOL_MSG_CHANNELS_NTF``          channel counts
 234  ``ETHTOOL_MSG_COALESCE_GET_REPLY``    coalescing parameters
 235  ``ETHTOOL_MSG_COALESCE_NTF``          coalescing parameters
 236  ``ETHTOOL_MSG_PAUSE_GET_REPLY``       pause parameters
 237  ``ETHTOOL_MSG_PAUSE_NTF``             pause parameters
 238  ``ETHTOOL_MSG_EEE_GET_REPLY``         EEE settings
 239  ``ETHTOOL_MSG_EEE_NTF``               EEE settings
 240  ``ETHTOOL_MSG_TSINFO_GET_REPLY``	timestamping info
 241  ``ETHTOOL_MSG_CABLE_TEST_NTF``        Cable test results
 242  ``ETHTOOL_MSG_CABLE_TEST_TDR_NTF``    Cable test TDR results
 243  ``ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY`` tunnel offload info
 244  ===================================== =================================
 245
 246``GET`` requests are sent by userspace applications to retrieve device
 247information. They usually do not contain any message specific attributes.
 248Kernel replies with corresponding "GET_REPLY" message. For most types, ``GET``
 249request with ``NLM_F_DUMP`` and no device identification can be used to query
 250the information for all devices supporting the request.
 251
 252If the data can be also modified, corresponding ``SET`` message with the same
 253layout as corresponding ``GET_REPLY`` is used to request changes. Only
 254attributes where a change is requested are included in such request (also, not
 255all attributes may be changed). Replies to most ``SET`` request consist only
 256of error code and extack; if kernel provides additional data, it is sent in
 257the form of corresponding ``SET_REPLY`` message which can be suppressed by
 258setting ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header.
 259
 260Data modification also triggers sending a ``NTF`` message with a notification.
 261These usually bear only a subset of attributes which was affected by the
 262change. The same notification is issued if the data is modified using other
 263means (mostly ioctl ethtool interface). Unlike notifications from ethtool
 264netlink code which are only sent if something actually changed, notifications
 265triggered by ioctl interface may be sent even if the request did not actually
 266change any data.
 267
 268``ACT`` messages request kernel (driver) to perform a specific action. If some
 269information is reported by kernel (which can be suppressed by setting
 270``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header), the reply takes form of
 271an ``ACT_REPLY`` message. Performing an action also triggers a notification
 272(``NTF`` message).
 273
 274Later sections describe the format and semantics of these messages.
 275
 276
 277STRSET_GET
 278==========
 279
 280Requests contents of a string set as provided by ioctl commands
 281``ETHTOOL_GSSET_INFO`` and ``ETHTOOL_GSTRINGS.`` String sets are not user
 282writeable so that the corresponding ``STRSET_SET`` message is only used in
 283kernel replies. There are two types of string sets: global (independent of
 284a device, e.g. device feature names) and device specific (e.g. device private
 285flags).
 286
 287Request contents:
 288
 289 +---------------------------------------+--------+------------------------+
 290 | ``ETHTOOL_A_STRSET_HEADER``           | nested | request header         |
 291 +---------------------------------------+--------+------------------------+
 292 | ``ETHTOOL_A_STRSET_STRINGSETS``       | nested | string set to request  |
 293 +-+-------------------------------------+--------+------------------------+
 294 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set         |
 295 +-+-+-----------------------------------+--------+------------------------+
 296 | | | ``ETHTOOL_A_STRINGSET_ID``        | u32    | set id                 |
 297 +-+-+-----------------------------------+--------+------------------------+
 298
 299Kernel response contents:
 300
 301 +---------------------------------------+--------+-----------------------+
 302 | ``ETHTOOL_A_STRSET_HEADER``           | nested | reply header          |
 303 +---------------------------------------+--------+-----------------------+
 304 | ``ETHTOOL_A_STRSET_STRINGSETS``       | nested | array of string sets  |
 305 +-+-------------------------------------+--------+-----------------------+
 306 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set        |
 307 +-+-+-----------------------------------+--------+-----------------------+
 308 | | | ``ETHTOOL_A_STRINGSET_ID``        | u32    | set id                |
 309 +-+-+-----------------------------------+--------+-----------------------+
 310 | | | ``ETHTOOL_A_STRINGSET_COUNT``     | u32    | number of strings     |
 311 +-+-+-----------------------------------+--------+-----------------------+
 312 | | | ``ETHTOOL_A_STRINGSET_STRINGS``   | nested | array of strings      |
 313 +-+-+-+---------------------------------+--------+-----------------------+
 314 | | | | ``ETHTOOL_A_STRINGS_STRING+``   | nested | one string            |
 315 +-+-+-+-+-------------------------------+--------+-----------------------+
 316 | | | | | ``ETHTOOL_A_STRING_INDEX``    | u32    | string index          |
 317 +-+-+-+-+-------------------------------+--------+-----------------------+
 318 | | | | | ``ETHTOOL_A_STRING_VALUE``    | string | string value          |
 319 +-+-+-+-+-------------------------------+--------+-----------------------+
 320 | ``ETHTOOL_A_STRSET_COUNTS_ONLY``      | flag   | return only counts    |
 321 +---------------------------------------+--------+-----------------------+
 322
 323Device identification in request header is optional. Depending on its presence
 324a and ``NLM_F_DUMP`` flag, there are three type of ``STRSET_GET`` requests:
 325
 326 - no ``NLM_F_DUMP,`` no device: get "global" stringsets
 327 - no ``NLM_F_DUMP``, with device: get string sets related to the device
 328 - ``NLM_F_DUMP``, no device: get device related string sets for all devices
 329
 330If there is no ``ETHTOOL_A_STRSET_STRINGSETS`` array, all string sets of
 331requested type are returned, otherwise only those specified in the request.
 332Flag ``ETHTOOL_A_STRSET_COUNTS_ONLY`` tells kernel to only return string
 333counts of the sets, not the actual strings.
 334
 335
 336LINKINFO_GET
 337============
 338
 339Requests link settings as provided by ``ETHTOOL_GLINKSETTINGS`` except for
 340link modes and autonegotiation related information. The request does not use
 341any attributes.
 342
 343Request contents:
 344
 345  ====================================  ======  ==========================
 346  ``ETHTOOL_A_LINKINFO_HEADER``         nested  request header
 347  ====================================  ======  ==========================
 348
 349Kernel response contents:
 350
 351  ====================================  ======  ==========================
 352  ``ETHTOOL_A_LINKINFO_HEADER``         nested  reply header
 353  ``ETHTOOL_A_LINKINFO_PORT``           u8      physical port
 354  ``ETHTOOL_A_LINKINFO_PHYADDR``        u8      phy MDIO address
 355  ``ETHTOOL_A_LINKINFO_TP_MDIX``        u8      MDI(-X) status
 356  ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL``   u8      MDI(-X) control
 357  ``ETHTOOL_A_LINKINFO_TRANSCEIVER``    u8      transceiver
 358  ====================================  ======  ==========================
 359
 360Attributes and their values have the same meaning as matching members of the
 361corresponding ioctl structures.
 362
 363``LINKINFO_GET`` allows dump requests (kernel returns reply message for all
 364devices supporting the request).
 365
 366
 367LINKINFO_SET
 368============
 369
 370``LINKINFO_SET`` request allows setting some of the attributes reported by
 371``LINKINFO_GET``.
 372
 373Request contents:
 374
 375  ====================================  ======  ==========================
 376  ``ETHTOOL_A_LINKINFO_HEADER``         nested  request header
 377  ``ETHTOOL_A_LINKINFO_PORT``           u8      physical port
 378  ``ETHTOOL_A_LINKINFO_PHYADDR``        u8      phy MDIO address
 379  ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL``   u8      MDI(-X) control
 380  ====================================  ======  ==========================
 381
 382MDI(-X) status and transceiver cannot be set, request with the corresponding
 383attributes is rejected.
 384
 385
 386LINKMODES_GET
 387=============
 388
 389Requests link modes (supported, advertised and peer advertised) and related
 390information (autonegotiation status, link speed and duplex) as provided by
 391``ETHTOOL_GLINKSETTINGS``. The request does not use any attributes.
 392
 393Request contents:
 394
 395  ====================================  ======  ==========================
 396  ``ETHTOOL_A_LINKMODES_HEADER``        nested  request header
 397  ====================================  ======  ==========================
 398
 399Kernel response contents:
 400
 401  ==========================================  ======  ==========================
 402  ``ETHTOOL_A_LINKMODES_HEADER``              nested  reply header
 403  ``ETHTOOL_A_LINKMODES_AUTONEG``             u8      autonegotiation status
 404  ``ETHTOOL_A_LINKMODES_OURS``                bitset  advertised link modes
 405  ``ETHTOOL_A_LINKMODES_PEER``                bitset  partner link modes
 406  ``ETHTOOL_A_LINKMODES_SPEED``               u32     link speed (Mb/s)
 407  ``ETHTOOL_A_LINKMODES_DUPLEX``              u8      duplex mode
 408  ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG``    u8      Master/slave port mode
 409  ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE``  u8      Master/slave port state
 410  ==========================================  ======  ==========================
 411
 412For ``ETHTOOL_A_LINKMODES_OURS``, value represents advertised modes and mask
 413represents supported modes. ``ETHTOOL_A_LINKMODES_PEER`` in the reply is a bit
 414list.
 415
 416``LINKMODES_GET`` allows dump requests (kernel returns reply messages for all
 417devices supporting the request).
 418
 419
 420LINKMODES_SET
 421=============
 422
 423Request contents:
 424
 425  ==========================================  ======  ==========================
 426  ``ETHTOOL_A_LINKMODES_HEADER``              nested  request header
 427  ``ETHTOOL_A_LINKMODES_AUTONEG``             u8      autonegotiation status
 428  ``ETHTOOL_A_LINKMODES_OURS``                bitset  advertised link modes
 429  ``ETHTOOL_A_LINKMODES_PEER``                bitset  partner link modes
 430  ``ETHTOOL_A_LINKMODES_SPEED``               u32     link speed (Mb/s)
 431  ``ETHTOOL_A_LINKMODES_DUPLEX``              u8      duplex mode
 432  ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG``    u8      Master/slave port mode
 433  ==========================================  ======  ==========================
 434
 435``ETHTOOL_A_LINKMODES_OURS`` bit set allows setting advertised link modes. If
 436autonegotiation is on (either set now or kept from before), advertised modes
 437are not changed (no ``ETHTOOL_A_LINKMODES_OURS`` attribute) and at least one
 438of speed and duplex is specified, kernel adjusts advertised modes to all
 439supported modes matching speed, duplex or both (whatever is specified). This
 440autoselection is done on ethtool side with ioctl interface, netlink interface
 441is supposed to allow requesting changes without knowing what exactly kernel
 442supports.
 443
 444
 445LINKSTATE_GET
 446=============
 447
 448Requests link state information. Link up/down flag (as provided by
 449``ETHTOOL_GLINK`` ioctl command) is provided. Optionally, extended state might
 450be provided as well. In general, extended state describes reasons for why a port
 451is down, or why it operates in some non-obvious mode. This request does not have
 452any attributes.
 453
 454Request contents:
 455
 456  ====================================  ======  ==========================
 457  ``ETHTOOL_A_LINKSTATE_HEADER``        nested  request header
 458  ====================================  ======  ==========================
 459
 460Kernel response contents:
 461
 462  ====================================  ======  ============================
 463  ``ETHTOOL_A_LINKSTATE_HEADER``        nested  reply header
 464  ``ETHTOOL_A_LINKSTATE_LINK``          bool    link state (up/down)
 465  ``ETHTOOL_A_LINKSTATE_SQI``           u32     Current Signal Quality Index
 466  ``ETHTOOL_A_LINKSTATE_SQI_MAX``       u32     Max support SQI value
 467  ``ETHTOOL_A_LINKSTATE_EXT_STATE``     u8      link extended state
 468  ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE``  u8      link extended substate
 469  ====================================  ======  ============================
 470
 471For most NIC drivers, the value of ``ETHTOOL_A_LINKSTATE_LINK`` returns
 472carrier flag provided by ``netif_carrier_ok()`` but there are drivers which
 473define their own handler.
 474
 475``ETHTOOL_A_LINKSTATE_EXT_STATE`` and ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE`` are
 476optional values. ethtool core can provide either both
 477``ETHTOOL_A_LINKSTATE_EXT_STATE`` and ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE``,
 478or only ``ETHTOOL_A_LINKSTATE_EXT_STATE``, or none of them.
 479
 480``LINKSTATE_GET`` allows dump requests (kernel returns reply messages for all
 481devices supporting the request).
 482
 483
 484Link extended states:
 485
 486  ================================================      ============================================
 487  ``ETHTOOL_LINK_EXT_STATE_AUTONEG``                    States relating to the autonegotiation or
 488                                                        issues therein
 489
 490  ``ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE``      Failure during link training
 491
 492  ``ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH``      Logical mismatch in physical coding sublayer
 493                                                        or forward error correction sublayer
 494
 495  ``ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY``       Signal integrity issues
 496
 497  ``ETHTOOL_LINK_EXT_STATE_NO_CABLE``                   No cable connected
 498
 499  ``ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE``                Failure is related to cable,
 500                                                        e.g., unsupported cable
 501
 502  ``ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE``               Failure is related to EEPROM, e.g., failure
 503                                                        during reading or parsing the data
 504
 505  ``ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE``        Failure during calibration algorithm
 506
 507  ``ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED``      The hardware is not able to provide the
 508                                                        power required from cable or module
 509
 510  ``ETHTOOL_LINK_EXT_STATE_OVERHEAT``                   The module is overheated
 511  ================================================      ============================================
 512
 513Link extended substates:
 514
 515  Autoneg substates:
 516
 517  ===============================================================   ================================
 518  ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED``              Peer side is down
 519
 520  ``ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED``                 Ack not received from peer side
 521
 522  ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED``        Next page exchange failed
 523
 524  ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE``   Peer side is down during force
 525                                                                    mode or there is no agreement of
 526                                                                    speed
 527
 528  ``ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE``     Forward error correction modes
 529                                                                    in both sides are mismatched
 530
 531  ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD``                           No Highest Common Denominator
 532  ===============================================================   ================================
 533
 534  Link training substates:
 535
 536  ===========================================================================   ====================
 537  ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED``                    Frames were not
 538                                                                                 recognized, the
 539                                                                                 lock failed
 540
 541  ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT``                       The lock did not
 542                                                                                 occur before
 543                                                                                 timeout
 544
 545  ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY``    Peer side did not
 546                                                                                 send ready signal
 547                                                                                 after training
 548                                                                                 process
 549
 550  ``ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT``                                  Remote side is not
 551                                                                                 ready yet
 552  ===========================================================================   ====================
 553
 554  Link logical mismatch substates:
 555
 556  ================================================================   ===============================
 557  ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK``   Physical coding sublayer was
 558                                                                     not locked in first phase -
 559                                                                     block lock
 560
 561  ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK``      Physical coding sublayer was
 562                                                                     not locked in second phase -
 563                                                                     alignment markers lock
 564
 565  ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS``     Physical coding sublayer did
 566                                                                     not get align status
 567
 568  ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED``             FC forward error correction is
 569                                                                     not locked
 570
 571  ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED``             RS forward error correction is
 572                                                                     not locked
 573  ================================================================   ===============================
 574
 575  Bad signal integrity substates:
 576
 577  =================================================================    =============================
 578  ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS``    Large number of physical
 579                                                                       errors
 580
 581  ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE``                   The system attempted to
 582                                                                       operate the cable at a rate
 583                                                                       that is not formally
 584                                                                       supported, which led to
 585                                                                       signal integrity issues
 586  =================================================================    =============================
 587
 588  Cable issue substates:
 589
 590  ===================================================   ============================================
 591  ``ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE``    Unsupported cable
 592
 593  ``ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE``   Cable test failure
 594  ===================================================   ============================================
 595
 596DEBUG_GET
 597=========
 598
 599Requests debugging settings of a device. At the moment, only message mask is
 600provided.
 601
 602Request contents:
 603
 604  ====================================  ======  ==========================
 605  ``ETHTOOL_A_DEBUG_HEADER``            nested  request header
 606  ====================================  ======  ==========================
 607
 608Kernel response contents:
 609
 610  ====================================  ======  ==========================
 611  ``ETHTOOL_A_DEBUG_HEADER``            nested  reply header
 612  ``ETHTOOL_A_DEBUG_MSGMASK``           bitset  message mask
 613  ====================================  ======  ==========================
 614
 615The message mask (``ETHTOOL_A_DEBUG_MSGMASK``) is equal to message level as
 616provided by ``ETHTOOL_GMSGLVL`` and set by ``ETHTOOL_SMSGLVL`` in ioctl
 617interface. While it is called message level there for historical reasons, most
 618drivers and almost all newer drivers use it as a mask of enabled message
 619classes (represented by ``NETIF_MSG_*`` constants); therefore netlink
 620interface follows its actual use in practice.
 621
 622``DEBUG_GET`` allows dump requests (kernel returns reply messages for all
 623devices supporting the request).
 624
 625
 626DEBUG_SET
 627=========
 628
 629Set or update debugging settings of a device. At the moment, only message mask
 630is supported.
 631
 632Request contents:
 633
 634  ====================================  ======  ==========================
 635  ``ETHTOOL_A_DEBUG_HEADER``            nested  request header
 636  ``ETHTOOL_A_DEBUG_MSGMASK``           bitset  message mask
 637  ====================================  ======  ==========================
 638
 639``ETHTOOL_A_DEBUG_MSGMASK`` bit set allows setting or modifying mask of
 640enabled debugging message types for the device.
 641
 642
 643WOL_GET
 644=======
 645
 646Query device wake-on-lan settings. Unlike most "GET" type requests,
 647``ETHTOOL_MSG_WOL_GET`` requires (netns) ``CAP_NET_ADMIN`` privileges as it
 648(potentially) provides SecureOn(tm) password which is confidential.
 649
 650Request contents:
 651
 652  ====================================  ======  ==========================
 653  ``ETHTOOL_A_WOL_HEADER``              nested  request header
 654  ====================================  ======  ==========================
 655
 656Kernel response contents:
 657
 658  ====================================  ======  ==========================
 659  ``ETHTOOL_A_WOL_HEADER``              nested  reply header
 660  ``ETHTOOL_A_WOL_MODES``               bitset  mask of enabled WoL modes
 661  ``ETHTOOL_A_WOL_SOPASS``              binary  SecureOn(tm) password
 662  ====================================  ======  ==========================
 663
 664In reply, ``ETHTOOL_A_WOL_MODES`` mask consists of modes supported by the
 665device, value of modes which are enabled. ``ETHTOOL_A_WOL_SOPASS`` is only
 666included in reply if ``WAKE_MAGICSECURE`` mode is supported.
 667
 668
 669WOL_SET
 670=======
 671
 672Set or update wake-on-lan settings.
 673
 674Request contents:
 675
 676  ====================================  ======  ==========================
 677  ``ETHTOOL_A_WOL_HEADER``              nested  request header
 678  ``ETHTOOL_A_WOL_MODES``               bitset  enabled WoL modes
 679  ``ETHTOOL_A_WOL_SOPASS``              binary  SecureOn(tm) password
 680  ====================================  ======  ==========================
 681
 682``ETHTOOL_A_WOL_SOPASS`` is only allowed for devices supporting
 683``WAKE_MAGICSECURE`` mode.
 684
 685
 686FEATURES_GET
 687============
 688
 689Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request.
 690
 691Request contents:
 692
 693  ====================================  ======  ==========================
 694  ``ETHTOOL_A_FEATURES_HEADER``         nested  request header
 695  ====================================  ======  ==========================
 696
 697Kernel response contents:
 698
 699  ====================================  ======  ==========================
 700  ``ETHTOOL_A_FEATURES_HEADER``         nested  reply header
 701  ``ETHTOOL_A_FEATURES_HW``             bitset  dev->hw_features
 702  ``ETHTOOL_A_FEATURES_WANTED``         bitset  dev->wanted_features
 703  ``ETHTOOL_A_FEATURES_ACTIVE``         bitset  dev->features
 704  ``ETHTOOL_A_FEATURES_NOCHANGE``       bitset  NETIF_F_NEVER_CHANGE
 705  ====================================  ======  ==========================
 706
 707Bitmaps in kernel response have the same meaning as bitmaps used in ioctl
 708interference but attribute names are different (they are based on
 709corresponding members of struct net_device). Legacy "flags" are not provided,
 710if userspace needs them (most likely only ethtool for backward compatibility),
 711it can calculate their values from related feature bits itself.
 712ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to
 713provide all names when using verbose bitmap format), the other three use no
 714mask (simple bit lists).
 715
 716
 717FEATURES_SET
 718============
 719
 720Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request.
 721
 722Request contents:
 723
 724  ====================================  ======  ==========================
 725  ``ETHTOOL_A_FEATURES_HEADER``         nested  request header
 726  ``ETHTOOL_A_FEATURES_WANTED``         bitset  requested features
 727  ====================================  ======  ==========================
 728
 729Kernel response contents:
 730
 731  ====================================  ======  ==========================
 732  ``ETHTOOL_A_FEATURES_HEADER``         nested  reply header
 733  ``ETHTOOL_A_FEATURES_WANTED``         bitset  diff wanted vs. result
 734  ``ETHTOOL_A_FEATURES_ACTIVE``         bitset  diff old vs. new active
 735  ====================================  ======  ==========================
 736
 737Request constains only one bitset which can be either value/mask pair (request
 738to change specific feature bits and leave the rest) or only a value (request
 739to set all features to specified set).
 740
 741As request is subject to netdev_change_features() sanity checks, optional
 742kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request
 743header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED``
 744reports the difference between client request and actual result: mask consists
 745of bits which differ between requested features and result (dev->features
 746after the operation), value consists of values of these bits in the request
 747(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE``
 748reports the difference between old and new dev->features: mask consists of
 749bits which have changed, values are their values in new dev->features (after
 750the operation).
 751
 752``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features
 753are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl
 754request but also each time features are modified with netdev_update_features()
 755or netdev_change_features().
 756
 757
 758PRIVFLAGS_GET
 759=============
 760
 761Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request.
 762
 763Request contents:
 764
 765  ====================================  ======  ==========================
 766  ``ETHTOOL_A_PRIVFLAGS_HEADER``        nested  request header
 767  ====================================  ======  ==========================
 768
 769Kernel response contents:
 770
 771  ====================================  ======  ==========================
 772  ``ETHTOOL_A_PRIVFLAGS_HEADER``        nested  reply header
 773  ``ETHTOOL_A_PRIVFLAGS_FLAGS``         bitset  private flags
 774  ====================================  ======  ==========================
 775
 776``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags.
 777These flags are defined by driver, their number and names (and also meaning)
 778are device dependent. For compact bitset format, names can be retrieved as
 779``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested,
 780response uses all private flags supported by the device as mask so that client
 781gets the full information without having to fetch the string set with names.
 782
 783
 784PRIVFLAGS_SET
 785=============
 786
 787Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS``
 788ioctl request.
 789
 790Request contents:
 791
 792  ====================================  ======  ==========================
 793  ``ETHTOOL_A_PRIVFLAGS_HEADER``        nested  request header
 794  ``ETHTOOL_A_PRIVFLAGS_FLAGS``         bitset  private flags
 795  ====================================  ======  ==========================
 796
 797``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or
 798modify only values of some of them.
 799
 800
 801RINGS_GET
 802=========
 803
 804Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request.
 805
 806Request contents:
 807
 808  ====================================  ======  ==========================
 809  ``ETHTOOL_A_RINGS_HEADER``            nested  request header
 810  ====================================  ======  ==========================
 811
 812Kernel response contents:
 813
 814  ====================================  ======  ==========================
 815  ``ETHTOOL_A_RINGS_HEADER``            nested  reply header
 816  ``ETHTOOL_A_RINGS_RX_MAX``            u32     max size of RX ring
 817  ``ETHTOOL_A_RINGS_RX_MINI_MAX``       u32     max size of RX mini ring
 818  ``ETHTOOL_A_RINGS_RX_JUMBO_MAX``      u32     max size of RX jumbo ring
 819  ``ETHTOOL_A_RINGS_TX_MAX``            u32     max size of TX ring
 820  ``ETHTOOL_A_RINGS_RX``                u32     size of RX ring
 821  ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
 822  ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
 823  ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
 824  ====================================  ======  ==========================
 825
 826
 827RINGS_SET
 828=========
 829
 830Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request.
 831
 832Request contents:
 833
 834  ====================================  ======  ==========================
 835  ``ETHTOOL_A_RINGS_HEADER``            nested  reply header
 836  ``ETHTOOL_A_RINGS_RX``                u32     size of RX ring
 837  ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
 838  ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
 839  ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
 840  ====================================  ======  ==========================
 841
 842Kernel checks that requested ring sizes do not exceed limits reported by
 843driver. Driver may impose additional constraints and may not suspport all
 844attributes.
 845
 846
 847CHANNELS_GET
 848============
 849
 850Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request.
 851
 852Request contents:
 853
 854  ====================================  ======  ==========================
 855  ``ETHTOOL_A_CHANNELS_HEADER``         nested  request header
 856  ====================================  ======  ==========================
 857
 858Kernel response contents:
 859
 860  =====================================  ======  ==========================
 861  ``ETHTOOL_A_CHANNELS_HEADER``          nested  reply header
 862  ``ETHTOOL_A_CHANNELS_RX_MAX``          u32     max receive channels
 863  ``ETHTOOL_A_CHANNELS_TX_MAX``          u32     max transmit channels
 864  ``ETHTOOL_A_CHANNELS_OTHER_MAX``       u32     max other channels
 865  ``ETHTOOL_A_CHANNELS_COMBINED_MAX``    u32     max combined channels
 866  ``ETHTOOL_A_CHANNELS_RX_COUNT``        u32     receive channel count
 867  ``ETHTOOL_A_CHANNELS_TX_COUNT``        u32     transmit channel count
 868  ``ETHTOOL_A_CHANNELS_OTHER_COUNT``     u32     other channel count
 869  ``ETHTOOL_A_CHANNELS_COMBINED_COUNT``  u32     combined channel count
 870  =====================================  ======  ==========================
 871
 872
 873CHANNELS_SET
 874============
 875
 876Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
 877
 878Request contents:
 879
 880  =====================================  ======  ==========================
 881  ``ETHTOOL_A_CHANNELS_HEADER``          nested  request header
 882  ``ETHTOOL_A_CHANNELS_RX_COUNT``        u32     receive channel count
 883  ``ETHTOOL_A_CHANNELS_TX_COUNT``        u32     transmit channel count
 884  ``ETHTOOL_A_CHANNELS_OTHER_COUNT``     u32     other channel count
 885  ``ETHTOOL_A_CHANNELS_COMBINED_COUNT``  u32     combined channel count
 886  =====================================  ======  ==========================
 887
 888Kernel checks that requested channel counts do not exceed limits reported by
 889driver. Driver may impose additional constraints and may not suspport all
 890attributes.
 891
 892
 893COALESCE_GET
 894============
 895
 896Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request.
 897
 898Request contents:
 899
 900  ====================================  ======  ==========================
 901  ``ETHTOOL_A_COALESCE_HEADER``         nested  request header
 902  ====================================  ======  ==========================
 903
 904Kernel response contents:
 905
 906  ===========================================  ======  =======================
 907  ``ETHTOOL_A_COALESCE_HEADER``                nested  reply header
 908  ``ETHTOOL_A_COALESCE_RX_USECS``              u32     delay (us), normal Rx
 909  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES``         u32     max packets, normal Rx
 910  ``ETHTOOL_A_COALESCE_RX_USECS_IRQ``          u32     delay (us), Rx in IRQ
 911  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ``     u32     max packets, Rx in IRQ
 912  ``ETHTOOL_A_COALESCE_TX_USECS``              u32     delay (us), normal Tx
 913  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES``         u32     max packets, normal Tx
 914  ``ETHTOOL_A_COALESCE_TX_USECS_IRQ``          u32     delay (us), Tx in IRQ
 915  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ``     u32     IRQ packets, Tx in IRQ
 916  ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS``     u32     delay of stats update
 917  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX``       bool    adaptive Rx coalesce
 918  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX``       bool    adaptive Tx coalesce
 919  ``ETHTOOL_A_COALESCE_PKT_RATE_LOW``          u32     threshold for low rate
 920  ``ETHTOOL_A_COALESCE_RX_USECS_LOW``          u32     delay (us), low Rx
 921  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW``     u32     max packets, low Rx
 922  ``ETHTOOL_A_COALESCE_TX_USECS_LOW``          u32     delay (us), low Tx
 923  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW``     u32     max packets, low Tx
 924  ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH``         u32     threshold for high rate
 925  ``ETHTOOL_A_COALESCE_RX_USECS_HIGH``         u32     delay (us), high Rx
 926  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH``    u32     max packets, high Rx
 927  ``ETHTOOL_A_COALESCE_TX_USECS_HIGH``         u32     delay (us), high Tx
 928  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH``    u32     max packets, high Tx
 929  ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL``  u32     rate sampling interval
 930  ===========================================  ======  =======================
 931
 932Attributes are only included in reply if their value is not zero or the
 933corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e.
 934they are declared as supported by driver).
 935
 936
 937COALESCE_SET
 938============
 939
 940Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request.
 941
 942Request contents:
 943
 944  ===========================================  ======  =======================
 945  ``ETHTOOL_A_COALESCE_HEADER``                nested  request header
 946  ``ETHTOOL_A_COALESCE_RX_USECS``              u32     delay (us), normal Rx
 947  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES``         u32     max packets, normal Rx
 948  ``ETHTOOL_A_COALESCE_RX_USECS_IRQ``          u32     delay (us), Rx in IRQ
 949  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ``     u32     max packets, Rx in IRQ
 950  ``ETHTOOL_A_COALESCE_TX_USECS``              u32     delay (us), normal Tx
 951  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES``         u32     max packets, normal Tx
 952  ``ETHTOOL_A_COALESCE_TX_USECS_IRQ``          u32     delay (us), Tx in IRQ
 953  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ``     u32     IRQ packets, Tx in IRQ
 954  ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS``     u32     delay of stats update
 955  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX``       bool    adaptive Rx coalesce
 956  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX``       bool    adaptive Tx coalesce
 957  ``ETHTOOL_A_COALESCE_PKT_RATE_LOW``          u32     threshold for low rate
 958  ``ETHTOOL_A_COALESCE_RX_USECS_LOW``          u32     delay (us), low Rx
 959  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW``     u32     max packets, low Rx
 960  ``ETHTOOL_A_COALESCE_TX_USECS_LOW``          u32     delay (us), low Tx
 961  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW``     u32     max packets, low Tx
 962  ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH``         u32     threshold for high rate
 963  ``ETHTOOL_A_COALESCE_RX_USECS_HIGH``         u32     delay (us), high Rx
 964  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH``    u32     max packets, high Rx
 965  ``ETHTOOL_A_COALESCE_TX_USECS_HIGH``         u32     delay (us), high Tx
 966  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH``    u32     max packets, high Tx
 967  ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL``  u32     rate sampling interval
 968  ===========================================  ======  =======================
 969
 970Request is rejected if it attributes declared as unsupported by driver (i.e.
 971such that the corresponding bit in ``ethtool_ops::supported_coalesce_params``
 972is not set), regardless of their values. Driver may impose additional
 973constraints on coalescing parameters and their values.
 974
 975
 976PAUSE_GET
 977============
 978
 979Gets channel counts like ``ETHTOOL_GPAUSE`` ioctl request.
 980
 981Request contents:
 982
 983  =====================================  ======  ==========================
 984  ``ETHTOOL_A_PAUSE_HEADER``             nested  request header
 985  =====================================  ======  ==========================
 986
 987Kernel response contents:
 988
 989  =====================================  ======  ==========================
 990  ``ETHTOOL_A_PAUSE_HEADER``             nested  request header
 991  ``ETHTOOL_A_PAUSE_AUTONEG``            bool    pause autonegotiation
 992  ``ETHTOOL_A_PAUSE_RX``                 bool    receive pause frames
 993  ``ETHTOOL_A_PAUSE_TX``                 bool    transmit pause frames
 994  =====================================  ======  ==========================
 995
 996
 997PAUSE_SET
 998============
 999
1000Sets pause parameters like ``ETHTOOL_GPAUSEPARAM`` ioctl request.
1001
1002Request contents:
1003
1004  =====================================  ======  ==========================
1005  ``ETHTOOL_A_PAUSE_HEADER``             nested  request header
1006  ``ETHTOOL_A_PAUSE_AUTONEG``            bool    pause autonegotiation
1007  ``ETHTOOL_A_PAUSE_RX``                 bool    receive pause frames
1008  ``ETHTOOL_A_PAUSE_TX``                 bool    transmit pause frames
1009  =====================================  ======  ==========================
1010
1011
1012EEE_GET
1013=======
1014
1015Gets channel counts like ``ETHTOOL_GEEE`` ioctl request.
1016
1017Request contents:
1018
1019  =====================================  ======  ==========================
1020  ``ETHTOOL_A_EEE_HEADER``               nested  request header
1021  =====================================  ======  ==========================
1022
1023Kernel response contents:
1024
1025  =====================================  ======  ==========================
1026  ``ETHTOOL_A_EEE_HEADER``               nested  request header
1027  ``ETHTOOL_A_EEE_MODES_OURS``           bool    supported/advertised modes
1028  ``ETHTOOL_A_EEE_MODES_PEER``           bool    peer advertised link modes
1029  ``ETHTOOL_A_EEE_ACTIVE``               bool    EEE is actively used
1030  ``ETHTOOL_A_EEE_ENABLED``              bool    EEE is enabled
1031  ``ETHTOOL_A_EEE_TX_LPI_ENABLED``       bool    Tx lpi enabled
1032  ``ETHTOOL_A_EEE_TX_LPI_TIMER``         u32     Tx lpi timeout (in us)
1033  =====================================  ======  ==========================
1034
1035In ``ETHTOOL_A_EEE_MODES_OURS``, mask consists of link modes for which EEE is
1036enabled, value of link modes for which EEE is advertised. Link modes for which
1037peer advertises EEE are listed in ``ETHTOOL_A_EEE_MODES_PEER`` (no mask). The
1038netlink interface allows reporting EEE status for all link modes but only
1039first 32 are provided by the ``ethtool_ops`` callback.
1040
1041
1042EEE_SET
1043=======
1044
1045Sets pause parameters like ``ETHTOOL_GEEEPARAM`` ioctl request.
1046
1047Request contents:
1048
1049  =====================================  ======  ==========================
1050  ``ETHTOOL_A_EEE_HEADER``               nested  request header
1051  ``ETHTOOL_A_EEE_MODES_OURS``           bool    advertised modes
1052  ``ETHTOOL_A_EEE_ENABLED``              bool    EEE is enabled
1053  ``ETHTOOL_A_EEE_TX_LPI_ENABLED``       bool    Tx lpi enabled
1054  ``ETHTOOL_A_EEE_TX_LPI_TIMER``         u32     Tx lpi timeout (in us)
1055  =====================================  ======  ==========================
1056
1057``ETHTOOL_A_EEE_MODES_OURS`` is used to either list link modes to advertise
1058EEE for (if there is no mask) or specify changes to the list (if there is
1059a mask). The netlink interface allows reporting EEE status for all link modes
1060but only first 32 can be set at the moment as that is what the ``ethtool_ops``
1061callback supports.
1062
1063
1064TSINFO_GET
1065==========
1066
1067Gets timestamping information like ``ETHTOOL_GET_TS_INFO`` ioctl request.
1068
1069Request contents:
1070
1071  =====================================  ======  ==========================
1072  ``ETHTOOL_A_TSINFO_HEADER``            nested  request header
1073  =====================================  ======  ==========================
1074
1075Kernel response contents:
1076
1077  =====================================  ======  ==========================
1078  ``ETHTOOL_A_TSINFO_HEADER``            nested  request header
1079  ``ETHTOOL_A_TSINFO_TIMESTAMPING``      bitset  SO_TIMESTAMPING flags
1080  ``ETHTOOL_A_TSINFO_TX_TYPES``          bitset  supported Tx types
1081  ``ETHTOOL_A_TSINFO_RX_FILTERS``        bitset  supported Rx filters
1082  ``ETHTOOL_A_TSINFO_PHC_INDEX``         u32     PTP hw clock index
1083  =====================================  ======  ==========================
1084
1085``ETHTOOL_A_TSINFO_PHC_INDEX`` is absent if there is no associated PHC (there
1086is no special value for this case). The bitset attributes are omitted if they
1087would be empty (no bit set).
1088
1089CABLE_TEST
1090==========
1091
1092Start a cable test.
1093
1094Request contents:
1095
1096  ====================================  ======  ==========================
1097  ``ETHTOOL_A_CABLE_TEST_HEADER``       nested  request header
1098  ====================================  ======  ==========================
1099
1100Notification contents:
1101
1102An Ethernet cable typically contains 1, 2 or 4 pairs. The length of
1103the pair can only be measured when there is a fault in the pair and
1104hence a reflection. Information about the fault may not be available,
1105depending on the specific hardware. Hence the contents of the notify
1106message are mostly optional. The attributes can be repeated an
1107arbitrary number of times, in an arbitrary order, for an arbitrary
1108number of pairs.
1109
1110The example shows the notification sent when the test is completed for
1111a T2 cable, i.e. two pairs. One pair is OK and hence has no length
1112information. The second pair has a fault and does have length
1113information.
1114
1115 +---------------------------------------------+--------+---------------------+
1116 | ``ETHTOOL_A_CABLE_TEST_HEADER``             | nested | reply header        |
1117 +---------------------------------------------+--------+---------------------+
1118 | ``ETHTOOL_A_CABLE_TEST_STATUS``             | u8     | completed           |
1119 +---------------------------------------------+--------+---------------------+
1120 | ``ETHTOOL_A_CABLE_TEST_NTF_NEST``           | nested | all the results     |
1121 +-+-------------------------------------------+--------+---------------------+
1122 | | ``ETHTOOL_A_CABLE_NEST_RESULT``           | nested | cable test result   |
1123 +-+-+-----------------------------------------+--------+---------------------+
1124 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number         |
1125 +-+-+-----------------------------------------+--------+---------------------+
1126 | | | ``ETHTOOL_A_CABLE_RESULTS_CODE``        | u8     | result code         |
1127 +-+-+-----------------------------------------+--------+---------------------+
1128 | | ``ETHTOOL_A_CABLE_NEST_RESULT``           | nested | cable test results  |
1129 +-+-+-----------------------------------------+--------+---------------------+
1130 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number         |
1131 +-+-+-----------------------------------------+--------+---------------------+
1132 | | | ``ETHTOOL_A_CABLE_RESULTS_CODE``        | u8     | result code         |
1133 +-+-+-----------------------------------------+--------+---------------------+
1134 | | ``ETHTOOL_A_CABLE_NEST_FAULT_LENGTH``     | nested | cable length        |
1135 +-+-+-----------------------------------------+--------+---------------------+
1136 | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR``   | u8     | pair number         |
1137 +-+-+-----------------------------------------+--------+---------------------+
1138 | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_CM``     | u32    | length in cm        |
1139 +-+-+-----------------------------------------+--------+---------------------+
1140
1141CABLE_TEST TDR
1142==============
1143
1144Start a cable test and report raw TDR data
1145
1146Request contents:
1147
1148 +--------------------------------------------+--------+-----------------------+
1149 | ``ETHTOOL_A_CABLE_TEST_TDR_HEADER``        | nested | reply header          |
1150 +--------------------------------------------+--------+-----------------------+
1151 | ``ETHTOOL_A_CABLE_TEST_TDR_CFG``           | nested | test configuration    |
1152 +-+------------------------------------------+--------+-----------------------+
1153 | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE``  | u32    | first data distance   |
1154 +-+-+----------------------------------------+--------+-----------------------+
1155 | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE``   | u32    | last data distance    |
1156 +-+-+----------------------------------------+--------+-----------------------+
1157 | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE``   | u32    | distance of each step |
1158 +-+-+----------------------------------------+--------+-----------------------+
1159 | | ``ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR``    | u8     | pair to test          |
1160 +-+-+----------------------------------------+--------+-----------------------+
1161
1162The ETHTOOL_A_CABLE_TEST_TDR_CFG is optional, as well as all members
1163of the nest. All distances are expressed in centimeters. The PHY takes
1164the distances as a guide, and rounds to the nearest distance it
1165actually supports. If a pair is passed, only that one pair will be
1166tested. Otherwise all pairs are tested.
1167
1168Notification contents:
1169
1170Raw TDR data is gathered by sending a pulse down the cable and
1171recording the amplitude of the reflected pulse for a given distance.
1172
1173It can take a number of seconds to collect TDR data, especial if the
1174full 100 meters is probed at 1 meter intervals. When the test is
1175started a notification will be sent containing just
1176ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value
1177ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED.
1178
1179When the test has completed a second notification will be sent
1180containing ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value
1181ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED and the TDR data.
1182
1183The message may optionally contain the amplitude of the pulse send
1184down the cable. This is measured in mV. A reflection should not be
1185bigger than transmitted pulse.
1186
1187Before the raw TDR data should be an ETHTOOL_A_CABLE_TDR_NEST_STEP
1188nest containing information about the distance along the cable for the
1189first reading, the last reading, and the step between each
1190reading. Distances are measured in centimeters. These should be the
1191exact values the PHY used. These may be different to what the user
1192requested, if the native measurement resolution is greater than 1 cm.
1193
1194For each step along the cable, a ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE is
1195used to report the amplitude of the reflection for a given pair.
1196
1197 +---------------------------------------------+--------+----------------------+
1198 | ``ETHTOOL_A_CABLE_TEST_TDR_HEADER``         | nested | reply header         |
1199 +---------------------------------------------+--------+----------------------+
1200 | ``ETHTOOL_A_CABLE_TEST_TDR_STATUS``         | u8     | completed            |
1201 +---------------------------------------------+--------+----------------------+
1202 | ``ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST``       | nested | all the results      |
1203 +-+-------------------------------------------+--------+----------------------+
1204 | | ``ETHTOOL_A_CABLE_TDR_NEST_PULSE``        | nested | TX Pulse amplitude   |
1205 +-+-+-----------------------------------------+--------+----------------------+
1206 | | | ``ETHTOOL_A_CABLE_PULSE_mV``            | s16    | Pulse amplitude      |
1207 +-+-+-----------------------------------------+--------+----------------------+
1208 | | ``ETHTOOL_A_CABLE_NEST_STEP``             | nested | TDR step info        |
1209 +-+-+-----------------------------------------+--------+----------------------+
1210 | | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE`` | u32    | First data distance  |
1211 +-+-+-----------------------------------------+--------+----------------------+
1212 | | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE``  | u32    | Last data distance   |
1213 +-+-+-----------------------------------------+--------+----------------------+
1214 | | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE``  | u32    | distance of each step|
1215 +-+-+-----------------------------------------+--------+----------------------+
1216 | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE``    | nested | Reflection amplitude |
1217 +-+-+-----------------------------------------+--------+----------------------+
1218 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number          |
1219 +-+-+-----------------------------------------+--------+----------------------+
1220 | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV``        | s16    | Reflection amplitude |
1221 +-+-+-----------------------------------------+--------+----------------------+
1222 | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE``    | nested | Reflection amplitude |
1223 +-+-+-----------------------------------------+--------+----------------------+
1224 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number          |
1225 +-+-+-----------------------------------------+--------+----------------------+
1226 | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV``        | s16    | Reflection amplitude |
1227 +-+-+-----------------------------------------+--------+----------------------+
1228 | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE``    | nested | Reflection amplitude |
1229 +-+-+-----------------------------------------+--------+----------------------+
1230 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number          |
1231 +-+-+-----------------------------------------+--------+----------------------+
1232 | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV``        | s16    | Reflection amplitude |
1233 +-+-+-----------------------------------------+--------+----------------------+
1234
1235TUNNEL_INFO
1236===========
1237
1238Gets information about the tunnel state NIC is aware of.
1239
1240Request contents:
1241
1242  =====================================  ======  ==========================
1243  ``ETHTOOL_A_TUNNEL_INFO_HEADER``       nested  request header
1244  =====================================  ======  ==========================
1245
1246Kernel response contents:
1247
1248 +---------------------------------------------+--------+---------------------+
1249 | ``ETHTOOL_A_TUNNEL_INFO_HEADER``            | nested | reply header        |
1250 +---------------------------------------------+--------+---------------------+
1251 | ``ETHTOOL_A_TUNNEL_INFO_UDP_PORTS``         | nested | all UDP port tables |
1252 +-+-------------------------------------------+--------+---------------------+
1253 | | ``ETHTOOL_A_TUNNEL_UDP_TABLE``            | nested | one UDP port table  |
1254 +-+-+-----------------------------------------+--------+---------------------+
1255 | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE``     | u32    | max size of the     |
1256 | | |                                         |        | table               |
1257 +-+-+-----------------------------------------+--------+---------------------+
1258 | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES``    | bitset | tunnel types which  |
1259 | | |                                         |        | table can hold      |
1260 +-+-+-----------------------------------------+--------+---------------------+
1261 | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY``    | nested | offloaded UDP port  |
1262 +-+-+-+---------------------------------------+--------+---------------------+
1263 | | | | ``ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT``   | be16   | UDP port            |
1264 +-+-+-+---------------------------------------+--------+---------------------+
1265 | | | | ``ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE``   | u32    | tunnel type         |
1266 +-+-+-+---------------------------------------+--------+---------------------+
1267
1268For UDP tunnel table empty ``ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES`` indicates that
1269the table contains static entries, hard-coded by the NIC.
1270
1271Request translation
1272===================
1273
1274The following table maps ioctl commands to netlink commands providing their
1275functionality. Entries with "n/a" in right column are commands which do not
1276have their netlink replacement yet. Entries which "n/a" in the left column
1277are netlink only.
1278
1279  =================================== =====================================
1280  ioctl command                       netlink command
1281  =================================== =====================================
1282  ``ETHTOOL_GSET``                    ``ETHTOOL_MSG_LINKINFO_GET``
1283                                      ``ETHTOOL_MSG_LINKMODES_GET``
1284  ``ETHTOOL_SSET``                    ``ETHTOOL_MSG_LINKINFO_SET``
1285                                      ``ETHTOOL_MSG_LINKMODES_SET``
1286  ``ETHTOOL_GDRVINFO``                n/a
1287  ``ETHTOOL_GREGS``                   n/a
1288  ``ETHTOOL_GWOL``                    ``ETHTOOL_MSG_WOL_GET``
1289  ``ETHTOOL_SWOL``                    ``ETHTOOL_MSG_WOL_SET``
1290  ``ETHTOOL_GMSGLVL``                 ``ETHTOOL_MSG_DEBUG_GET``
1291  ``ETHTOOL_SMSGLVL``                 ``ETHTOOL_MSG_DEBUG_SET``
1292  ``ETHTOOL_NWAY_RST``                n/a
1293  ``ETHTOOL_GLINK``                   ``ETHTOOL_MSG_LINKSTATE_GET``
1294  ``ETHTOOL_GEEPROM``                 n/a
1295  ``ETHTOOL_SEEPROM``                 n/a
1296  ``ETHTOOL_GCOALESCE``               ``ETHTOOL_MSG_COALESCE_GET``
1297  ``ETHTOOL_SCOALESCE``               ``ETHTOOL_MSG_COALESCE_SET``
1298  ``ETHTOOL_GRINGPARAM``              ``ETHTOOL_MSG_RINGS_GET``
1299  ``ETHTOOL_SRINGPARAM``              ``ETHTOOL_MSG_RINGS_SET``
1300  ``ETHTOOL_GPAUSEPARAM``             ``ETHTOOL_MSG_PAUSE_GET``
1301  ``ETHTOOL_SPAUSEPARAM``             ``ETHTOOL_MSG_PAUSE_SET``
1302  ``ETHTOOL_GRXCSUM``                 ``ETHTOOL_MSG_FEATURES_GET``
1303  ``ETHTOOL_SRXCSUM``                 ``ETHTOOL_MSG_FEATURES_SET``
1304  ``ETHTOOL_GTXCSUM``                 ``ETHTOOL_MSG_FEATURES_GET``
1305  ``ETHTOOL_STXCSUM``                 ``ETHTOOL_MSG_FEATURES_SET``
1306  ``ETHTOOL_GSG``                     ``ETHTOOL_MSG_FEATURES_GET``
1307  ``ETHTOOL_SSG``                     ``ETHTOOL_MSG_FEATURES_SET``
1308  ``ETHTOOL_TEST``                    n/a
1309  ``ETHTOOL_GSTRINGS``                ``ETHTOOL_MSG_STRSET_GET``
1310  ``ETHTOOL_PHYS_ID``                 n/a
1311  ``ETHTOOL_GSTATS``                  n/a
1312  ``ETHTOOL_GTSO``                    ``ETHTOOL_MSG_FEATURES_GET``
1313  ``ETHTOOL_STSO``                    ``ETHTOOL_MSG_FEATURES_SET``
1314  ``ETHTOOL_GPERMADDR``               rtnetlink ``RTM_GETLINK``
1315  ``ETHTOOL_GUFO``                    ``ETHTOOL_MSG_FEATURES_GET``
1316  ``ETHTOOL_SUFO``                    ``ETHTOOL_MSG_FEATURES_SET``
1317  ``ETHTOOL_GGSO``                    ``ETHTOOL_MSG_FEATURES_GET``
1318  ``ETHTOOL_SGSO``                    ``ETHTOOL_MSG_FEATURES_SET``
1319  ``ETHTOOL_GFLAGS``                  ``ETHTOOL_MSG_FEATURES_GET``
1320  ``ETHTOOL_SFLAGS``                  ``ETHTOOL_MSG_FEATURES_SET``
1321  ``ETHTOOL_GPFLAGS``                 ``ETHTOOL_MSG_PRIVFLAGS_GET``
1322  ``ETHTOOL_SPFLAGS``                 ``ETHTOOL_MSG_PRIVFLAGS_SET``
1323  ``ETHTOOL_GRXFH``                   n/a
1324  ``ETHTOOL_SRXFH``                   n/a
1325  ``ETHTOOL_GGRO``                    ``ETHTOOL_MSG_FEATURES_GET``
1326  ``ETHTOOL_SGRO``                    ``ETHTOOL_MSG_FEATURES_SET``
1327  ``ETHTOOL_GRXRINGS``                n/a
1328  ``ETHTOOL_GRXCLSRLCNT``             n/a
1329  ``ETHTOOL_GRXCLSRULE``              n/a
1330  ``ETHTOOL_GRXCLSRLALL``             n/a
1331  ``ETHTOOL_SRXCLSRLDEL``             n/a
1332  ``ETHTOOL_SRXCLSRLINS``             n/a
1333  ``ETHTOOL_FLASHDEV``                n/a
1334  ``ETHTOOL_RESET``                   n/a
1335  ``ETHTOOL_SRXNTUPLE``               n/a
1336  ``ETHTOOL_GRXNTUPLE``               n/a
1337  ``ETHTOOL_GSSET_INFO``              ``ETHTOOL_MSG_STRSET_GET``
1338  ``ETHTOOL_GRXFHINDIR``              n/a
1339  ``ETHTOOL_SRXFHINDIR``              n/a
1340  ``ETHTOOL_GFEATURES``               ``ETHTOOL_MSG_FEATURES_GET``
1341  ``ETHTOOL_SFEATURES``               ``ETHTOOL_MSG_FEATURES_SET``
1342  ``ETHTOOL_GCHANNELS``               ``ETHTOOL_MSG_CHANNELS_GET``
1343  ``ETHTOOL_SCHANNELS``               ``ETHTOOL_MSG_CHANNELS_SET``
1344  ``ETHTOOL_SET_DUMP``                n/a
1345  ``ETHTOOL_GET_DUMP_FLAG``           n/a
1346  ``ETHTOOL_GET_DUMP_DATA``           n/a
1347  ``ETHTOOL_GET_TS_INFO``             ``ETHTOOL_MSG_TSINFO_GET``
1348  ``ETHTOOL_GMODULEINFO``             n/a
1349  ``ETHTOOL_GMODULEEEPROM``           n/a
1350  ``ETHTOOL_GEEE``                    ``ETHTOOL_MSG_EEE_GET``
1351  ``ETHTOOL_SEEE``                    ``ETHTOOL_MSG_EEE_SET``
1352  ``ETHTOOL_GRSSH``                   n/a
1353  ``ETHTOOL_SRSSH``                   n/a
1354  ``ETHTOOL_GTUNABLE``                n/a
1355  ``ETHTOOL_STUNABLE``                n/a
1356  ``ETHTOOL_GPHYSTATS``               n/a
1357  ``ETHTOOL_PERQUEUE``                n/a
1358  ``ETHTOOL_GLINKSETTINGS``           ``ETHTOOL_MSG_LINKINFO_GET``
1359                                      ``ETHTOOL_MSG_LINKMODES_GET``
1360  ``ETHTOOL_SLINKSETTINGS``           ``ETHTOOL_MSG_LINKINFO_SET``
1361                                      ``ETHTOOL_MSG_LINKMODES_SET``
1362  ``ETHTOOL_PHY_GTUNABLE``            n/a
1363  ``ETHTOOL_PHY_STUNABLE``            n/a
1364  ``ETHTOOL_GFECPARAM``               n/a
1365  ``ETHTOOL_SFECPARAM``               n/a
1366  n/a                                 ''ETHTOOL_MSG_CABLE_TEST_ACT''
1367  n/a                                 ''ETHTOOL_MSG_CABLE_TEST_TDR_ACT''
1368  n/a                                 ``ETHTOOL_MSG_TUNNEL_INFO_GET``
1369  =================================== =====================================