ethtool: provide coalescing parameters with COALESCE_GET request
[linux-block.git] / Documentation / networking / ethtool-netlink.rst
CommitLineData
2b4a8990
MK
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
10b518d4
MK
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
2b4a8990
MK
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
71921690
MK
179Userspace to kernel:
180
181 ===================================== ================================
182 ``ETHTOOL_MSG_STRSET_GET`` get string set
459e0b81 183 ``ETHTOOL_MSG_LINKINFO_GET`` get link settings
a53f3d41 184 ``ETHTOOL_MSG_LINKINFO_SET`` set link settings
f625aa9b 185 ``ETHTOOL_MSG_LINKMODES_GET`` get link modes info
bfbcfe20 186 ``ETHTOOL_MSG_LINKMODES_SET`` set link modes info
3d2b847f 187 ``ETHTOOL_MSG_LINKSTATE_GET`` get link state
6a94b8cc 188 ``ETHTOOL_MSG_DEBUG_GET`` get debugging settings
e54d04e3 189 ``ETHTOOL_MSG_DEBUG_SET`` set debugging settings
51ea22b0 190 ``ETHTOOL_MSG_WOL_GET`` get wake-on-lan settings
8d425b19 191 ``ETHTOOL_MSG_WOL_SET`` set wake-on-lan settings
0524399d 192 ``ETHTOOL_MSG_FEATURES_GET`` get device features
0980bfcd 193 ``ETHTOOL_MSG_FEATURES_SET`` set device features
e16c3386 194 ``ETHTOOL_MSG_PRIVFLAGS_GET`` get private flags
f265d799 195 ``ETHTOOL_MSG_PRIVFLAGS_SET`` set private flags
e4a1717b 196 ``ETHTOOL_MSG_RINGS_GET`` get ring sizes
2fc2929e 197 ``ETHTOOL_MSG_RINGS_SET`` set ring sizes
0c84979c 198 ``ETHTOOL_MSG_CHANNELS_GET`` get channel counts
e19c591e 199 ``ETHTOOL_MSG_CHANNELS_SET`` set channel counts
21727545 200 ``ETHTOOL_MSG_COALESCE_GET`` get coalescing parameters
71921690
MK
201 ===================================== ================================
202
203Kernel to userspace:
204
67bffa79 205 ===================================== =================================
71921690 206 ``ETHTOOL_MSG_STRSET_GET_REPLY`` string set contents
459e0b81 207 ``ETHTOOL_MSG_LINKINFO_GET_REPLY`` link settings
73286734 208 ``ETHTOOL_MSG_LINKINFO_NTF`` link settings notification
f625aa9b 209 ``ETHTOOL_MSG_LINKMODES_GET_REPLY`` link modes info
1b1b1847 210 ``ETHTOOL_MSG_LINKMODES_NTF`` link modes notification
3d2b847f 211 ``ETHTOOL_MSG_LINKSTATE_GET_REPLY`` link state info
6a94b8cc 212 ``ETHTOOL_MSG_DEBUG_GET_REPLY`` debugging settings
0bda7af3 213 ``ETHTOOL_MSG_DEBUG_NTF`` debugging settings notification
51ea22b0 214 ``ETHTOOL_MSG_WOL_GET_REPLY`` wake-on-lan settings
67bffa79 215 ``ETHTOOL_MSG_WOL_NTF`` wake-on-lan settings notification
0524399d 216 ``ETHTOOL_MSG_FEATURES_GET_REPLY`` device features
0980bfcd 217 ``ETHTOOL_MSG_FEATURES_SET_REPLY`` optional reply to FEATURES_SET
9c6451ef 218 ``ETHTOOL_MSG_FEATURES_NTF`` netdev features notification
e16c3386 219 ``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY`` private flags
f265d799 220 ``ETHTOOL_MSG_PRIVFLAGS_NTF`` private flags
e4a1717b 221 ``ETHTOOL_MSG_RINGS_GET_REPLY`` ring sizes
bc9d1c99 222 ``ETHTOOL_MSG_RINGS_NTF`` ring sizes
0c84979c 223 ``ETHTOOL_MSG_CHANNELS_GET_REPLY`` channel counts
546379b9 224 ``ETHTOOL_MSG_CHANNELS_NTF`` channel counts
21727545 225 ``ETHTOOL_MSG_COALESCE_GET_REPLY`` coalescing parameters
67bffa79 226 ===================================== =================================
71921690 227
2b4a8990
MK
228``GET`` requests are sent by userspace applications to retrieve device
229information. They usually do not contain any message specific attributes.
230Kernel replies with corresponding "GET_REPLY" message. For most types, ``GET``
231request with ``NLM_F_DUMP`` and no device identification can be used to query
232the information for all devices supporting the request.
233
234If the data can be also modified, corresponding ``SET`` message with the same
235layout as corresponding ``GET_REPLY`` is used to request changes. Only
236attributes where a change is requested are included in such request (also, not
237all attributes may be changed). Replies to most ``SET`` request consist only
238of error code and extack; if kernel provides additional data, it is sent in
239the form of corresponding ``SET_REPLY`` message which can be suppressed by
240setting ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header.
241
242Data modification also triggers sending a ``NTF`` message with a notification.
243These usually bear only a subset of attributes which was affected by the
244change. The same notification is issued if the data is modified using other
245means (mostly ioctl ethtool interface). Unlike notifications from ethtool
246netlink code which are only sent if something actually changed, notifications
247triggered by ioctl interface may be sent even if the request did not actually
248change any data.
249
250``ACT`` messages request kernel (driver) to perform a specific action. If some
251information is reported by kernel (which can be suppressed by setting
252``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header), the reply takes form of
253an ``ACT_REPLY`` message. Performing an action also triggers a notification
254(``NTF`` message).
255
256Later sections describe the format and semantics of these messages.
257
258
71921690
MK
259STRSET_GET
260==========
261
262Requests contents of a string set as provided by ioctl commands
263``ETHTOOL_GSSET_INFO`` and ``ETHTOOL_GSTRINGS.`` String sets are not user
264writeable so that the corresponding ``STRSET_SET`` message is only used in
265kernel replies. There are two types of string sets: global (independent of
266a device, e.g. device feature names) and device specific (e.g. device private
267flags).
268
269Request contents:
270
271 +---------------------------------------+--------+------------------------+
272 | ``ETHTOOL_A_STRSET_HEADER`` | nested | request header |
273 +---------------------------------------+--------+------------------------+
274 | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | string set to request |
275 +-+-------------------------------------+--------+------------------------+
276 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set |
277 +-+-+-----------------------------------+--------+------------------------+
278 | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id |
279 +-+-+-----------------------------------+--------+------------------------+
280
281Kernel response contents:
282
283 +---------------------------------------+--------+-----------------------+
284 | ``ETHTOOL_A_STRSET_HEADER`` | nested | reply header |
285 +---------------------------------------+--------+-----------------------+
286 | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | array of string sets |
287 +-+-------------------------------------+--------+-----------------------+
288 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set |
289 +-+-+-----------------------------------+--------+-----------------------+
290 | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id |
291 +-+-+-----------------------------------+--------+-----------------------+
292 | | | ``ETHTOOL_A_STRINGSET_COUNT`` | u32 | number of strings |
293 +-+-+-----------------------------------+--------+-----------------------+
294 | | | ``ETHTOOL_A_STRINGSET_STRINGS`` | nested | array of strings |
295 +-+-+-+---------------------------------+--------+-----------------------+
296 | | | | ``ETHTOOL_A_STRINGS_STRING+`` | nested | one string |
297 +-+-+-+-+-------------------------------+--------+-----------------------+
298 | | | | | ``ETHTOOL_A_STRING_INDEX`` | u32 | string index |
299 +-+-+-+-+-------------------------------+--------+-----------------------+
300 | | | | | ``ETHTOOL_A_STRING_VALUE`` | string | string value |
301 +-+-+-+-+-------------------------------+--------+-----------------------+
302 | ``ETHTOOL_A_STRSET_COUNTS_ONLY`` | flag | return only counts |
303 +---------------------------------------+--------+-----------------------+
304
305Device identification in request header is optional. Depending on its presence
306a and ``NLM_F_DUMP`` flag, there are three type of ``STRSET_GET`` requests:
307
308 - no ``NLM_F_DUMP,`` no device: get "global" stringsets
309 - no ``NLM_F_DUMP``, with device: get string sets related to the device
310 - ``NLM_F_DUMP``, no device: get device related string sets for all devices
311
312If there is no ``ETHTOOL_A_STRSET_STRINGSETS`` array, all string sets of
313requested type are returned, otherwise only those specified in the request.
314Flag ``ETHTOOL_A_STRSET_COUNTS_ONLY`` tells kernel to only return string
315counts of the sets, not the actual strings.
316
317
459e0b81
MK
318LINKINFO_GET
319============
320
321Requests link settings as provided by ``ETHTOOL_GLINKSETTINGS`` except for
322link modes and autonegotiation related information. The request does not use
323any attributes.
324
325Request contents:
326
327 ==================================== ====== ==========================
328 ``ETHTOOL_A_LINKINFO_HEADER`` nested request header
329 ==================================== ====== ==========================
330
331Kernel response contents:
332
333 ==================================== ====== ==========================
334 ``ETHTOOL_A_LINKINFO_HEADER`` nested reply header
335 ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port
336 ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address
337 ``ETHTOOL_A_LINKINFO_TP_MDIX`` u8 MDI(-X) status
338 ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control
339 ``ETHTOOL_A_LINKINFO_TRANSCEIVER`` u8 transceiver
340 ==================================== ====== ==========================
341
342Attributes and their values have the same meaning as matching members of the
343corresponding ioctl structures.
344
345``LINKINFO_GET`` allows dump requests (kernel returns reply message for all
346devices supporting the request).
347
348
a53f3d41
MK
349LINKINFO_SET
350============
351
352``LINKINFO_SET`` request allows setting some of the attributes reported by
353``LINKINFO_GET``.
354
355Request contents:
356
357 ==================================== ====== ==========================
358 ``ETHTOOL_A_LINKINFO_HEADER`` nested request header
359 ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port
360 ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address
361 ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control
362 ==================================== ====== ==========================
363
364MDI(-X) status and transceiver cannot be set, request with the corresponding
365attributes is rejected.
366
367
f625aa9b
MK
368LINKMODES_GET
369=============
370
371Requests link modes (supported, advertised and peer advertised) and related
372information (autonegotiation status, link speed and duplex) as provided by
373``ETHTOOL_GLINKSETTINGS``. The request does not use any attributes.
374
375Request contents:
376
377 ==================================== ====== ==========================
378 ``ETHTOOL_A_LINKMODES_HEADER`` nested request header
379 ==================================== ====== ==========================
380
381Kernel response contents:
382
383 ==================================== ====== ==========================
384 ``ETHTOOL_A_LINKMODES_HEADER`` nested reply header
385 ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status
386 ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes
387 ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes
388 ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s)
389 ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode
390 ==================================== ====== ==========================
391
392For ``ETHTOOL_A_LINKMODES_OURS``, value represents advertised modes and mask
393represents supported modes. ``ETHTOOL_A_LINKMODES_PEER`` in the reply is a bit
394list.
395
396``LINKMODES_GET`` allows dump requests (kernel returns reply messages for all
397devices supporting the request).
398
399
bfbcfe20
MK
400LINKMODES_SET
401=============
402
403Request contents:
404
405 ==================================== ====== ==========================
406 ``ETHTOOL_A_LINKMODES_HEADER`` nested request header
407 ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status
408 ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes
409 ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes
410 ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s)
411 ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode
412 ==================================== ====== ==========================
413
414``ETHTOOL_A_LINKMODES_OURS`` bit set allows setting advertised link modes. If
415autonegotiation is on (either set now or kept from before), advertised modes
416are not changed (no ``ETHTOOL_A_LINKMODES_OURS`` attribute) and at least one
417of speed and duplex is specified, kernel adjusts advertised modes to all
418supported modes matching speed, duplex or both (whatever is specified). This
419autoselection is done on ethtool side with ioctl interface, netlink interface
420is supposed to allow requesting changes without knowing what exactly kernel
421supports.
422
423
3d2b847f
MK
424LINKSTATE_GET
425=============
426
427Requests link state information. At the moment, only link up/down flag (as
428provided by ``ETHTOOL_GLINK`` ioctl command) is provided but some future
429extensions are planned (e.g. link down reason). This request does not have any
430attributes.
431
432Request contents:
433
434 ==================================== ====== ==========================
435 ``ETHTOOL_A_LINKSTATE_HEADER`` nested request header
436 ==================================== ====== ==========================
437
438Kernel response contents:
439
440 ==================================== ====== ==========================
441 ``ETHTOOL_A_LINKSTATE_HEADER`` nested reply header
442 ``ETHTOOL_A_LINKSTATE_LINK`` bool link state (up/down)
443 ==================================== ====== ==========================
444
445For most NIC drivers, the value of ``ETHTOOL_A_LINKSTATE_LINK`` returns
446carrier flag provided by ``netif_carrier_ok()`` but there are drivers which
447define their own handler.
448
449``LINKSTATE_GET`` allows dump requests (kernel returns reply messages for all
450devices supporting the request).
451
452
6a94b8cc
MK
453DEBUG_GET
454=========
455
456Requests debugging settings of a device. At the moment, only message mask is
457provided.
458
459Request contents:
460
461 ==================================== ====== ==========================
462 ``ETHTOOL_A_DEBUG_HEADER`` nested request header
463 ==================================== ====== ==========================
464
465Kernel response contents:
466
467 ==================================== ====== ==========================
468 ``ETHTOOL_A_DEBUG_HEADER`` nested reply header
469 ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask
470 ==================================== ====== ==========================
471
472The message mask (``ETHTOOL_A_DEBUG_MSGMASK``) is equal to message level as
473provided by ``ETHTOOL_GMSGLVL`` and set by ``ETHTOOL_SMSGLVL`` in ioctl
474interface. While it is called message level there for historical reasons, most
475drivers and almost all newer drivers use it as a mask of enabled message
476classes (represented by ``NETIF_MSG_*`` constants); therefore netlink
477interface follows its actual use in practice.
478
479``DEBUG_GET`` allows dump requests (kernel returns reply messages for all
480devices supporting the request).
481
482
e54d04e3
MK
483DEBUG_SET
484=========
485
486Set or update debugging settings of a device. At the moment, only message mask
487is supported.
488
489Request contents:
490
491 ==================================== ====== ==========================
492 ``ETHTOOL_A_DEBUG_HEADER`` nested request header
493 ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask
494 ==================================== ====== ==========================
495
496``ETHTOOL_A_DEBUG_MSGMASK`` bit set allows setting or modifying mask of
497enabled debugging message types for the device.
498
499
51ea22b0
MK
500WOL_GET
501=======
502
503Query device wake-on-lan settings. Unlike most "GET" type requests,
504``ETHTOOL_MSG_WOL_GET`` requires (netns) ``CAP_NET_ADMIN`` privileges as it
505(potentially) provides SecureOn(tm) password which is confidential.
506
507Request contents:
508
509 ==================================== ====== ==========================
510 ``ETHTOOL_A_WOL_HEADER`` nested request header
511 ==================================== ====== ==========================
512
513Kernel response contents:
514
515 ==================================== ====== ==========================
516 ``ETHTOOL_A_WOL_HEADER`` nested reply header
517 ``ETHTOOL_A_WOL_MODES`` bitset mask of enabled WoL modes
518 ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password
519 ==================================== ====== ==========================
520
521In reply, ``ETHTOOL_A_WOL_MODES`` mask consists of modes supported by the
522device, value of modes which are enabled. ``ETHTOOL_A_WOL_SOPASS`` is only
523included in reply if ``WAKE_MAGICSECURE`` mode is supported.
524
525
8d425b19
MK
526WOL_SET
527=======
528
529Set or update wake-on-lan settings.
530
531Request contents:
532
533 ==================================== ====== ==========================
534 ``ETHTOOL_A_WOL_HEADER`` nested request header
535 ``ETHTOOL_A_WOL_MODES`` bitset enabled WoL modes
536 ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password
537 ==================================== ====== ==========================
538
539``ETHTOOL_A_WOL_SOPASS`` is only allowed for devices supporting
540``WAKE_MAGICSECURE`` mode.
541
542
0524399d
MK
543FEATURES_GET
544============
545
546Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request.
547
548Request contents:
549
550 ==================================== ====== ==========================
551 ``ETHTOOL_A_FEATURES_HEADER`` nested request header
552 ==================================== ====== ==========================
553
554Kernel response contents:
555
556 ==================================== ====== ==========================
557 ``ETHTOOL_A_FEATURES_HEADER`` nested reply header
558 ``ETHTOOL_A_FEATURES_HW`` bitset dev->hw_features
559 ``ETHTOOL_A_FEATURES_WANTED`` bitset dev->wanted_features
560 ``ETHTOOL_A_FEATURES_ACTIVE`` bitset dev->features
561 ``ETHTOOL_A_FEATURES_NOCHANGE`` bitset NETIF_F_NEVER_CHANGE
562 ==================================== ====== ==========================
563
564Bitmaps in kernel response have the same meaning as bitmaps used in ioctl
565interference but attribute names are different (they are based on
566corresponding members of struct net_device). Legacy "flags" are not provided,
567if userspace needs them (most likely only ethtool for backward compatibility),
568it can calculate their values from related feature bits itself.
569ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to
570provide all names when using verbose bitmap format), the other three use no
571mask (simple bit lists).
572
573
0980bfcd
MK
574FEATURES_SET
575============
576
577Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request.
578
579Request contents:
580
581 ==================================== ====== ==========================
582 ``ETHTOOL_A_FEATURES_HEADER`` nested request header
583 ``ETHTOOL_A_FEATURES_WANTED`` bitset requested features
584 ==================================== ====== ==========================
585
586Kernel response contents:
587
588 ==================================== ====== ==========================
589 ``ETHTOOL_A_FEATURES_HEADER`` nested reply header
590 ``ETHTOOL_A_FEATURES_WANTED`` bitset diff wanted vs. result
591 ``ETHTOOL_A_FEATURES_ACTIVE`` bitset diff old vs. new active
592 ==================================== ====== ==========================
593
594Request constains only one bitset which can be either value/mask pair (request
595to change specific feature bits and leave the rest) or only a value (request
596to set all features to specified set).
597
598As request is subject to netdev_change_features() sanity checks, optional
599kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request
600header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED``
601reports the difference between client request and actual result: mask consists
602of bits which differ between requested features and result (dev->features
603after the operation), value consists of values of these bits in the request
604(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE``
605reports the difference between old and new dev->features: mask consists of
606bits which have changed, values are their values in new dev->features (after
607the operation).
608
9c6451ef
MK
609``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features
610are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl
611request but also each time features are modified with netdev_update_features()
612or netdev_change_features().
613
0980bfcd 614
e16c3386
MK
615PRIVFLAGS_GET
616=============
617
618Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request.
619
620Request contents:
621
622 ==================================== ====== ==========================
623 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
624 ==================================== ====== ==========================
625
626Kernel response contents:
627
628 ==================================== ====== ==========================
629 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested reply header
630 ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
631 ==================================== ====== ==========================
632
633``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags.
634These flags are defined by driver, their number and names (and also meaning)
635are device dependent. For compact bitset format, names can be retrieved as
636``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested,
637response uses all private flags supported by the device as mask so that client
638gets the full information without having to fetch the string set with names.
639
640
f265d799
MK
641PRIVFLAGS_SET
642=============
643
644Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS``
645ioctl request.
646
647Request contents:
648
649 ==================================== ====== ==========================
650 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
651 ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
652 ==================================== ====== ==========================
653
654``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or
655modify only values of some of them.
656
657
e4a1717b
MK
658RINGS_GET
659=========
660
661Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request.
662
663Request contents:
664
665 ==================================== ====== ==========================
666 ``ETHTOOL_A_RINGS_HEADER`` nested request header
667 ==================================== ====== ==========================
668
669Kernel response contents:
670
671 ==================================== ====== ==========================
672 ``ETHTOOL_A_RINGS_HEADER`` nested reply header
673 ``ETHTOOL_A_RINGS_RX_MAX`` u32 max size of RX ring
674 ``ETHTOOL_A_RINGS_RX_MINI_MAX`` u32 max size of RX mini ring
675 ``ETHTOOL_A_RINGS_RX_JUMBO_MAX`` u32 max size of RX jumbo ring
676 ``ETHTOOL_A_RINGS_TX_MAX`` u32 max size of TX ring
677 ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
678 ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
679 ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
680 ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
681 ==================================== ====== ==========================
682
683
2fc2929e
MK
684RINGS_SET
685=========
686
687Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request.
688
689Request contents:
690
691 ==================================== ====== ==========================
692 ``ETHTOOL_A_RINGS_HEADER`` nested reply header
693 ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
694 ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
695 ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
696 ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
697 ==================================== ====== ==========================
698
699Kernel checks that requested ring sizes do not exceed limits reported by
700driver. Driver may impose additional constraints and may not suspport all
701attributes.
702
703
0c84979c
MK
704CHANNELS_GET
705============
706
707Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request.
708
709Request contents:
710
711 ==================================== ====== ==========================
712 ``ETHTOOL_A_CHANNELS_HEADER`` nested request header
713 ==================================== ====== ==========================
714
715Kernel response contents:
716
717 ===================================== ====== ==========================
718 ``ETHTOOL_A_CHANNELS_HEADER`` nested reply header
719 ``ETHTOOL_A_CHANNELS_RX_MAX`` u32 max receive channels
720 ``ETHTOOL_A_CHANNELS_TX_MAX`` u32 max transmit channels
721 ``ETHTOOL_A_CHANNELS_OTHER_MAX`` u32 max other channels
722 ``ETHTOOL_A_CHANNELS_COMBINED_MAX`` u32 max combined channels
723 ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
724 ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
725 ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
726 ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
727 ===================================== ====== ==========================
728
729
e19c591e
MK
730CHANNELS_SET
731============
732
733Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
734
735Request contents:
736
737 ===================================== ====== ==========================
738 ``ETHTOOL_A_CHANNELS_HEADER`` nested request header
739 ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
740 ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
741 ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
742 ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
743 ===================================== ====== ==========================
744
745Kernel checks that requested channel counts do not exceed limits reported by
746driver. Driver may impose additional constraints and may not suspport all
747attributes.
748
749
21727545
MK
750COALESCE_GET
751============
752
753Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request.
754
755Request contents:
756
757 ==================================== ====== ==========================
758 ``ETHTOOL_A_COALESCE_HEADER`` nested request header
759 ==================================== ====== ==========================
760
761Kernel response contents:
762
763 =========================================== ====== =======================
764 ``ETHTOOL_A_COALESCE_HEADER`` nested reply header
765 ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
766 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
767 ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
768 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
769 ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
770 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
771 ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
772 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
773 ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
774 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
775 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
776 ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
777 ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
778 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
779 ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
780 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
781 ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
782 ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
783 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
784 ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
785 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
786 ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
787 =========================================== ====== =======================
788
789Attributes are only included in reply if their value is not zero or the
790corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e.
791they are declared as supported by driver).
792
793
2b4a8990
MK
794Request translation
795===================
796
797The following table maps ioctl commands to netlink commands providing their
798functionality. Entries with "n/a" in right column are commands which do not
799have their netlink replacement yet.
800
801 =================================== =====================================
802 ioctl command netlink command
803 =================================== =====================================
459e0b81 804 ``ETHTOOL_GSET`` ``ETHTOOL_MSG_LINKINFO_GET``
f625aa9b 805 ``ETHTOOL_MSG_LINKMODES_GET``
a53f3d41 806 ``ETHTOOL_SSET`` ``ETHTOOL_MSG_LINKINFO_SET``
bfbcfe20 807 ``ETHTOOL_MSG_LINKMODES_SET``
2b4a8990
MK
808 ``ETHTOOL_GDRVINFO`` n/a
809 ``ETHTOOL_GREGS`` n/a
51ea22b0 810 ``ETHTOOL_GWOL`` ``ETHTOOL_MSG_WOL_GET``
8d425b19 811 ``ETHTOOL_SWOL`` ``ETHTOOL_MSG_WOL_SET``
6a94b8cc 812 ``ETHTOOL_GMSGLVL`` ``ETHTOOL_MSG_DEBUG_GET``
e54d04e3 813 ``ETHTOOL_SMSGLVL`` ``ETHTOOL_MSG_DEBUG_SET``
2b4a8990 814 ``ETHTOOL_NWAY_RST`` n/a
3d2b847f 815 ``ETHTOOL_GLINK`` ``ETHTOOL_MSG_LINKSTATE_GET``
2b4a8990
MK
816 ``ETHTOOL_GEEPROM`` n/a
817 ``ETHTOOL_SEEPROM`` n/a
21727545 818 ``ETHTOOL_GCOALESCE`` ``ETHTOOL_MSG_COALESCE_GET``
2b4a8990 819 ``ETHTOOL_SCOALESCE`` n/a
e4a1717b 820 ``ETHTOOL_GRINGPARAM`` ``ETHTOOL_MSG_RINGS_GET``
2fc2929e 821 ``ETHTOOL_SRINGPARAM`` ``ETHTOOL_MSG_RINGS_SET``
2b4a8990
MK
822 ``ETHTOOL_GPAUSEPARAM`` n/a
823 ``ETHTOOL_SPAUSEPARAM`` n/a
0524399d 824 ``ETHTOOL_GRXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 825 ``ETHTOOL_SRXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
0524399d 826 ``ETHTOOL_GTXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 827 ``ETHTOOL_STXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
0524399d 828 ``ETHTOOL_GSG`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 829 ``ETHTOOL_SSG`` ``ETHTOOL_MSG_FEATURES_SET``
2b4a8990 830 ``ETHTOOL_TEST`` n/a
71921690 831 ``ETHTOOL_GSTRINGS`` ``ETHTOOL_MSG_STRSET_GET``
2b4a8990
MK
832 ``ETHTOOL_PHYS_ID`` n/a
833 ``ETHTOOL_GSTATS`` n/a
0524399d 834 ``ETHTOOL_GTSO`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 835 ``ETHTOOL_STSO`` ``ETHTOOL_MSG_FEATURES_SET``
2b4a8990 836 ``ETHTOOL_GPERMADDR`` rtnetlink ``RTM_GETLINK``
0524399d 837 ``ETHTOOL_GUFO`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 838 ``ETHTOOL_SUFO`` ``ETHTOOL_MSG_FEATURES_SET``
0524399d 839 ``ETHTOOL_GGSO`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 840 ``ETHTOOL_SGSO`` ``ETHTOOL_MSG_FEATURES_SET``
0524399d 841 ``ETHTOOL_GFLAGS`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 842 ``ETHTOOL_SFLAGS`` ``ETHTOOL_MSG_FEATURES_SET``
e16c3386 843 ``ETHTOOL_GPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_GET``
f265d799 844 ``ETHTOOL_SPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_SET``
2b4a8990
MK
845 ``ETHTOOL_GRXFH`` n/a
846 ``ETHTOOL_SRXFH`` n/a
0524399d 847 ``ETHTOOL_GGRO`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 848 ``ETHTOOL_SGRO`` ``ETHTOOL_MSG_FEATURES_SET``
2b4a8990
MK
849 ``ETHTOOL_GRXRINGS`` n/a
850 ``ETHTOOL_GRXCLSRLCNT`` n/a
851 ``ETHTOOL_GRXCLSRULE`` n/a
852 ``ETHTOOL_GRXCLSRLALL`` n/a
853 ``ETHTOOL_SRXCLSRLDEL`` n/a
854 ``ETHTOOL_SRXCLSRLINS`` n/a
855 ``ETHTOOL_FLASHDEV`` n/a
856 ``ETHTOOL_RESET`` n/a
857 ``ETHTOOL_SRXNTUPLE`` n/a
858 ``ETHTOOL_GRXNTUPLE`` n/a
71921690 859 ``ETHTOOL_GSSET_INFO`` ``ETHTOOL_MSG_STRSET_GET``
2b4a8990
MK
860 ``ETHTOOL_GRXFHINDIR`` n/a
861 ``ETHTOOL_SRXFHINDIR`` n/a
0524399d 862 ``ETHTOOL_GFEATURES`` ``ETHTOOL_MSG_FEATURES_GET``
0980bfcd 863 ``ETHTOOL_SFEATURES`` ``ETHTOOL_MSG_FEATURES_SET``
0c84979c 864 ``ETHTOOL_GCHANNELS`` ``ETHTOOL_MSG_CHANNELS_GET``
e19c591e 865 ``ETHTOOL_SCHANNELS`` ``ETHTOOL_MSG_CHANNELS_SET``
2b4a8990
MK
866 ``ETHTOOL_SET_DUMP`` n/a
867 ``ETHTOOL_GET_DUMP_FLAG`` n/a
868 ``ETHTOOL_GET_DUMP_DATA`` n/a
869 ``ETHTOOL_GET_TS_INFO`` n/a
870 ``ETHTOOL_GMODULEINFO`` n/a
871 ``ETHTOOL_GMODULEEEPROM`` n/a
872 ``ETHTOOL_GEEE`` n/a
873 ``ETHTOOL_SEEE`` n/a
874 ``ETHTOOL_GRSSH`` n/a
875 ``ETHTOOL_SRSSH`` n/a
876 ``ETHTOOL_GTUNABLE`` n/a
877 ``ETHTOOL_STUNABLE`` n/a
878 ``ETHTOOL_GPHYSTATS`` n/a
879 ``ETHTOOL_PERQUEUE`` n/a
459e0b81 880 ``ETHTOOL_GLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_GET``
f625aa9b 881 ``ETHTOOL_MSG_LINKMODES_GET``
a53f3d41 882 ``ETHTOOL_SLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_SET``
bfbcfe20 883 ``ETHTOOL_MSG_LINKMODES_SET``
2b4a8990
MK
884 ``ETHTOOL_PHY_GTUNABLE`` n/a
885 ``ETHTOOL_PHY_STUNABLE`` n/a
886 ``ETHTOOL_GFECPARAM`` n/a
887 ``ETHTOOL_SFECPARAM`` n/a
888 =================================== =====================================