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