xref: /linux/Documentation/networking/ethtool-netlink.rst (revision 05ee19c18c2bb3dea69e29219017367c4a77e65a)
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  ===================================== ================================
209
210Kernel to userspace:
211
212  ===================================== =================================
213  ``ETHTOOL_MSG_STRSET_GET_REPLY``      string set contents
214  ``ETHTOOL_MSG_LINKINFO_GET_REPLY``    link settings
215  ``ETHTOOL_MSG_LINKINFO_NTF``          link settings notification
216  ``ETHTOOL_MSG_LINKMODES_GET_REPLY``   link modes info
217  ``ETHTOOL_MSG_LINKMODES_NTF``         link modes notification
218  ``ETHTOOL_MSG_LINKSTATE_GET_REPLY``   link state info
219  ``ETHTOOL_MSG_DEBUG_GET_REPLY``       debugging settings
220  ``ETHTOOL_MSG_DEBUG_NTF``             debugging settings notification
221  ``ETHTOOL_MSG_WOL_GET_REPLY``         wake-on-lan settings
222  ``ETHTOOL_MSG_WOL_NTF``               wake-on-lan settings notification
223  ``ETHTOOL_MSG_FEATURES_GET_REPLY``    device features
224  ``ETHTOOL_MSG_FEATURES_SET_REPLY``    optional reply to FEATURES_SET
225  ``ETHTOOL_MSG_FEATURES_NTF``          netdev features notification
226  ``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY``   private flags
227  ``ETHTOOL_MSG_PRIVFLAGS_NTF``         private flags
228  ``ETHTOOL_MSG_RINGS_GET_REPLY``       ring sizes
229  ``ETHTOOL_MSG_RINGS_NTF``             ring sizes
230  ``ETHTOOL_MSG_CHANNELS_GET_REPLY``    channel counts
231  ``ETHTOOL_MSG_CHANNELS_NTF``          channel counts
232  ``ETHTOOL_MSG_COALESCE_GET_REPLY``    coalescing parameters
233  ``ETHTOOL_MSG_COALESCE_NTF``          coalescing parameters
234  ``ETHTOOL_MSG_PAUSE_GET_REPLY``       pause parameters
235  ``ETHTOOL_MSG_PAUSE_NTF``             pause parameters
236  ``ETHTOOL_MSG_EEE_GET_REPLY``         EEE settings
237  ``ETHTOOL_MSG_EEE_NTF``               EEE settings
238  ``ETHTOOL_MSG_TSINFO_GET_REPLY``	timestamping info
239  ``ETHTOOL_MSG_CABLE_TEST_NTF``        Cable test results
240  ===================================== =================================
241
242``GET`` requests are sent by userspace applications to retrieve device
243information. They usually do not contain any message specific attributes.
244Kernel replies with corresponding "GET_REPLY" message. For most types, ``GET``
245request with ``NLM_F_DUMP`` and no device identification can be used to query
246the information for all devices supporting the request.
247
248If the data can be also modified, corresponding ``SET`` message with the same
249layout as corresponding ``GET_REPLY`` is used to request changes. Only
250attributes where a change is requested are included in such request (also, not
251all attributes may be changed). Replies to most ``SET`` request consist only
252of error code and extack; if kernel provides additional data, it is sent in
253the form of corresponding ``SET_REPLY`` message which can be suppressed by
254setting ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header.
255
256Data modification also triggers sending a ``NTF`` message with a notification.
257These usually bear only a subset of attributes which was affected by the
258change. The same notification is issued if the data is modified using other
259means (mostly ioctl ethtool interface). Unlike notifications from ethtool
260netlink code which are only sent if something actually changed, notifications
261triggered by ioctl interface may be sent even if the request did not actually
262change any data.
263
264``ACT`` messages request kernel (driver) to perform a specific action. If some
265information is reported by kernel (which can be suppressed by setting
266``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header), the reply takes form of
267an ``ACT_REPLY`` message. Performing an action also triggers a notification
268(``NTF`` message).
269
270Later sections describe the format and semantics of these messages.
271
272
273STRSET_GET
274==========
275
276Requests contents of a string set as provided by ioctl commands
277``ETHTOOL_GSSET_INFO`` and ``ETHTOOL_GSTRINGS.`` String sets are not user
278writeable so that the corresponding ``STRSET_SET`` message is only used in
279kernel replies. There are two types of string sets: global (independent of
280a device, e.g. device feature names) and device specific (e.g. device private
281flags).
282
283Request contents:
284
285 +---------------------------------------+--------+------------------------+
286 | ``ETHTOOL_A_STRSET_HEADER``           | nested | request header         |
287 +---------------------------------------+--------+------------------------+
288 | ``ETHTOOL_A_STRSET_STRINGSETS``       | nested | string set to request  |
289 +-+-------------------------------------+--------+------------------------+
290 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set         |
291 +-+-+-----------------------------------+--------+------------------------+
292 | | | ``ETHTOOL_A_STRINGSET_ID``        | u32    | set id                 |
293 +-+-+-----------------------------------+--------+------------------------+
294
295Kernel response contents:
296
297 +---------------------------------------+--------+-----------------------+
298 | ``ETHTOOL_A_STRSET_HEADER``           | nested | reply header          |
299 +---------------------------------------+--------+-----------------------+
300 | ``ETHTOOL_A_STRSET_STRINGSETS``       | nested | array of string sets  |
301 +-+-------------------------------------+--------+-----------------------+
302 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set        |
303 +-+-+-----------------------------------+--------+-----------------------+
304 | | | ``ETHTOOL_A_STRINGSET_ID``        | u32    | set id                |
305 +-+-+-----------------------------------+--------+-----------------------+
306 | | | ``ETHTOOL_A_STRINGSET_COUNT``     | u32    | number of strings     |
307 +-+-+-----------------------------------+--------+-----------------------+
308 | | | ``ETHTOOL_A_STRINGSET_STRINGS``   | nested | array of strings      |
309 +-+-+-+---------------------------------+--------+-----------------------+
310 | | | | ``ETHTOOL_A_STRINGS_STRING+``   | nested | one string            |
311 +-+-+-+-+-------------------------------+--------+-----------------------+
312 | | | | | ``ETHTOOL_A_STRING_INDEX``    | u32    | string index          |
313 +-+-+-+-+-------------------------------+--------+-----------------------+
314 | | | | | ``ETHTOOL_A_STRING_VALUE``    | string | string value          |
315 +-+-+-+-+-------------------------------+--------+-----------------------+
316 | ``ETHTOOL_A_STRSET_COUNTS_ONLY``      | flag   | return only counts    |
317 +---------------------------------------+--------+-----------------------+
318
319Device identification in request header is optional. Depending on its presence
320a and ``NLM_F_DUMP`` flag, there are three type of ``STRSET_GET`` requests:
321
322 - no ``NLM_F_DUMP,`` no device: get "global" stringsets
323 - no ``NLM_F_DUMP``, with device: get string sets related to the device
324 - ``NLM_F_DUMP``, no device: get device related string sets for all devices
325
326If there is no ``ETHTOOL_A_STRSET_STRINGSETS`` array, all string sets of
327requested type are returned, otherwise only those specified in the request.
328Flag ``ETHTOOL_A_STRSET_COUNTS_ONLY`` tells kernel to only return string
329counts of the sets, not the actual strings.
330
331
332LINKINFO_GET
333============
334
335Requests link settings as provided by ``ETHTOOL_GLINKSETTINGS`` except for
336link modes and autonegotiation related information. The request does not use
337any attributes.
338
339Request contents:
340
341  ====================================  ======  ==========================
342  ``ETHTOOL_A_LINKINFO_HEADER``         nested  request header
343  ====================================  ======  ==========================
344
345Kernel response contents:
346
347  ====================================  ======  ==========================
348  ``ETHTOOL_A_LINKINFO_HEADER``         nested  reply header
349  ``ETHTOOL_A_LINKINFO_PORT``           u8      physical port
350  ``ETHTOOL_A_LINKINFO_PHYADDR``        u8      phy MDIO address
351  ``ETHTOOL_A_LINKINFO_TP_MDIX``        u8      MDI(-X) status
352  ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL``   u8      MDI(-X) control
353  ``ETHTOOL_A_LINKINFO_TRANSCEIVER``    u8      transceiver
354  ====================================  ======  ==========================
355
356Attributes and their values have the same meaning as matching members of the
357corresponding ioctl structures.
358
359``LINKINFO_GET`` allows dump requests (kernel returns reply message for all
360devices supporting the request).
361
362
363LINKINFO_SET
364============
365
366``LINKINFO_SET`` request allows setting some of the attributes reported by
367``LINKINFO_GET``.
368
369Request contents:
370
371  ====================================  ======  ==========================
372  ``ETHTOOL_A_LINKINFO_HEADER``         nested  request header
373  ``ETHTOOL_A_LINKINFO_PORT``           u8      physical port
374  ``ETHTOOL_A_LINKINFO_PHYADDR``        u8      phy MDIO address
375  ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL``   u8      MDI(-X) control
376  ====================================  ======  ==========================
377
378MDI(-X) status and transceiver cannot be set, request with the corresponding
379attributes is rejected.
380
381
382LINKMODES_GET
383=============
384
385Requests link modes (supported, advertised and peer advertised) and related
386information (autonegotiation status, link speed and duplex) as provided by
387``ETHTOOL_GLINKSETTINGS``. The request does not use any attributes.
388
389Request contents:
390
391  ====================================  ======  ==========================
392  ``ETHTOOL_A_LINKMODES_HEADER``        nested  request header
393  ====================================  ======  ==========================
394
395Kernel response contents:
396
397  ==========================================  ======  ==========================
398  ``ETHTOOL_A_LINKMODES_HEADER``              nested  reply header
399  ``ETHTOOL_A_LINKMODES_AUTONEG``             u8      autonegotiation status
400  ``ETHTOOL_A_LINKMODES_OURS``                bitset  advertised link modes
401  ``ETHTOOL_A_LINKMODES_PEER``                bitset  partner link modes
402  ``ETHTOOL_A_LINKMODES_SPEED``               u32     link speed (Mb/s)
403  ``ETHTOOL_A_LINKMODES_DUPLEX``              u8      duplex mode
404  ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG``    u8      Master/slave port mode
405  ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE``  u8      Master/slave port state
406  ==========================================  ======  ==========================
407
408For ``ETHTOOL_A_LINKMODES_OURS``, value represents advertised modes and mask
409represents supported modes. ``ETHTOOL_A_LINKMODES_PEER`` in the reply is a bit
410list.
411
412``LINKMODES_GET`` allows dump requests (kernel returns reply messages for all
413devices supporting the request).
414
415
416LINKMODES_SET
417=============
418
419Request contents:
420
421  ==========================================  ======  ==========================
422  ``ETHTOOL_A_LINKMODES_HEADER``              nested  request header
423  ``ETHTOOL_A_LINKMODES_AUTONEG``             u8      autonegotiation status
424  ``ETHTOOL_A_LINKMODES_OURS``                bitset  advertised link modes
425  ``ETHTOOL_A_LINKMODES_PEER``                bitset  partner link modes
426  ``ETHTOOL_A_LINKMODES_SPEED``               u32     link speed (Mb/s)
427  ``ETHTOOL_A_LINKMODES_DUPLEX``              u8      duplex mode
428  ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG``    u8      Master/slave port mode
429  ==========================================  ======  ==========================
430
431``ETHTOOL_A_LINKMODES_OURS`` bit set allows setting advertised link modes. If
432autonegotiation is on (either set now or kept from before), advertised modes
433are not changed (no ``ETHTOOL_A_LINKMODES_OURS`` attribute) and at least one
434of speed and duplex is specified, kernel adjusts advertised modes to all
435supported modes matching speed, duplex or both (whatever is specified). This
436autoselection is done on ethtool side with ioctl interface, netlink interface
437is supposed to allow requesting changes without knowing what exactly kernel
438supports.
439
440
441LINKSTATE_GET
442=============
443
444Requests link state information. At the moment, only link up/down flag (as
445provided by ``ETHTOOL_GLINK`` ioctl command) is provided but some future
446extensions are planned (e.g. link down reason). This request does not have any
447attributes.
448
449Request contents:
450
451  ====================================  ======  ==========================
452  ``ETHTOOL_A_LINKSTATE_HEADER``        nested  request header
453  ====================================  ======  ==========================
454
455Kernel response contents:
456
457  ====================================  ======  ==========================
458  ``ETHTOOL_A_LINKSTATE_HEADER``        nested  reply header
459  ``ETHTOOL_A_LINKSTATE_LINK``          bool    link state (up/down)
460  ====================================  ======  ==========================
461
462For most NIC drivers, the value of ``ETHTOOL_A_LINKSTATE_LINK`` returns
463carrier flag provided by ``netif_carrier_ok()`` but there are drivers which
464define their own handler.
465
466``LINKSTATE_GET`` allows dump requests (kernel returns reply messages for all
467devices supporting the request).
468
469
470DEBUG_GET
471=========
472
473Requests debugging settings of a device. At the moment, only message mask is
474provided.
475
476Request contents:
477
478  ====================================  ======  ==========================
479  ``ETHTOOL_A_DEBUG_HEADER``            nested  request header
480  ====================================  ======  ==========================
481
482Kernel response contents:
483
484  ====================================  ======  ==========================
485  ``ETHTOOL_A_DEBUG_HEADER``            nested  reply header
486  ``ETHTOOL_A_DEBUG_MSGMASK``           bitset  message mask
487  ====================================  ======  ==========================
488
489The message mask (``ETHTOOL_A_DEBUG_MSGMASK``) is equal to message level as
490provided by ``ETHTOOL_GMSGLVL`` and set by ``ETHTOOL_SMSGLVL`` in ioctl
491interface. While it is called message level there for historical reasons, most
492drivers and almost all newer drivers use it as a mask of enabled message
493classes (represented by ``NETIF_MSG_*`` constants); therefore netlink
494interface follows its actual use in practice.
495
496``DEBUG_GET`` allows dump requests (kernel returns reply messages for all
497devices supporting the request).
498
499
500DEBUG_SET
501=========
502
503Set or update debugging settings of a device. At the moment, only message mask
504is supported.
505
506Request contents:
507
508  ====================================  ======  ==========================
509  ``ETHTOOL_A_DEBUG_HEADER``            nested  request header
510  ``ETHTOOL_A_DEBUG_MSGMASK``           bitset  message mask
511  ====================================  ======  ==========================
512
513``ETHTOOL_A_DEBUG_MSGMASK`` bit set allows setting or modifying mask of
514enabled debugging message types for the device.
515
516
517WOL_GET
518=======
519
520Query device wake-on-lan settings. Unlike most "GET" type requests,
521``ETHTOOL_MSG_WOL_GET`` requires (netns) ``CAP_NET_ADMIN`` privileges as it
522(potentially) provides SecureOn(tm) password which is confidential.
523
524Request contents:
525
526  ====================================  ======  ==========================
527  ``ETHTOOL_A_WOL_HEADER``              nested  request header
528  ====================================  ======  ==========================
529
530Kernel response contents:
531
532  ====================================  ======  ==========================
533  ``ETHTOOL_A_WOL_HEADER``              nested  reply header
534  ``ETHTOOL_A_WOL_MODES``               bitset  mask of enabled WoL modes
535  ``ETHTOOL_A_WOL_SOPASS``              binary  SecureOn(tm) password
536  ====================================  ======  ==========================
537
538In reply, ``ETHTOOL_A_WOL_MODES`` mask consists of modes supported by the
539device, value of modes which are enabled. ``ETHTOOL_A_WOL_SOPASS`` is only
540included in reply if ``WAKE_MAGICSECURE`` mode is supported.
541
542
543WOL_SET
544=======
545
546Set or update wake-on-lan settings.
547
548Request contents:
549
550  ====================================  ======  ==========================
551  ``ETHTOOL_A_WOL_HEADER``              nested  request header
552  ``ETHTOOL_A_WOL_MODES``               bitset  enabled WoL modes
553  ``ETHTOOL_A_WOL_SOPASS``              binary  SecureOn(tm) password
554  ====================================  ======  ==========================
555
556``ETHTOOL_A_WOL_SOPASS`` is only allowed for devices supporting
557``WAKE_MAGICSECURE`` mode.
558
559
560FEATURES_GET
561============
562
563Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request.
564
565Request contents:
566
567  ====================================  ======  ==========================
568  ``ETHTOOL_A_FEATURES_HEADER``         nested  request header
569  ====================================  ======  ==========================
570
571Kernel response contents:
572
573  ====================================  ======  ==========================
574  ``ETHTOOL_A_FEATURES_HEADER``         nested  reply header
575  ``ETHTOOL_A_FEATURES_HW``             bitset  dev->hw_features
576  ``ETHTOOL_A_FEATURES_WANTED``         bitset  dev->wanted_features
577  ``ETHTOOL_A_FEATURES_ACTIVE``         bitset  dev->features
578  ``ETHTOOL_A_FEATURES_NOCHANGE``       bitset  NETIF_F_NEVER_CHANGE
579  ====================================  ======  ==========================
580
581Bitmaps in kernel response have the same meaning as bitmaps used in ioctl
582interference but attribute names are different (they are based on
583corresponding members of struct net_device). Legacy "flags" are not provided,
584if userspace needs them (most likely only ethtool for backward compatibility),
585it can calculate their values from related feature bits itself.
586ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to
587provide all names when using verbose bitmap format), the other three use no
588mask (simple bit lists).
589
590
591FEATURES_SET
592============
593
594Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request.
595
596Request contents:
597
598  ====================================  ======  ==========================
599  ``ETHTOOL_A_FEATURES_HEADER``         nested  request header
600  ``ETHTOOL_A_FEATURES_WANTED``         bitset  requested features
601  ====================================  ======  ==========================
602
603Kernel response contents:
604
605  ====================================  ======  ==========================
606  ``ETHTOOL_A_FEATURES_HEADER``         nested  reply header
607  ``ETHTOOL_A_FEATURES_WANTED``         bitset  diff wanted vs. result
608  ``ETHTOOL_A_FEATURES_ACTIVE``         bitset  diff old vs. new active
609  ====================================  ======  ==========================
610
611Request constains only one bitset which can be either value/mask pair (request
612to change specific feature bits and leave the rest) or only a value (request
613to set all features to specified set).
614
615As request is subject to netdev_change_features() sanity checks, optional
616kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request
617header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED``
618reports the difference between client request and actual result: mask consists
619of bits which differ between requested features and result (dev->features
620after the operation), value consists of values of these bits in the request
621(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE``
622reports the difference between old and new dev->features: mask consists of
623bits which have changed, values are their values in new dev->features (after
624the operation).
625
626``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features
627are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl
628request but also each time features are modified with netdev_update_features()
629or netdev_change_features().
630
631
632PRIVFLAGS_GET
633=============
634
635Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request.
636
637Request contents:
638
639  ====================================  ======  ==========================
640  ``ETHTOOL_A_PRIVFLAGS_HEADER``        nested  request header
641  ====================================  ======  ==========================
642
643Kernel response contents:
644
645  ====================================  ======  ==========================
646  ``ETHTOOL_A_PRIVFLAGS_HEADER``        nested  reply header
647  ``ETHTOOL_A_PRIVFLAGS_FLAGS``         bitset  private flags
648  ====================================  ======  ==========================
649
650``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags.
651These flags are defined by driver, their number and names (and also meaning)
652are device dependent. For compact bitset format, names can be retrieved as
653``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested,
654response uses all private flags supported by the device as mask so that client
655gets the full information without having to fetch the string set with names.
656
657
658PRIVFLAGS_SET
659=============
660
661Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS``
662ioctl request.
663
664Request contents:
665
666  ====================================  ======  ==========================
667  ``ETHTOOL_A_PRIVFLAGS_HEADER``        nested  request header
668  ``ETHTOOL_A_PRIVFLAGS_FLAGS``         bitset  private flags
669  ====================================  ======  ==========================
670
671``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or
672modify only values of some of them.
673
674
675RINGS_GET
676=========
677
678Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request.
679
680Request contents:
681
682  ====================================  ======  ==========================
683  ``ETHTOOL_A_RINGS_HEADER``            nested  request header
684  ====================================  ======  ==========================
685
686Kernel response contents:
687
688  ====================================  ======  ==========================
689  ``ETHTOOL_A_RINGS_HEADER``            nested  reply header
690  ``ETHTOOL_A_RINGS_RX_MAX``            u32     max size of RX ring
691  ``ETHTOOL_A_RINGS_RX_MINI_MAX``       u32     max size of RX mini ring
692  ``ETHTOOL_A_RINGS_RX_JUMBO_MAX``      u32     max size of RX jumbo ring
693  ``ETHTOOL_A_RINGS_TX_MAX``            u32     max size of TX ring
694  ``ETHTOOL_A_RINGS_RX``                u32     size of RX ring
695  ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
696  ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
697  ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
698  ====================================  ======  ==========================
699
700
701RINGS_SET
702=========
703
704Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request.
705
706Request contents:
707
708  ====================================  ======  ==========================
709  ``ETHTOOL_A_RINGS_HEADER``            nested  reply header
710  ``ETHTOOL_A_RINGS_RX``                u32     size of RX ring
711  ``ETHTOOL_A_RINGS_RX_MINI``           u32     size of RX mini ring
712  ``ETHTOOL_A_RINGS_RX_JUMBO``          u32     size of RX jumbo ring
713  ``ETHTOOL_A_RINGS_TX``                u32     size of TX ring
714  ====================================  ======  ==========================
715
716Kernel checks that requested ring sizes do not exceed limits reported by
717driver. Driver may impose additional constraints and may not suspport all
718attributes.
719
720
721CHANNELS_GET
722============
723
724Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request.
725
726Request contents:
727
728  ====================================  ======  ==========================
729  ``ETHTOOL_A_CHANNELS_HEADER``         nested  request header
730  ====================================  ======  ==========================
731
732Kernel response contents:
733
734  =====================================  ======  ==========================
735  ``ETHTOOL_A_CHANNELS_HEADER``          nested  reply header
736  ``ETHTOOL_A_CHANNELS_RX_MAX``          u32     max receive channels
737  ``ETHTOOL_A_CHANNELS_TX_MAX``          u32     max transmit channels
738  ``ETHTOOL_A_CHANNELS_OTHER_MAX``       u32     max other channels
739  ``ETHTOOL_A_CHANNELS_COMBINED_MAX``    u32     max combined channels
740  ``ETHTOOL_A_CHANNELS_RX_COUNT``        u32     receive channel count
741  ``ETHTOOL_A_CHANNELS_TX_COUNT``        u32     transmit channel count
742  ``ETHTOOL_A_CHANNELS_OTHER_COUNT``     u32     other channel count
743  ``ETHTOOL_A_CHANNELS_COMBINED_COUNT``  u32     combined channel count
744  =====================================  ======  ==========================
745
746
747CHANNELS_SET
748============
749
750Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
751
752Request contents:
753
754  =====================================  ======  ==========================
755  ``ETHTOOL_A_CHANNELS_HEADER``          nested  request header
756  ``ETHTOOL_A_CHANNELS_RX_COUNT``        u32     receive channel count
757  ``ETHTOOL_A_CHANNELS_TX_COUNT``        u32     transmit channel count
758  ``ETHTOOL_A_CHANNELS_OTHER_COUNT``     u32     other channel count
759  ``ETHTOOL_A_CHANNELS_COMBINED_COUNT``  u32     combined channel count
760  =====================================  ======  ==========================
761
762Kernel checks that requested channel counts do not exceed limits reported by
763driver. Driver may impose additional constraints and may not suspport all
764attributes.
765
766
767COALESCE_GET
768============
769
770Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request.
771
772Request contents:
773
774  ====================================  ======  ==========================
775  ``ETHTOOL_A_COALESCE_HEADER``         nested  request header
776  ====================================  ======  ==========================
777
778Kernel response contents:
779
780  ===========================================  ======  =======================
781  ``ETHTOOL_A_COALESCE_HEADER``                nested  reply header
782  ``ETHTOOL_A_COALESCE_RX_USECS``              u32     delay (us), normal Rx
783  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES``         u32     max packets, normal Rx
784  ``ETHTOOL_A_COALESCE_RX_USECS_IRQ``          u32     delay (us), Rx in IRQ
785  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ``     u32     max packets, Rx in IRQ
786  ``ETHTOOL_A_COALESCE_TX_USECS``              u32     delay (us), normal Tx
787  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES``         u32     max packets, normal Tx
788  ``ETHTOOL_A_COALESCE_TX_USECS_IRQ``          u32     delay (us), Tx in IRQ
789  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ``     u32     IRQ packets, Tx in IRQ
790  ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS``     u32     delay of stats update
791  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX``       bool    adaptive Rx coalesce
792  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX``       bool    adaptive Tx coalesce
793  ``ETHTOOL_A_COALESCE_PKT_RATE_LOW``          u32     threshold for low rate
794  ``ETHTOOL_A_COALESCE_RX_USECS_LOW``          u32     delay (us), low Rx
795  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW``     u32     max packets, low Rx
796  ``ETHTOOL_A_COALESCE_TX_USECS_LOW``          u32     delay (us), low Tx
797  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW``     u32     max packets, low Tx
798  ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH``         u32     threshold for high rate
799  ``ETHTOOL_A_COALESCE_RX_USECS_HIGH``         u32     delay (us), high Rx
800  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH``    u32     max packets, high Rx
801  ``ETHTOOL_A_COALESCE_TX_USECS_HIGH``         u32     delay (us), high Tx
802  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH``    u32     max packets, high Tx
803  ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL``  u32     rate sampling interval
804  ===========================================  ======  =======================
805
806Attributes are only included in reply if their value is not zero or the
807corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e.
808they are declared as supported by driver).
809
810
811COALESCE_SET
812============
813
814Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request.
815
816Request contents:
817
818  ===========================================  ======  =======================
819  ``ETHTOOL_A_COALESCE_HEADER``                nested  request header
820  ``ETHTOOL_A_COALESCE_RX_USECS``              u32     delay (us), normal Rx
821  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES``         u32     max packets, normal Rx
822  ``ETHTOOL_A_COALESCE_RX_USECS_IRQ``          u32     delay (us), Rx in IRQ
823  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ``     u32     max packets, Rx in IRQ
824  ``ETHTOOL_A_COALESCE_TX_USECS``              u32     delay (us), normal Tx
825  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES``         u32     max packets, normal Tx
826  ``ETHTOOL_A_COALESCE_TX_USECS_IRQ``          u32     delay (us), Tx in IRQ
827  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ``     u32     IRQ packets, Tx in IRQ
828  ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS``     u32     delay of stats update
829  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX``       bool    adaptive Rx coalesce
830  ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX``       bool    adaptive Tx coalesce
831  ``ETHTOOL_A_COALESCE_PKT_RATE_LOW``          u32     threshold for low rate
832  ``ETHTOOL_A_COALESCE_RX_USECS_LOW``          u32     delay (us), low Rx
833  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW``     u32     max packets, low Rx
834  ``ETHTOOL_A_COALESCE_TX_USECS_LOW``          u32     delay (us), low Tx
835  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW``     u32     max packets, low Tx
836  ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH``         u32     threshold for high rate
837  ``ETHTOOL_A_COALESCE_RX_USECS_HIGH``         u32     delay (us), high Rx
838  ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH``    u32     max packets, high Rx
839  ``ETHTOOL_A_COALESCE_TX_USECS_HIGH``         u32     delay (us), high Tx
840  ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH``    u32     max packets, high Tx
841  ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL``  u32     rate sampling interval
842  ===========================================  ======  =======================
843
844Request is rejected if it attributes declared as unsupported by driver (i.e.
845such that the corresponding bit in ``ethtool_ops::supported_coalesce_params``
846is not set), regardless of their values. Driver may impose additional
847constraints on coalescing parameters and their values.
848
849
850PAUSE_GET
851============
852
853Gets channel counts like ``ETHTOOL_GPAUSE`` ioctl request.
854
855Request contents:
856
857  =====================================  ======  ==========================
858  ``ETHTOOL_A_PAUSE_HEADER``             nested  request header
859  =====================================  ======  ==========================
860
861Kernel response contents:
862
863  =====================================  ======  ==========================
864  ``ETHTOOL_A_PAUSE_HEADER``             nested  request header
865  ``ETHTOOL_A_PAUSE_AUTONEG``            bool    pause autonegotiation
866  ``ETHTOOL_A_PAUSE_RX``                 bool    receive pause frames
867  ``ETHTOOL_A_PAUSE_TX``                 bool    transmit pause frames
868  =====================================  ======  ==========================
869
870
871PAUSE_SET
872============
873
874Sets pause parameters like ``ETHTOOL_GPAUSEPARAM`` ioctl request.
875
876Request contents:
877
878  =====================================  ======  ==========================
879  ``ETHTOOL_A_PAUSE_HEADER``             nested  request header
880  ``ETHTOOL_A_PAUSE_AUTONEG``            bool    pause autonegotiation
881  ``ETHTOOL_A_PAUSE_RX``                 bool    receive pause frames
882  ``ETHTOOL_A_PAUSE_TX``                 bool    transmit pause frames
883  =====================================  ======  ==========================
884
885
886EEE_GET
887=======
888
889Gets channel counts like ``ETHTOOL_GEEE`` ioctl request.
890
891Request contents:
892
893  =====================================  ======  ==========================
894  ``ETHTOOL_A_EEE_HEADER``               nested  request header
895  =====================================  ======  ==========================
896
897Kernel response contents:
898
899  =====================================  ======  ==========================
900  ``ETHTOOL_A_EEE_HEADER``               nested  request header
901  ``ETHTOOL_A_EEE_MODES_OURS``           bool    supported/advertised modes
902  ``ETHTOOL_A_EEE_MODES_PEER``           bool    peer advertised link modes
903  ``ETHTOOL_A_EEE_ACTIVE``               bool    EEE is actively used
904  ``ETHTOOL_A_EEE_ENABLED``              bool    EEE is enabled
905  ``ETHTOOL_A_EEE_TX_LPI_ENABLED``       bool    Tx lpi enabled
906  ``ETHTOOL_A_EEE_TX_LPI_TIMER``         u32     Tx lpi timeout (in us)
907  =====================================  ======  ==========================
908
909In ``ETHTOOL_A_EEE_MODES_OURS``, mask consists of link modes for which EEE is
910enabled, value of link modes for which EEE is advertised. Link modes for which
911peer advertises EEE are listed in ``ETHTOOL_A_EEE_MODES_PEER`` (no mask). The
912netlink interface allows reporting EEE status for all link modes but only
913first 32 are provided by the ``ethtool_ops`` callback.
914
915
916EEE_SET
917=======
918
919Sets pause parameters like ``ETHTOOL_GEEEPARAM`` ioctl request.
920
921Request contents:
922
923  =====================================  ======  ==========================
924  ``ETHTOOL_A_EEE_HEADER``               nested  request header
925  ``ETHTOOL_A_EEE_MODES_OURS``           bool    advertised modes
926  ``ETHTOOL_A_EEE_ENABLED``              bool    EEE is enabled
927  ``ETHTOOL_A_EEE_TX_LPI_ENABLED``       bool    Tx lpi enabled
928  ``ETHTOOL_A_EEE_TX_LPI_TIMER``         u32     Tx lpi timeout (in us)
929  =====================================  ======  ==========================
930
931``ETHTOOL_A_EEE_MODES_OURS`` is used to either list link modes to advertise
932EEE for (if there is no mask) or specify changes to the list (if there is
933a mask). The netlink interface allows reporting EEE status for all link modes
934but only first 32 can be set at the moment as that is what the ``ethtool_ops``
935callback supports.
936
937
938TSINFO_GET
939==========
940
941Gets timestamping information like ``ETHTOOL_GET_TS_INFO`` ioctl request.
942
943Request contents:
944
945  =====================================  ======  ==========================
946  ``ETHTOOL_A_TSINFO_HEADER``            nested  request header
947  =====================================  ======  ==========================
948
949Kernel response contents:
950
951  =====================================  ======  ==========================
952  ``ETHTOOL_A_TSINFO_HEADER``            nested  request header
953  ``ETHTOOL_A_TSINFO_TIMESTAMPING``      bitset  SO_TIMESTAMPING flags
954  ``ETHTOOL_A_TSINFO_TX_TYPES``          bitset  supported Tx types
955  ``ETHTOOL_A_TSINFO_RX_FILTERS``        bitset  supported Rx filters
956  ``ETHTOOL_A_TSINFO_PHC_INDEX``         u32     PTP hw clock index
957  =====================================  ======  ==========================
958
959``ETHTOOL_A_TSINFO_PHC_INDEX`` is absent if there is no associated PHC (there
960is no special value for this case). The bitset attributes are omitted if they
961would be empty (no bit set).
962
963CABLE_TEST
964==========
965
966Start a cable test.
967
968Request contents:
969
970  ====================================  ======  ==========================
971  ``ETHTOOL_A_CABLE_TEST_HEADER``       nested  request header
972  ====================================  ======  ==========================
973
974Notification contents:
975
976An Ethernet cable typically contains 1, 2 or 4 pairs. The length of
977the pair can only be measured when there is a fault in the pair and
978hence a reflection. Information about the fault may not be available,
979depending on the specific hardware. Hence the contents of the notify
980message are mostly optional. The attributes can be repeated an
981arbitrary number of times, in an arbitrary order, for an arbitrary
982number of pairs.
983
984The example shows the notification sent when the test is completed for
985a T2 cable, i.e. two pairs. One pair is OK and hence has no length
986information. The second pair has a fault and does have length
987information.
988
989 +---------------------------------------------+--------+---------------------+
990 | ``ETHTOOL_A_CABLE_TEST_HEADER``             | nested | reply header        |
991 +---------------------------------------------+--------+---------------------+
992 | ``ETHTOOL_A_CABLE_TEST_STATUS``             | u8     | completed           |
993 +---------------------------------------------+--------+---------------------+
994 | ``ETHTOOL_A_CABLE_TEST_NTF_NEST``           | nested | all the results     |
995 +-+-------------------------------------------+--------+---------------------+
996 | | ``ETHTOOL_A_CABLE_NEST_RESULT``           | nested | cable test result   |
997 +-+-+-----------------------------------------+--------+---------------------+
998 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number         |
999 +-+-+-----------------------------------------+--------+---------------------+
1000 | | | ``ETHTOOL_A_CABLE_RESULTS_CODE``        | u8     | result code         |
1001 +-+-+-----------------------------------------+--------+---------------------+
1002 | | ``ETHTOOL_A_CABLE_NEST_RESULT``           | nested | cable test results  |
1003 +-+-+-----------------------------------------+--------+---------------------+
1004 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR``        | u8     | pair number         |
1005 +-+-+-----------------------------------------+--------+---------------------+
1006 | | | ``ETHTOOL_A_CABLE_RESULTS_CODE``        | u8     | result code         |
1007 +-+-+-----------------------------------------+--------+---------------------+
1008 | | ``ETHTOOL_A_CABLE_NEST_FAULT_LENGTH``     | nested | cable length        |
1009 +-+-+-----------------------------------------+--------+---------------------+
1010 | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR``   | u8     | pair number         |
1011 +-+-+-----------------------------------------+--------+---------------------+
1012 | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_CM``     | u32    | length in cm        |
1013 +-+-+-----------------------------------------+--------+---------------------+
1014
1015Request translation
1016===================
1017
1018The following table maps ioctl commands to netlink commands providing their
1019functionality. Entries with "n/a" in right column are commands which do not
1020have their netlink replacement yet. Entries which "n/a" in the left column
1021are netlink only.
1022
1023  =================================== =====================================
1024  ioctl command                       netlink command
1025  =================================== =====================================
1026  ``ETHTOOL_GSET``                    ``ETHTOOL_MSG_LINKINFO_GET``
1027                                      ``ETHTOOL_MSG_LINKMODES_GET``
1028  ``ETHTOOL_SSET``                    ``ETHTOOL_MSG_LINKINFO_SET``
1029                                      ``ETHTOOL_MSG_LINKMODES_SET``
1030  ``ETHTOOL_GDRVINFO``                n/a
1031  ``ETHTOOL_GREGS``                   n/a
1032  ``ETHTOOL_GWOL``                    ``ETHTOOL_MSG_WOL_GET``
1033  ``ETHTOOL_SWOL``                    ``ETHTOOL_MSG_WOL_SET``
1034  ``ETHTOOL_GMSGLVL``                 ``ETHTOOL_MSG_DEBUG_GET``
1035  ``ETHTOOL_SMSGLVL``                 ``ETHTOOL_MSG_DEBUG_SET``
1036  ``ETHTOOL_NWAY_RST``                n/a
1037  ``ETHTOOL_GLINK``                   ``ETHTOOL_MSG_LINKSTATE_GET``
1038  ``ETHTOOL_GEEPROM``                 n/a
1039  ``ETHTOOL_SEEPROM``                 n/a
1040  ``ETHTOOL_GCOALESCE``               ``ETHTOOL_MSG_COALESCE_GET``
1041  ``ETHTOOL_SCOALESCE``               ``ETHTOOL_MSG_COALESCE_SET``
1042  ``ETHTOOL_GRINGPARAM``              ``ETHTOOL_MSG_RINGS_GET``
1043  ``ETHTOOL_SRINGPARAM``              ``ETHTOOL_MSG_RINGS_SET``
1044  ``ETHTOOL_GPAUSEPARAM``             ``ETHTOOL_MSG_PAUSE_GET``
1045  ``ETHTOOL_SPAUSEPARAM``             ``ETHTOOL_MSG_PAUSE_SET``
1046  ``ETHTOOL_GRXCSUM``                 ``ETHTOOL_MSG_FEATURES_GET``
1047  ``ETHTOOL_SRXCSUM``                 ``ETHTOOL_MSG_FEATURES_SET``
1048  ``ETHTOOL_GTXCSUM``                 ``ETHTOOL_MSG_FEATURES_GET``
1049  ``ETHTOOL_STXCSUM``                 ``ETHTOOL_MSG_FEATURES_SET``
1050  ``ETHTOOL_GSG``                     ``ETHTOOL_MSG_FEATURES_GET``
1051  ``ETHTOOL_SSG``                     ``ETHTOOL_MSG_FEATURES_SET``
1052  ``ETHTOOL_TEST``                    n/a
1053  ``ETHTOOL_GSTRINGS``                ``ETHTOOL_MSG_STRSET_GET``
1054  ``ETHTOOL_PHYS_ID``                 n/a
1055  ``ETHTOOL_GSTATS``                  n/a
1056  ``ETHTOOL_GTSO``                    ``ETHTOOL_MSG_FEATURES_GET``
1057  ``ETHTOOL_STSO``                    ``ETHTOOL_MSG_FEATURES_SET``
1058  ``ETHTOOL_GPERMADDR``               rtnetlink ``RTM_GETLINK``
1059  ``ETHTOOL_GUFO``                    ``ETHTOOL_MSG_FEATURES_GET``
1060  ``ETHTOOL_SUFO``                    ``ETHTOOL_MSG_FEATURES_SET``
1061  ``ETHTOOL_GGSO``                    ``ETHTOOL_MSG_FEATURES_GET``
1062  ``ETHTOOL_SGSO``                    ``ETHTOOL_MSG_FEATURES_SET``
1063  ``ETHTOOL_GFLAGS``                  ``ETHTOOL_MSG_FEATURES_GET``
1064  ``ETHTOOL_SFLAGS``                  ``ETHTOOL_MSG_FEATURES_SET``
1065  ``ETHTOOL_GPFLAGS``                 ``ETHTOOL_MSG_PRIVFLAGS_GET``
1066  ``ETHTOOL_SPFLAGS``                 ``ETHTOOL_MSG_PRIVFLAGS_SET``
1067  ``ETHTOOL_GRXFH``                   n/a
1068  ``ETHTOOL_SRXFH``                   n/a
1069  ``ETHTOOL_GGRO``                    ``ETHTOOL_MSG_FEATURES_GET``
1070  ``ETHTOOL_SGRO``                    ``ETHTOOL_MSG_FEATURES_SET``
1071  ``ETHTOOL_GRXRINGS``                n/a
1072  ``ETHTOOL_GRXCLSRLCNT``             n/a
1073  ``ETHTOOL_GRXCLSRULE``              n/a
1074  ``ETHTOOL_GRXCLSRLALL``             n/a
1075  ``ETHTOOL_SRXCLSRLDEL``             n/a
1076  ``ETHTOOL_SRXCLSRLINS``             n/a
1077  ``ETHTOOL_FLASHDEV``                n/a
1078  ``ETHTOOL_RESET``                   n/a
1079  ``ETHTOOL_SRXNTUPLE``               n/a
1080  ``ETHTOOL_GRXNTUPLE``               n/a
1081  ``ETHTOOL_GSSET_INFO``              ``ETHTOOL_MSG_STRSET_GET``
1082  ``ETHTOOL_GRXFHINDIR``              n/a
1083  ``ETHTOOL_SRXFHINDIR``              n/a
1084  ``ETHTOOL_GFEATURES``               ``ETHTOOL_MSG_FEATURES_GET``
1085  ``ETHTOOL_SFEATURES``               ``ETHTOOL_MSG_FEATURES_SET``
1086  ``ETHTOOL_GCHANNELS``               ``ETHTOOL_MSG_CHANNELS_GET``
1087  ``ETHTOOL_SCHANNELS``               ``ETHTOOL_MSG_CHANNELS_SET``
1088  ``ETHTOOL_SET_DUMP``                n/a
1089  ``ETHTOOL_GET_DUMP_FLAG``           n/a
1090  ``ETHTOOL_GET_DUMP_DATA``           n/a
1091  ``ETHTOOL_GET_TS_INFO``             ``ETHTOOL_MSG_TSINFO_GET``
1092  ``ETHTOOL_GMODULEINFO``             n/a
1093  ``ETHTOOL_GMODULEEEPROM``           n/a
1094  ``ETHTOOL_GEEE``                    ``ETHTOOL_MSG_EEE_GET``
1095  ``ETHTOOL_SEEE``                    ``ETHTOOL_MSG_EEE_SET``
1096  ``ETHTOOL_GRSSH``                   n/a
1097  ``ETHTOOL_SRSSH``                   n/a
1098  ``ETHTOOL_GTUNABLE``                n/a
1099  ``ETHTOOL_STUNABLE``                n/a
1100  ``ETHTOOL_GPHYSTATS``               n/a
1101  ``ETHTOOL_PERQUEUE``                n/a
1102  ``ETHTOOL_GLINKSETTINGS``           ``ETHTOOL_MSG_LINKINFO_GET``
1103                                      ``ETHTOOL_MSG_LINKMODES_GET``
1104  ``ETHTOOL_SLINKSETTINGS``           ``ETHTOOL_MSG_LINKINFO_SET``
1105                                      ``ETHTOOL_MSG_LINKMODES_SET``
1106  ``ETHTOOL_PHY_GTUNABLE``            n/a
1107  ``ETHTOOL_PHY_STUNABLE``            n/a
1108  ``ETHTOOL_GFECPARAM``               n/a
1109  ``ETHTOOL_SFECPARAM``               n/a
1110  n/a                                 ''ETHTOOL_MSG_CABLE_TEST_ACT''
1111  =================================== =====================================
1112