blob: 856c4b5bcd6a075f559c6faabcd9a98acb8b3ac4 [file] [log] [blame]
Michal Kubecek2b4a8992019-12-27 15:55:18 +01001=============================
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
Michal Kubecek10b518d2019-12-27 15:55:28 +010079Bit 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
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100163List 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
Michal Kubecek71921692019-12-27 15:55:43 +0100179Userspace to kernel:
180
181 ===================================== ================================
182 ``ETHTOOL_MSG_STRSET_GET`` get string set
Michal Kubecek459e0b82019-12-27 15:55:48 +0100183 ``ETHTOOL_MSG_LINKINFO_GET`` get link settings
Michal Kubeceka53f3d42019-12-27 15:55:53 +0100184 ``ETHTOOL_MSG_LINKINFO_SET`` set link settings
Michal Kubecekf625aa92019-12-27 15:56:08 +0100185 ``ETHTOOL_MSG_LINKMODES_GET`` get link modes info
Michal Kubecekbfbcfe22019-12-27 15:56:13 +0100186 ``ETHTOOL_MSG_LINKMODES_SET`` set link modes info
Michal Kubecek3d2b8472019-12-27 15:56:23 +0100187 ``ETHTOOL_MSG_LINKSTATE_GET`` get link state
Michal Kubecek6a94b8c2020-01-26 23:11:04 +0100188 ``ETHTOOL_MSG_DEBUG_GET`` get debugging settings
Michal Kubeceke54d04e2020-01-26 23:11:07 +0100189 ``ETHTOOL_MSG_DEBUG_SET`` set debugging settings
Michal Kubecek51ea22b2020-01-26 23:11:13 +0100190 ``ETHTOOL_MSG_WOL_GET`` get wake-on-lan settings
Michal Kubecek8d425b12020-01-26 23:11:16 +0100191 ``ETHTOOL_MSG_WOL_SET`` set wake-on-lan settings
Michal Kubecek05243992020-03-12 21:07:48 +0100192 ``ETHTOOL_MSG_FEATURES_GET`` get device features
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100193 ``ETHTOOL_MSG_FEATURES_SET`` set device features
Michal Kubeceke16c3382020-03-12 21:08:08 +0100194 ``ETHTOOL_MSG_PRIVFLAGS_GET`` get private flags
Michal Kubecekf265d792020-03-12 21:08:13 +0100195 ``ETHTOOL_MSG_PRIVFLAGS_SET`` set private flags
Michal Kubeceke4a17172020-03-12 21:08:23 +0100196 ``ETHTOOL_MSG_RINGS_GET`` get ring sizes
Michal Kubecek2fc29292020-03-12 21:08:28 +0100197 ``ETHTOOL_MSG_RINGS_SET`` set ring sizes
Michal Kubecek0c849792020-03-12 21:08:38 +0100198 ``ETHTOOL_MSG_CHANNELS_GET`` get channel counts
Michal Kubeceke19c5912020-03-12 21:08:43 +0100199 ``ETHTOOL_MSG_CHANNELS_SET`` set channel counts
Michal Kubecek21727542020-03-28 00:01:08 +0100200 ``ETHTOOL_MSG_COALESCE_GET`` get coalescing parameters
Michal Kubecek98814182020-03-28 00:01:13 +0100201 ``ETHTOOL_MSG_COALESCE_SET`` set coalescing parameters
Michal Kubecek7f59fb32020-03-28 00:01:23 +0100202 ``ETHTOOL_MSG_PAUSE_GET`` get pause parameters
Michal Kubecek3ab87992020-03-28 00:01:28 +0100203 ``ETHTOOL_MSG_PAUSE_SET`` set pause parameters
Michal Kubecekb7eeefe2020-03-28 00:01:38 +0100204 ``ETHTOOL_MSG_EEE_GET`` get EEE settings
Michal Kubecekfd77be72020-03-28 00:01:43 +0100205 ``ETHTOOL_MSG_EEE_SET`` set EEE settings
Michal Kubecek71921692019-12-27 15:55:43 +0100206 ===================================== ================================
207
208Kernel to userspace:
209
Michal Kubecek67bffa72020-01-26 23:11:19 +0100210 ===================================== =================================
Michal Kubecek71921692019-12-27 15:55:43 +0100211 ``ETHTOOL_MSG_STRSET_GET_REPLY`` string set contents
Michal Kubecek459e0b82019-12-27 15:55:48 +0100212 ``ETHTOOL_MSG_LINKINFO_GET_REPLY`` link settings
Michal Kubecek73286732019-12-27 15:56:03 +0100213 ``ETHTOOL_MSG_LINKINFO_NTF`` link settings notification
Michal Kubecekf625aa92019-12-27 15:56:08 +0100214 ``ETHTOOL_MSG_LINKMODES_GET_REPLY`` link modes info
Michal Kubecek1b1b1842019-12-27 15:56:18 +0100215 ``ETHTOOL_MSG_LINKMODES_NTF`` link modes notification
Michal Kubecek3d2b8472019-12-27 15:56:23 +0100216 ``ETHTOOL_MSG_LINKSTATE_GET_REPLY`` link state info
Michal Kubecek6a94b8c2020-01-26 23:11:04 +0100217 ``ETHTOOL_MSG_DEBUG_GET_REPLY`` debugging settings
Michal Kubecek0bda7af2020-01-26 23:11:10 +0100218 ``ETHTOOL_MSG_DEBUG_NTF`` debugging settings notification
Michal Kubecek51ea22b2020-01-26 23:11:13 +0100219 ``ETHTOOL_MSG_WOL_GET_REPLY`` wake-on-lan settings
Michal Kubecek67bffa72020-01-26 23:11:19 +0100220 ``ETHTOOL_MSG_WOL_NTF`` wake-on-lan settings notification
Michal Kubecek05243992020-03-12 21:07:48 +0100221 ``ETHTOOL_MSG_FEATURES_GET_REPLY`` device features
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100222 ``ETHTOOL_MSG_FEATURES_SET_REPLY`` optional reply to FEATURES_SET
Michal Kubecek9c6451e2020-03-12 21:08:03 +0100223 ``ETHTOOL_MSG_FEATURES_NTF`` netdev features notification
Michal Kubeceke16c3382020-03-12 21:08:08 +0100224 ``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY`` private flags
Michal Kubecekf265d792020-03-12 21:08:13 +0100225 ``ETHTOOL_MSG_PRIVFLAGS_NTF`` private flags
Michal Kubeceke4a17172020-03-12 21:08:23 +0100226 ``ETHTOOL_MSG_RINGS_GET_REPLY`` ring sizes
Michal Kubecekbc9d1c92020-03-12 21:08:33 +0100227 ``ETHTOOL_MSG_RINGS_NTF`` ring sizes
Michal Kubecek0c849792020-03-12 21:08:38 +0100228 ``ETHTOOL_MSG_CHANNELS_GET_REPLY`` channel counts
Michal Kubecek546379b2020-03-12 21:08:48 +0100229 ``ETHTOOL_MSG_CHANNELS_NTF`` channel counts
Michal Kubecek21727542020-03-28 00:01:08 +0100230 ``ETHTOOL_MSG_COALESCE_GET_REPLY`` coalescing parameters
Michal Kubecek0cf3eac2020-03-28 00:01:18 +0100231 ``ETHTOOL_MSG_COALESCE_NTF`` coalescing parameters
Michal Kubecek7f59fb32020-03-28 00:01:23 +0100232 ``ETHTOOL_MSG_PAUSE_GET_REPLY`` pause parameters
Michal Kubecekbf37faa2020-03-28 00:01:33 +0100233 ``ETHTOOL_MSG_PAUSE_NTF`` pause parameters
Michal Kubecekb7eeefe2020-03-28 00:01:38 +0100234 ``ETHTOOL_MSG_EEE_GET_REPLY`` EEE settings
Michal Kubecek67bffa72020-01-26 23:11:19 +0100235 ===================================== =================================
Michal Kubecek71921692019-12-27 15:55:43 +0100236
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100237``GET`` requests are sent by userspace applications to retrieve device
238information. They usually do not contain any message specific attributes.
239Kernel replies with corresponding "GET_REPLY" message. For most types, ``GET``
240request with ``NLM_F_DUMP`` and no device identification can be used to query
241the information for all devices supporting the request.
242
243If the data can be also modified, corresponding ``SET`` message with the same
244layout as corresponding ``GET_REPLY`` is used to request changes. Only
245attributes where a change is requested are included in such request (also, not
246all attributes may be changed). Replies to most ``SET`` request consist only
247of error code and extack; if kernel provides additional data, it is sent in
248the form of corresponding ``SET_REPLY`` message which can be suppressed by
249setting ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header.
250
251Data modification also triggers sending a ``NTF`` message with a notification.
252These usually bear only a subset of attributes which was affected by the
253change. The same notification is issued if the data is modified using other
254means (mostly ioctl ethtool interface). Unlike notifications from ethtool
255netlink code which are only sent if something actually changed, notifications
256triggered by ioctl interface may be sent even if the request did not actually
257change any data.
258
259``ACT`` messages request kernel (driver) to perform a specific action. If some
260information is reported by kernel (which can be suppressed by setting
261``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header), the reply takes form of
262an ``ACT_REPLY`` message. Performing an action also triggers a notification
263(``NTF`` message).
264
265Later sections describe the format and semantics of these messages.
266
267
Michal Kubecek71921692019-12-27 15:55:43 +0100268STRSET_GET
269==========
270
271Requests contents of a string set as provided by ioctl commands
272``ETHTOOL_GSSET_INFO`` and ``ETHTOOL_GSTRINGS.`` String sets are not user
273writeable so that the corresponding ``STRSET_SET`` message is only used in
274kernel replies. There are two types of string sets: global (independent of
275a device, e.g. device feature names) and device specific (e.g. device private
276flags).
277
278Request contents:
279
280 +---------------------------------------+--------+------------------------+
281 | ``ETHTOOL_A_STRSET_HEADER`` | nested | request header |
282 +---------------------------------------+--------+------------------------+
283 | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | string set to request |
284 +-+-------------------------------------+--------+------------------------+
285 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set |
286 +-+-+-----------------------------------+--------+------------------------+
287 | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id |
288 +-+-+-----------------------------------+--------+------------------------+
289
290Kernel response contents:
291
292 +---------------------------------------+--------+-----------------------+
293 | ``ETHTOOL_A_STRSET_HEADER`` | nested | reply header |
294 +---------------------------------------+--------+-----------------------+
295 | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | array of string sets |
296 +-+-------------------------------------+--------+-----------------------+
297 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set |
298 +-+-+-----------------------------------+--------+-----------------------+
299 | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id |
300 +-+-+-----------------------------------+--------+-----------------------+
301 | | | ``ETHTOOL_A_STRINGSET_COUNT`` | u32 | number of strings |
302 +-+-+-----------------------------------+--------+-----------------------+
303 | | | ``ETHTOOL_A_STRINGSET_STRINGS`` | nested | array of strings |
304 +-+-+-+---------------------------------+--------+-----------------------+
305 | | | | ``ETHTOOL_A_STRINGS_STRING+`` | nested | one string |
306 +-+-+-+-+-------------------------------+--------+-----------------------+
307 | | | | | ``ETHTOOL_A_STRING_INDEX`` | u32 | string index |
308 +-+-+-+-+-------------------------------+--------+-----------------------+
309 | | | | | ``ETHTOOL_A_STRING_VALUE`` | string | string value |
310 +-+-+-+-+-------------------------------+--------+-----------------------+
311 | ``ETHTOOL_A_STRSET_COUNTS_ONLY`` | flag | return only counts |
312 +---------------------------------------+--------+-----------------------+
313
314Device identification in request header is optional. Depending on its presence
315a and ``NLM_F_DUMP`` flag, there are three type of ``STRSET_GET`` requests:
316
317 - no ``NLM_F_DUMP,`` no device: get "global" stringsets
318 - no ``NLM_F_DUMP``, with device: get string sets related to the device
319 - ``NLM_F_DUMP``, no device: get device related string sets for all devices
320
321If there is no ``ETHTOOL_A_STRSET_STRINGSETS`` array, all string sets of
322requested type are returned, otherwise only those specified in the request.
323Flag ``ETHTOOL_A_STRSET_COUNTS_ONLY`` tells kernel to only return string
324counts of the sets, not the actual strings.
325
326
Michal Kubecek459e0b82019-12-27 15:55:48 +0100327LINKINFO_GET
328============
329
330Requests link settings as provided by ``ETHTOOL_GLINKSETTINGS`` except for
331link modes and autonegotiation related information. The request does not use
332any attributes.
333
334Request contents:
335
336 ==================================== ====== ==========================
337 ``ETHTOOL_A_LINKINFO_HEADER`` nested request header
338 ==================================== ====== ==========================
339
340Kernel response contents:
341
342 ==================================== ====== ==========================
343 ``ETHTOOL_A_LINKINFO_HEADER`` nested reply header
344 ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port
345 ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address
346 ``ETHTOOL_A_LINKINFO_TP_MDIX`` u8 MDI(-X) status
347 ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control
348 ``ETHTOOL_A_LINKINFO_TRANSCEIVER`` u8 transceiver
349 ==================================== ====== ==========================
350
351Attributes and their values have the same meaning as matching members of the
352corresponding ioctl structures.
353
354``LINKINFO_GET`` allows dump requests (kernel returns reply message for all
355devices supporting the request).
356
357
Michal Kubeceka53f3d42019-12-27 15:55:53 +0100358LINKINFO_SET
359============
360
361``LINKINFO_SET`` request allows setting some of the attributes reported by
362``LINKINFO_GET``.
363
364Request contents:
365
366 ==================================== ====== ==========================
367 ``ETHTOOL_A_LINKINFO_HEADER`` nested request header
368 ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port
369 ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address
370 ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control
371 ==================================== ====== ==========================
372
373MDI(-X) status and transceiver cannot be set, request with the corresponding
374attributes is rejected.
375
376
Michal Kubecekf625aa92019-12-27 15:56:08 +0100377LINKMODES_GET
378=============
379
380Requests link modes (supported, advertised and peer advertised) and related
381information (autonegotiation status, link speed and duplex) as provided by
382``ETHTOOL_GLINKSETTINGS``. The request does not use any attributes.
383
384Request contents:
385
386 ==================================== ====== ==========================
387 ``ETHTOOL_A_LINKMODES_HEADER`` nested request header
388 ==================================== ====== ==========================
389
390Kernel response contents:
391
392 ==================================== ====== ==========================
393 ``ETHTOOL_A_LINKMODES_HEADER`` nested reply header
394 ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status
395 ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes
396 ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes
397 ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s)
398 ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode
399 ==================================== ====== ==========================
400
401For ``ETHTOOL_A_LINKMODES_OURS``, value represents advertised modes and mask
402represents supported modes. ``ETHTOOL_A_LINKMODES_PEER`` in the reply is a bit
403list.
404
405``LINKMODES_GET`` allows dump requests (kernel returns reply messages for all
406devices supporting the request).
407
408
Michal Kubecekbfbcfe22019-12-27 15:56:13 +0100409LINKMODES_SET
410=============
411
412Request contents:
413
414 ==================================== ====== ==========================
415 ``ETHTOOL_A_LINKMODES_HEADER`` nested request header
416 ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status
417 ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes
418 ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes
419 ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s)
420 ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode
421 ==================================== ====== ==========================
422
423``ETHTOOL_A_LINKMODES_OURS`` bit set allows setting advertised link modes. If
424autonegotiation is on (either set now or kept from before), advertised modes
425are not changed (no ``ETHTOOL_A_LINKMODES_OURS`` attribute) and at least one
426of speed and duplex is specified, kernel adjusts advertised modes to all
427supported modes matching speed, duplex or both (whatever is specified). This
428autoselection is done on ethtool side with ioctl interface, netlink interface
429is supposed to allow requesting changes without knowing what exactly kernel
430supports.
431
432
Michal Kubecek3d2b8472019-12-27 15:56:23 +0100433LINKSTATE_GET
434=============
435
436Requests link state information. At the moment, only link up/down flag (as
437provided by ``ETHTOOL_GLINK`` ioctl command) is provided but some future
438extensions are planned (e.g. link down reason). This request does not have any
439attributes.
440
441Request contents:
442
443 ==================================== ====== ==========================
444 ``ETHTOOL_A_LINKSTATE_HEADER`` nested request header
445 ==================================== ====== ==========================
446
447Kernel response contents:
448
449 ==================================== ====== ==========================
450 ``ETHTOOL_A_LINKSTATE_HEADER`` nested reply header
451 ``ETHTOOL_A_LINKSTATE_LINK`` bool link state (up/down)
452 ==================================== ====== ==========================
453
454For most NIC drivers, the value of ``ETHTOOL_A_LINKSTATE_LINK`` returns
455carrier flag provided by ``netif_carrier_ok()`` but there are drivers which
456define their own handler.
457
458``LINKSTATE_GET`` allows dump requests (kernel returns reply messages for all
459devices supporting the request).
460
461
Michal Kubecek6a94b8c2020-01-26 23:11:04 +0100462DEBUG_GET
463=========
464
465Requests debugging settings of a device. At the moment, only message mask is
466provided.
467
468Request contents:
469
470 ==================================== ====== ==========================
471 ``ETHTOOL_A_DEBUG_HEADER`` nested request header
472 ==================================== ====== ==========================
473
474Kernel response contents:
475
476 ==================================== ====== ==========================
477 ``ETHTOOL_A_DEBUG_HEADER`` nested reply header
478 ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask
479 ==================================== ====== ==========================
480
481The message mask (``ETHTOOL_A_DEBUG_MSGMASK``) is equal to message level as
482provided by ``ETHTOOL_GMSGLVL`` and set by ``ETHTOOL_SMSGLVL`` in ioctl
483interface. While it is called message level there for historical reasons, most
484drivers and almost all newer drivers use it as a mask of enabled message
485classes (represented by ``NETIF_MSG_*`` constants); therefore netlink
486interface follows its actual use in practice.
487
488``DEBUG_GET`` allows dump requests (kernel returns reply messages for all
489devices supporting the request).
490
491
Michal Kubeceke54d04e2020-01-26 23:11:07 +0100492DEBUG_SET
493=========
494
495Set or update debugging settings of a device. At the moment, only message mask
496is supported.
497
498Request contents:
499
500 ==================================== ====== ==========================
501 ``ETHTOOL_A_DEBUG_HEADER`` nested request header
502 ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask
503 ==================================== ====== ==========================
504
505``ETHTOOL_A_DEBUG_MSGMASK`` bit set allows setting or modifying mask of
506enabled debugging message types for the device.
507
508
Michal Kubecek51ea22b2020-01-26 23:11:13 +0100509WOL_GET
510=======
511
512Query device wake-on-lan settings. Unlike most "GET" type requests,
513``ETHTOOL_MSG_WOL_GET`` requires (netns) ``CAP_NET_ADMIN`` privileges as it
514(potentially) provides SecureOn(tm) password which is confidential.
515
516Request contents:
517
518 ==================================== ====== ==========================
519 ``ETHTOOL_A_WOL_HEADER`` nested request header
520 ==================================== ====== ==========================
521
522Kernel response contents:
523
524 ==================================== ====== ==========================
525 ``ETHTOOL_A_WOL_HEADER`` nested reply header
526 ``ETHTOOL_A_WOL_MODES`` bitset mask of enabled WoL modes
527 ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password
528 ==================================== ====== ==========================
529
530In reply, ``ETHTOOL_A_WOL_MODES`` mask consists of modes supported by the
531device, value of modes which are enabled. ``ETHTOOL_A_WOL_SOPASS`` is only
532included in reply if ``WAKE_MAGICSECURE`` mode is supported.
533
534
Michal Kubecek8d425b12020-01-26 23:11:16 +0100535WOL_SET
536=======
537
538Set or update wake-on-lan settings.
539
540Request contents:
541
542 ==================================== ====== ==========================
543 ``ETHTOOL_A_WOL_HEADER`` nested request header
544 ``ETHTOOL_A_WOL_MODES`` bitset enabled WoL modes
545 ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password
546 ==================================== ====== ==========================
547
548``ETHTOOL_A_WOL_SOPASS`` is only allowed for devices supporting
549``WAKE_MAGICSECURE`` mode.
550
551
Michal Kubecek05243992020-03-12 21:07:48 +0100552FEATURES_GET
553============
554
555Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request.
556
557Request contents:
558
559 ==================================== ====== ==========================
560 ``ETHTOOL_A_FEATURES_HEADER`` nested request header
561 ==================================== ====== ==========================
562
563Kernel response contents:
564
565 ==================================== ====== ==========================
566 ``ETHTOOL_A_FEATURES_HEADER`` nested reply header
567 ``ETHTOOL_A_FEATURES_HW`` bitset dev->hw_features
568 ``ETHTOOL_A_FEATURES_WANTED`` bitset dev->wanted_features
569 ``ETHTOOL_A_FEATURES_ACTIVE`` bitset dev->features
570 ``ETHTOOL_A_FEATURES_NOCHANGE`` bitset NETIF_F_NEVER_CHANGE
571 ==================================== ====== ==========================
572
573Bitmaps in kernel response have the same meaning as bitmaps used in ioctl
574interference but attribute names are different (they are based on
575corresponding members of struct net_device). Legacy "flags" are not provided,
576if userspace needs them (most likely only ethtool for backward compatibility),
577it can calculate their values from related feature bits itself.
578ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to
579provide all names when using verbose bitmap format), the other three use no
580mask (simple bit lists).
581
582
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100583FEATURES_SET
584============
585
586Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request.
587
588Request contents:
589
590 ==================================== ====== ==========================
591 ``ETHTOOL_A_FEATURES_HEADER`` nested request header
592 ``ETHTOOL_A_FEATURES_WANTED`` bitset requested features
593 ==================================== ====== ==========================
594
595Kernel response contents:
596
597 ==================================== ====== ==========================
598 ``ETHTOOL_A_FEATURES_HEADER`` nested reply header
599 ``ETHTOOL_A_FEATURES_WANTED`` bitset diff wanted vs. result
600 ``ETHTOOL_A_FEATURES_ACTIVE`` bitset diff old vs. new active
601 ==================================== ====== ==========================
602
603Request constains only one bitset which can be either value/mask pair (request
604to change specific feature bits and leave the rest) or only a value (request
605to set all features to specified set).
606
607As request is subject to netdev_change_features() sanity checks, optional
608kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request
609header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED``
610reports the difference between client request and actual result: mask consists
611of bits which differ between requested features and result (dev->features
612after the operation), value consists of values of these bits in the request
613(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE``
614reports the difference between old and new dev->features: mask consists of
615bits which have changed, values are their values in new dev->features (after
616the operation).
617
Michal Kubecek9c6451e2020-03-12 21:08:03 +0100618``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features
619are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl
620request but also each time features are modified with netdev_update_features()
621or netdev_change_features().
622
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100623
Michal Kubeceke16c3382020-03-12 21:08:08 +0100624PRIVFLAGS_GET
625=============
626
627Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request.
628
629Request contents:
630
631 ==================================== ====== ==========================
632 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
633 ==================================== ====== ==========================
634
635Kernel response contents:
636
637 ==================================== ====== ==========================
638 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested reply header
639 ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
640 ==================================== ====== ==========================
641
642``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags.
643These flags are defined by driver, their number and names (and also meaning)
644are device dependent. For compact bitset format, names can be retrieved as
645``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested,
646response uses all private flags supported by the device as mask so that client
647gets the full information without having to fetch the string set with names.
648
649
Michal Kubecekf265d792020-03-12 21:08:13 +0100650PRIVFLAGS_SET
651=============
652
653Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS``
654ioctl request.
655
656Request contents:
657
658 ==================================== ====== ==========================
659 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header
660 ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags
661 ==================================== ====== ==========================
662
663``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or
664modify only values of some of them.
665
666
Michal Kubeceke4a17172020-03-12 21:08:23 +0100667RINGS_GET
668=========
669
670Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request.
671
672Request contents:
673
674 ==================================== ====== ==========================
675 ``ETHTOOL_A_RINGS_HEADER`` nested request header
676 ==================================== ====== ==========================
677
678Kernel response contents:
679
680 ==================================== ====== ==========================
681 ``ETHTOOL_A_RINGS_HEADER`` nested reply header
682 ``ETHTOOL_A_RINGS_RX_MAX`` u32 max size of RX ring
683 ``ETHTOOL_A_RINGS_RX_MINI_MAX`` u32 max size of RX mini ring
684 ``ETHTOOL_A_RINGS_RX_JUMBO_MAX`` u32 max size of RX jumbo ring
685 ``ETHTOOL_A_RINGS_TX_MAX`` u32 max size of TX ring
686 ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
687 ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
688 ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
689 ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
690 ==================================== ====== ==========================
691
692
Michal Kubecek2fc29292020-03-12 21:08:28 +0100693RINGS_SET
694=========
695
696Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request.
697
698Request contents:
699
700 ==================================== ====== ==========================
701 ``ETHTOOL_A_RINGS_HEADER`` nested reply header
702 ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring
703 ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring
704 ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring
705 ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring
706 ==================================== ====== ==========================
707
708Kernel checks that requested ring sizes do not exceed limits reported by
709driver. Driver may impose additional constraints and may not suspport all
710attributes.
711
712
Michal Kubecek0c849792020-03-12 21:08:38 +0100713CHANNELS_GET
714============
715
716Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request.
717
718Request contents:
719
720 ==================================== ====== ==========================
721 ``ETHTOOL_A_CHANNELS_HEADER`` nested request header
722 ==================================== ====== ==========================
723
724Kernel response contents:
725
726 ===================================== ====== ==========================
727 ``ETHTOOL_A_CHANNELS_HEADER`` nested reply header
728 ``ETHTOOL_A_CHANNELS_RX_MAX`` u32 max receive channels
729 ``ETHTOOL_A_CHANNELS_TX_MAX`` u32 max transmit channels
730 ``ETHTOOL_A_CHANNELS_OTHER_MAX`` u32 max other channels
731 ``ETHTOOL_A_CHANNELS_COMBINED_MAX`` u32 max combined channels
732 ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
733 ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
734 ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
735 ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
736 ===================================== ====== ==========================
737
738
Michal Kubeceke19c5912020-03-12 21:08:43 +0100739CHANNELS_SET
740============
741
742Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request.
743
744Request contents:
745
746 ===================================== ====== ==========================
747 ``ETHTOOL_A_CHANNELS_HEADER`` nested request header
748 ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count
749 ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count
750 ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count
751 ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count
752 ===================================== ====== ==========================
753
754Kernel checks that requested channel counts do not exceed limits reported by
755driver. Driver may impose additional constraints and may not suspport all
756attributes.
757
758
Michal Kubecek21727542020-03-28 00:01:08 +0100759COALESCE_GET
760============
761
762Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request.
763
764Request contents:
765
766 ==================================== ====== ==========================
767 ``ETHTOOL_A_COALESCE_HEADER`` nested request header
768 ==================================== ====== ==========================
769
770Kernel response contents:
771
772 =========================================== ====== =======================
773 ``ETHTOOL_A_COALESCE_HEADER`` nested reply header
774 ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
775 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
776 ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
777 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
778 ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
779 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
780 ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
781 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
782 ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
783 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
784 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
785 ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
786 ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
787 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
788 ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
789 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
790 ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
791 ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
792 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
793 ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
794 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
795 ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
796 =========================================== ====== =======================
797
798Attributes are only included in reply if their value is not zero or the
799corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e.
800they are declared as supported by driver).
801
802
Michal Kubecek98814182020-03-28 00:01:13 +0100803COALESCE_SET
804============
805
806Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request.
807
808Request contents:
809
810 =========================================== ====== =======================
811 ``ETHTOOL_A_COALESCE_HEADER`` nested request header
812 ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx
813 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx
814 ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ
815 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ
816 ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx
817 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx
818 ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ
819 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ
820 ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update
821 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce
822 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce
823 ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate
824 ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx
825 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx
826 ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx
827 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx
828 ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate
829 ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx
830 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx
831 ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx
832 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx
833 ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval
834 =========================================== ====== =======================
835
836Request is rejected if it attributes declared as unsupported by driver (i.e.
837such that the corresponding bit in ``ethtool_ops::supported_coalesce_params``
838is not set), regardless of their values. Driver may impose additional
839constraints on coalescing parameters and their values.
840
841
Michal Kubecek7f59fb32020-03-28 00:01:23 +0100842PAUSE_GET
843============
844
845Gets channel counts like ``ETHTOOL_GPAUSE`` ioctl request.
846
847Request contents:
848
849 ===================================== ====== ==========================
850 ``ETHTOOL_A_PAUSE_HEADER`` nested request header
851 ===================================== ====== ==========================
852
853Kernel response contents:
854
855 ===================================== ====== ==========================
856 ``ETHTOOL_A_PAUSE_HEADER`` nested request header
857 ``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation
858 ``ETHTOOL_A_PAUSE_RX`` bool receive pause frames
859 ``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames
860 ===================================== ====== ==========================
861
862
863PAUSE_SET
864============
865
866Sets pause parameters like ``ETHTOOL_GPAUSEPARAM`` ioctl request.
867
868Request contents:
869
870 ===================================== ====== ==========================
871 ``ETHTOOL_A_PAUSE_HEADER`` nested request header
872 ``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation
873 ``ETHTOOL_A_PAUSE_RX`` bool receive pause frames
874 ``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames
875 ===================================== ====== ==========================
876
877
Michal Kubecekb7eeefe2020-03-28 00:01:38 +0100878EEE_GET
879=======
880
881Gets channel counts like ``ETHTOOL_GEEE`` ioctl request.
882
883Request contents:
884
885 ===================================== ====== ==========================
886 ``ETHTOOL_A_EEE_HEADER`` nested request header
887 ===================================== ====== ==========================
888
889Kernel response contents:
890
891 ===================================== ====== ==========================
892 ``ETHTOOL_A_EEE_HEADER`` nested request header
893 ``ETHTOOL_A_EEE_MODES_OURS`` bool supported/advertised modes
894 ``ETHTOOL_A_EEE_MODES_PEER`` bool peer advertised link modes
895 ``ETHTOOL_A_EEE_ACTIVE`` bool EEE is actively used
896 ``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled
897 ``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled
898 ``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us)
899 ===================================== ====== ==========================
900
901In ``ETHTOOL_A_EEE_MODES_OURS``, mask consists of link modes for which EEE is
902enabled, value of link modes for which EEE is advertised. Link modes for which
903peer advertises EEE are listed in ``ETHTOOL_A_EEE_MODES_PEER`` (no mask). The
904netlink interface allows reporting EEE status for all link modes but only
905first 32 are provided by the ``ethtool_ops`` callback.
906
907
Michal Kubecekfd77be72020-03-28 00:01:43 +0100908EEE_SET
909=======
910
911Sets pause parameters like ``ETHTOOL_GEEEPARAM`` ioctl request.
912
913Request contents:
914
915 ===================================== ====== ==========================
916 ``ETHTOOL_A_EEE_HEADER`` nested request header
917 ``ETHTOOL_A_EEE_MODES_OURS`` bool advertised modes
918 ``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled
919 ``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled
920 ``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us)
921 ===================================== ====== ==========================
922
923``ETHTOOL_A_EEE_MODES_OURS`` is used to either list link modes to advertise
924EEE for (if there is no mask) or specify changes to the list (if there is
925a mask). The netlink interface allows reporting EEE status for all link modes
926but only first 32 can be set at the moment as that is what the ``ethtool_ops``
927callback supports.
928
929
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100930Request translation
931===================
932
933The following table maps ioctl commands to netlink commands providing their
934functionality. Entries with "n/a" in right column are commands which do not
935have their netlink replacement yet.
936
937 =================================== =====================================
938 ioctl command netlink command
939 =================================== =====================================
Michal Kubecek459e0b82019-12-27 15:55:48 +0100940 ``ETHTOOL_GSET`` ``ETHTOOL_MSG_LINKINFO_GET``
Michal Kubecekf625aa92019-12-27 15:56:08 +0100941 ``ETHTOOL_MSG_LINKMODES_GET``
Michal Kubeceka53f3d42019-12-27 15:55:53 +0100942 ``ETHTOOL_SSET`` ``ETHTOOL_MSG_LINKINFO_SET``
Michal Kubecekbfbcfe22019-12-27 15:56:13 +0100943 ``ETHTOOL_MSG_LINKMODES_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100944 ``ETHTOOL_GDRVINFO`` n/a
945 ``ETHTOOL_GREGS`` n/a
Michal Kubecek51ea22b2020-01-26 23:11:13 +0100946 ``ETHTOOL_GWOL`` ``ETHTOOL_MSG_WOL_GET``
Michal Kubecek8d425b12020-01-26 23:11:16 +0100947 ``ETHTOOL_SWOL`` ``ETHTOOL_MSG_WOL_SET``
Michal Kubecek6a94b8c2020-01-26 23:11:04 +0100948 ``ETHTOOL_GMSGLVL`` ``ETHTOOL_MSG_DEBUG_GET``
Michal Kubeceke54d04e2020-01-26 23:11:07 +0100949 ``ETHTOOL_SMSGLVL`` ``ETHTOOL_MSG_DEBUG_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100950 ``ETHTOOL_NWAY_RST`` n/a
Michal Kubecek3d2b8472019-12-27 15:56:23 +0100951 ``ETHTOOL_GLINK`` ``ETHTOOL_MSG_LINKSTATE_GET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100952 ``ETHTOOL_GEEPROM`` n/a
953 ``ETHTOOL_SEEPROM`` n/a
Michal Kubecek21727542020-03-28 00:01:08 +0100954 ``ETHTOOL_GCOALESCE`` ``ETHTOOL_MSG_COALESCE_GET``
Michal Kubecek98814182020-03-28 00:01:13 +0100955 ``ETHTOOL_SCOALESCE`` ``ETHTOOL_MSG_COALESCE_SET``
Michal Kubeceke4a17172020-03-12 21:08:23 +0100956 ``ETHTOOL_GRINGPARAM`` ``ETHTOOL_MSG_RINGS_GET``
Michal Kubecek2fc29292020-03-12 21:08:28 +0100957 ``ETHTOOL_SRINGPARAM`` ``ETHTOOL_MSG_RINGS_SET``
Michal Kubecek7f59fb32020-03-28 00:01:23 +0100958 ``ETHTOOL_GPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_GET``
Michal Kubecek3ab87992020-03-28 00:01:28 +0100959 ``ETHTOOL_SPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_SET``
Michal Kubecek05243992020-03-12 21:07:48 +0100960 ``ETHTOOL_GRXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100961 ``ETHTOOL_SRXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek05243992020-03-12 21:07:48 +0100962 ``ETHTOOL_GTXCSUM`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100963 ``ETHTOOL_STXCSUM`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek05243992020-03-12 21:07:48 +0100964 ``ETHTOOL_GSG`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100965 ``ETHTOOL_SSG`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100966 ``ETHTOOL_TEST`` n/a
Michal Kubecek71921692019-12-27 15:55:43 +0100967 ``ETHTOOL_GSTRINGS`` ``ETHTOOL_MSG_STRSET_GET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100968 ``ETHTOOL_PHYS_ID`` n/a
969 ``ETHTOOL_GSTATS`` n/a
Michal Kubecek05243992020-03-12 21:07:48 +0100970 ``ETHTOOL_GTSO`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100971 ``ETHTOOL_STSO`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100972 ``ETHTOOL_GPERMADDR`` rtnetlink ``RTM_GETLINK``
Michal Kubecek05243992020-03-12 21:07:48 +0100973 ``ETHTOOL_GUFO`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100974 ``ETHTOOL_SUFO`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek05243992020-03-12 21:07:48 +0100975 ``ETHTOOL_GGSO`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100976 ``ETHTOOL_SGSO`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek05243992020-03-12 21:07:48 +0100977 ``ETHTOOL_GFLAGS`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100978 ``ETHTOOL_SFLAGS`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubeceke16c3382020-03-12 21:08:08 +0100979 ``ETHTOOL_GPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_GET``
Michal Kubecekf265d792020-03-12 21:08:13 +0100980 ``ETHTOOL_SPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100981 ``ETHTOOL_GRXFH`` n/a
982 ``ETHTOOL_SRXFH`` n/a
Michal Kubecek05243992020-03-12 21:07:48 +0100983 ``ETHTOOL_GGRO`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100984 ``ETHTOOL_SGRO`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100985 ``ETHTOOL_GRXRINGS`` n/a
986 ``ETHTOOL_GRXCLSRLCNT`` n/a
987 ``ETHTOOL_GRXCLSRULE`` n/a
988 ``ETHTOOL_GRXCLSRLALL`` n/a
989 ``ETHTOOL_SRXCLSRLDEL`` n/a
990 ``ETHTOOL_SRXCLSRLINS`` n/a
991 ``ETHTOOL_FLASHDEV`` n/a
992 ``ETHTOOL_RESET`` n/a
993 ``ETHTOOL_SRXNTUPLE`` n/a
994 ``ETHTOOL_GRXNTUPLE`` n/a
Michal Kubecek71921692019-12-27 15:55:43 +0100995 ``ETHTOOL_GSSET_INFO`` ``ETHTOOL_MSG_STRSET_GET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +0100996 ``ETHTOOL_GRXFHINDIR`` n/a
997 ``ETHTOOL_SRXFHINDIR`` n/a
Michal Kubecek05243992020-03-12 21:07:48 +0100998 ``ETHTOOL_GFEATURES`` ``ETHTOOL_MSG_FEATURES_GET``
Michal Kubecek0980bfc2020-03-12 21:07:58 +0100999 ``ETHTOOL_SFEATURES`` ``ETHTOOL_MSG_FEATURES_SET``
Michal Kubecek0c849792020-03-12 21:08:38 +01001000 ``ETHTOOL_GCHANNELS`` ``ETHTOOL_MSG_CHANNELS_GET``
Michal Kubeceke19c5912020-03-12 21:08:43 +01001001 ``ETHTOOL_SCHANNELS`` ``ETHTOOL_MSG_CHANNELS_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +01001002 ``ETHTOOL_SET_DUMP`` n/a
1003 ``ETHTOOL_GET_DUMP_FLAG`` n/a
1004 ``ETHTOOL_GET_DUMP_DATA`` n/a
1005 ``ETHTOOL_GET_TS_INFO`` n/a
1006 ``ETHTOOL_GMODULEINFO`` n/a
1007 ``ETHTOOL_GMODULEEEPROM`` n/a
Michal Kubecekb7eeefe2020-03-28 00:01:38 +01001008 ``ETHTOOL_GEEE`` ``ETHTOOL_MSG_EEE_GET``
Michal Kubecekfd77be72020-03-28 00:01:43 +01001009 ``ETHTOOL_SEEE`` ``ETHTOOL_MSG_EEE_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +01001010 ``ETHTOOL_GRSSH`` n/a
1011 ``ETHTOOL_SRSSH`` n/a
1012 ``ETHTOOL_GTUNABLE`` n/a
1013 ``ETHTOOL_STUNABLE`` n/a
1014 ``ETHTOOL_GPHYSTATS`` n/a
1015 ``ETHTOOL_PERQUEUE`` n/a
Michal Kubecek459e0b82019-12-27 15:55:48 +01001016 ``ETHTOOL_GLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_GET``
Michal Kubecekf625aa92019-12-27 15:56:08 +01001017 ``ETHTOOL_MSG_LINKMODES_GET``
Michal Kubeceka53f3d42019-12-27 15:55:53 +01001018 ``ETHTOOL_SLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_SET``
Michal Kubecekbfbcfe22019-12-27 15:56:13 +01001019 ``ETHTOOL_MSG_LINKMODES_SET``
Michal Kubecek2b4a8992019-12-27 15:55:18 +01001020 ``ETHTOOL_PHY_GTUNABLE`` n/a
1021 ``ETHTOOL_PHY_STUNABLE`` n/a
1022 ``ETHTOOL_GFECPARAM`` n/a
1023 ``ETHTOOL_SFECPARAM`` n/a
1024 =================================== =====================================