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 44Attributes that need to be filled-in by device drivers and that are dumped to 45user space based on whether they are valid or not should not use zero as a 46valid value. This avoids the need to explicitly signal the validity of the 47attribute in the device driver API. 48 49 50Request header 51============== 52 53Each request or reply message contains a nested attribute with common header. 54Structure of this header is 55 56 ============================== ====== ============================= 57 ``ETHTOOL_A_HEADER_DEV_INDEX`` u32 device ifindex 58 ``ETHTOOL_A_HEADER_DEV_NAME`` string device name 59 ``ETHTOOL_A_HEADER_FLAGS`` u32 flags common for all requests 60 ============================== ====== ============================= 61 62``ETHTOOL_A_HEADER_DEV_INDEX`` and ``ETHTOOL_A_HEADER_DEV_NAME`` identify the 63device message relates to. One of them is sufficient in requests, if both are 64used, they must identify the same device. Some requests, e.g. global string 65sets, do not require device identification. Most ``GET`` requests also allow 66dump requests without device identification to query the same information for 67all devices providing it (each device in a separate message). 68 69``ETHTOOL_A_HEADER_FLAGS`` is a bitmap of request flags common for all request 70types. The interpretation of these flags is the same for all request types but 71the flags may not apply to requests. Recognized flags are: 72 73 ================================= =================================== 74 ``ETHTOOL_FLAG_COMPACT_BITSETS`` use compact format bitsets in reply 75 ``ETHTOOL_FLAG_OMIT_REPLY`` omit optional reply (_SET and _ACT) 76 ``ETHTOOL_FLAG_STATS`` include optional device statistics 77 ================================= =================================== 78 79New request flags should follow the general idea that if the flag is not set, 80the behaviour is backward compatible, i.e. requests from old clients not aware 81of the flag should be interpreted the way the client expects. A client must 82not set flags it does not understand. 83 84 85Bit sets 86======== 87 88For short bitmaps of (reasonably) fixed length, standard ``NLA_BITFIELD32`` 89type is used. For arbitrary length bitmaps, ethtool netlink uses a nested 90attribute with contents of one of two forms: compact (two binary bitmaps 91representing bit values and mask of affected bits) and bit-by-bit (list of 92bits identified by either index or name). 93 94Verbose (bit-by-bit) bitsets allow sending symbolic names for bits together 95with their values which saves a round trip (when the bitset is passed in a 96request) or at least a second request (when the bitset is in a reply). This is 97useful for one shot applications like traditional ethtool command. On the 98other hand, long running applications like ethtool monitor (displaying 99notifications) or network management daemons may prefer fetching the names 100only once and using compact form to save message size. Notifications from 101ethtool netlink interface always use compact form for bitsets. 102 103A bitset can represent either a value/mask pair (``ETHTOOL_A_BITSET_NOMASK`` 104not set) or a single bitmap (``ETHTOOL_A_BITSET_NOMASK`` set). In requests 105modifying a bitmap, the former changes the bit set in mask to values set in 106value and preserves the rest; the latter sets the bits set in the bitmap and 107clears the rest. 108 109Compact form: nested (bitset) atrribute contents: 110 111 ============================ ====== ============================ 112 ``ETHTOOL_A_BITSET_NOMASK`` flag no mask, only a list 113 ``ETHTOOL_A_BITSET_SIZE`` u32 number of significant bits 114 ``ETHTOOL_A_BITSET_VALUE`` binary bitmap of bit values 115 ``ETHTOOL_A_BITSET_MASK`` binary bitmap of valid bits 116 ============================ ====== ============================ 117 118Value and mask must have length at least ``ETHTOOL_A_BITSET_SIZE`` bits 119rounded up to a multiple of 32 bits. They consist of 32-bit words in host byte 120order, words ordered from least significant to most significant (i.e. the same 121way as bitmaps are passed with ioctl interface). 122 123For compact form, ``ETHTOOL_A_BITSET_SIZE`` and ``ETHTOOL_A_BITSET_VALUE`` are 124mandatory. ``ETHTOOL_A_BITSET_MASK`` attribute is mandatory if 125``ETHTOOL_A_BITSET_NOMASK`` is not set (bitset represents a value/mask pair); 126if ``ETHTOOL_A_BITSET_NOMASK`` is not set, ``ETHTOOL_A_BITSET_MASK`` is not 127allowed (bitset represents a single bitmap. 128 129Kernel bit set length may differ from userspace length if older application is 130used on newer kernel or vice versa. If userspace bitmap is longer, an error is 131issued only if the request actually tries to set values of some bits not 132recognized by kernel. 133 134Bit-by-bit form: nested (bitset) attribute contents: 135 136 +------------------------------------+--------+-----------------------------+ 137 | ``ETHTOOL_A_BITSET_NOMASK`` | flag | no mask, only a list | 138 +------------------------------------+--------+-----------------------------+ 139 | ``ETHTOOL_A_BITSET_SIZE`` | u32 | number of significant bits | 140 +------------------------------------+--------+-----------------------------+ 141 | ``ETHTOOL_A_BITSET_BITS`` | nested | array of bits | 142 +-+----------------------------------+--------+-----------------------------+ 143 | | ``ETHTOOL_A_BITSET_BITS_BIT+`` | nested | one bit | 144 +-+-+--------------------------------+--------+-----------------------------+ 145 | | | ``ETHTOOL_A_BITSET_BIT_INDEX`` | u32 | bit index (0 for LSB) | 146 +-+-+--------------------------------+--------+-----------------------------+ 147 | | | ``ETHTOOL_A_BITSET_BIT_NAME`` | string | bit name | 148 +-+-+--------------------------------+--------+-----------------------------+ 149 | | | ``ETHTOOL_A_BITSET_BIT_VALUE`` | flag | present if bit is set | 150 +-+-+--------------------------------+--------+-----------------------------+ 151 152Bit size is optional for bit-by-bit form. ``ETHTOOL_A_BITSET_BITS`` nest can 153only contain ``ETHTOOL_A_BITSET_BITS_BIT`` attributes but there can be an 154arbitrary number of them. A bit may be identified by its index or by its 155name. When used in requests, listed bits are set to 0 or 1 according to 156``ETHTOOL_A_BITSET_BIT_VALUE``, the rest is preserved. A request fails if 157index exceeds kernel bit length or if name is not recognized. 158 159When ``ETHTOOL_A_BITSET_NOMASK`` flag is present, bitset is interpreted as 160a simple bitmap. ``ETHTOOL_A_BITSET_BIT_VALUE`` attributes are not used in 161such case. Such bitset represents a bitmap with listed bits set and the rest 162zero. 163 164In requests, application can use either form. Form used by kernel in reply is 165determined by ``ETHTOOL_FLAG_COMPACT_BITSETS`` flag in flags field of request 166header. Semantics of value and mask depends on the attribute. 167 168 169List of message types 170===================== 171 172All constants identifying message types use ``ETHTOOL_CMD_`` prefix and suffix 173according to message purpose: 174 175 ============== ====================================== 176 ``_GET`` userspace request to retrieve data 177 ``_SET`` userspace request to set data 178 ``_ACT`` userspace request to perform an action 179 ``_GET_REPLY`` kernel reply to a ``GET`` request 180 ``_SET_REPLY`` kernel reply to a ``SET`` request 181 ``_ACT_REPLY`` kernel reply to an ``ACT`` request 182 ``_NTF`` kernel notification 183 ============== ====================================== 184 185Userspace to kernel: 186 187 ===================================== ================================= 188 ``ETHTOOL_MSG_STRSET_GET`` get string set 189 ``ETHTOOL_MSG_LINKINFO_GET`` get link settings 190 ``ETHTOOL_MSG_LINKINFO_SET`` set link settings 191 ``ETHTOOL_MSG_LINKMODES_GET`` get link modes info 192 ``ETHTOOL_MSG_LINKMODES_SET`` set link modes info 193 ``ETHTOOL_MSG_LINKSTATE_GET`` get link state 194 ``ETHTOOL_MSG_DEBUG_GET`` get debugging settings 195 ``ETHTOOL_MSG_DEBUG_SET`` set debugging settings 196 ``ETHTOOL_MSG_WOL_GET`` get wake-on-lan settings 197 ``ETHTOOL_MSG_WOL_SET`` set wake-on-lan settings 198 ``ETHTOOL_MSG_FEATURES_GET`` get device features 199 ``ETHTOOL_MSG_FEATURES_SET`` set device features 200 ``ETHTOOL_MSG_PRIVFLAGS_GET`` get private flags 201 ``ETHTOOL_MSG_PRIVFLAGS_SET`` set private flags 202 ``ETHTOOL_MSG_RINGS_GET`` get ring sizes 203 ``ETHTOOL_MSG_RINGS_SET`` set ring sizes 204 ``ETHTOOL_MSG_CHANNELS_GET`` get channel counts 205 ``ETHTOOL_MSG_CHANNELS_SET`` set channel counts 206 ``ETHTOOL_MSG_COALESCE_GET`` get coalescing parameters 207 ``ETHTOOL_MSG_COALESCE_SET`` set coalescing parameters 208 ``ETHTOOL_MSG_PAUSE_GET`` get pause parameters 209 ``ETHTOOL_MSG_PAUSE_SET`` set pause parameters 210 ``ETHTOOL_MSG_EEE_GET`` get EEE settings 211 ``ETHTOOL_MSG_EEE_SET`` set EEE settings 212 ``ETHTOOL_MSG_TSINFO_GET`` get timestamping info 213 ``ETHTOOL_MSG_CABLE_TEST_ACT`` action start cable test 214 ``ETHTOOL_MSG_CABLE_TEST_TDR_ACT`` action start raw TDR cable test 215 ``ETHTOOL_MSG_TUNNEL_INFO_GET`` get tunnel offload info 216 ``ETHTOOL_MSG_FEC_GET`` get FEC settings 217 ``ETHTOOL_MSG_FEC_SET`` set FEC settings 218 ``ETHTOOL_MSG_MODULE_EEPROM_GET`` read SFP module EEPROM 219 ``ETHTOOL_MSG_STATS_GET`` get standard statistics 220 ``ETHTOOL_MSG_PHC_VCLOCKS_GET`` get PHC virtual clocks info 221 ``ETHTOOL_MSG_MODULE_SET`` set transceiver module parameters 222 ``ETHTOOL_MSG_MODULE_GET`` get transceiver module parameters 223 ``ETHTOOL_MSG_PSE_SET`` set PSE parameters 224 ``ETHTOOL_MSG_PSE_GET`` get PSE parameters 225 ``ETHTOOL_MSG_RSS_GET`` get RSS settings 226 ===================================== ================================= 227 228Kernel to userspace: 229 230 ======================================== ================================= 231 ``ETHTOOL_MSG_STRSET_GET_REPLY`` string set contents 232 ``ETHTOOL_MSG_LINKINFO_GET_REPLY`` link settings 233 ``ETHTOOL_MSG_LINKINFO_NTF`` link settings notification 234 ``ETHTOOL_MSG_LINKMODES_GET_REPLY`` link modes info 235 ``ETHTOOL_MSG_LINKMODES_NTF`` link modes notification 236 ``ETHTOOL_MSG_LINKSTATE_GET_REPLY`` link state info 237 ``ETHTOOL_MSG_DEBUG_GET_REPLY`` debugging settings 238 ``ETHTOOL_MSG_DEBUG_NTF`` debugging settings notification 239 ``ETHTOOL_MSG_WOL_GET_REPLY`` wake-on-lan settings 240 ``ETHTOOL_MSG_WOL_NTF`` wake-on-lan settings notification 241 ``ETHTOOL_MSG_FEATURES_GET_REPLY`` device features 242 ``ETHTOOL_MSG_FEATURES_SET_REPLY`` optional reply to FEATURES_SET 243 ``ETHTOOL_MSG_FEATURES_NTF`` netdev features notification 244 ``ETHTOOL_MSG_PRIVFLAGS_GET_REPLY`` private flags 245 ``ETHTOOL_MSG_PRIVFLAGS_NTF`` private flags 246 ``ETHTOOL_MSG_RINGS_GET_REPLY`` ring sizes 247 ``ETHTOOL_MSG_RINGS_NTF`` ring sizes 248 ``ETHTOOL_MSG_CHANNELS_GET_REPLY`` channel counts 249 ``ETHTOOL_MSG_CHANNELS_NTF`` channel counts 250 ``ETHTOOL_MSG_COALESCE_GET_REPLY`` coalescing parameters 251 ``ETHTOOL_MSG_COALESCE_NTF`` coalescing parameters 252 ``ETHTOOL_MSG_PAUSE_GET_REPLY`` pause parameters 253 ``ETHTOOL_MSG_PAUSE_NTF`` pause parameters 254 ``ETHTOOL_MSG_EEE_GET_REPLY`` EEE settings 255 ``ETHTOOL_MSG_EEE_NTF`` EEE settings 256 ``ETHTOOL_MSG_TSINFO_GET_REPLY`` timestamping info 257 ``ETHTOOL_MSG_CABLE_TEST_NTF`` Cable test results 258 ``ETHTOOL_MSG_CABLE_TEST_TDR_NTF`` Cable test TDR results 259 ``ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY`` tunnel offload info 260 ``ETHTOOL_MSG_FEC_GET_REPLY`` FEC settings 261 ``ETHTOOL_MSG_FEC_NTF`` FEC settings 262 ``ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY`` read SFP module EEPROM 263 ``ETHTOOL_MSG_STATS_GET_REPLY`` standard statistics 264 ``ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY`` PHC virtual clocks info 265 ``ETHTOOL_MSG_MODULE_GET_REPLY`` transceiver module parameters 266 ``ETHTOOL_MSG_PSE_GET_REPLY`` PSE parameters 267 ``ETHTOOL_MSG_RSS_GET_REPLY`` RSS settings 268 ======================================== ================================= 269 270``GET`` requests are sent by userspace applications to retrieve device 271information. They usually do not contain any message specific attributes. 272Kernel replies with corresponding "GET_REPLY" message. For most types, ``GET`` 273request with ``NLM_F_DUMP`` and no device identification can be used to query 274the information for all devices supporting the request. 275 276If the data can be also modified, corresponding ``SET`` message with the same 277layout as corresponding ``GET_REPLY`` is used to request changes. Only 278attributes where a change is requested are included in such request (also, not 279all attributes may be changed). Replies to most ``SET`` request consist only 280of error code and extack; if kernel provides additional data, it is sent in 281the form of corresponding ``SET_REPLY`` message which can be suppressed by 282setting ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header. 283 284Data modification also triggers sending a ``NTF`` message with a notification. 285These usually bear only a subset of attributes which was affected by the 286change. The same notification is issued if the data is modified using other 287means (mostly ioctl ethtool interface). Unlike notifications from ethtool 288netlink code which are only sent if something actually changed, notifications 289triggered by ioctl interface may be sent even if the request did not actually 290change any data. 291 292``ACT`` messages request kernel (driver) to perform a specific action. If some 293information is reported by kernel (which can be suppressed by setting 294``ETHTOOL_FLAG_OMIT_REPLY`` flag in request header), the reply takes form of 295an ``ACT_REPLY`` message. Performing an action also triggers a notification 296(``NTF`` message). 297 298Later sections describe the format and semantics of these messages. 299 300 301STRSET_GET 302========== 303 304Requests contents of a string set as provided by ioctl commands 305``ETHTOOL_GSSET_INFO`` and ``ETHTOOL_GSTRINGS.`` String sets are not user 306writeable so that the corresponding ``STRSET_SET`` message is only used in 307kernel replies. There are two types of string sets: global (independent of 308a device, e.g. device feature names) and device specific (e.g. device private 309flags). 310 311Request contents: 312 313 +---------------------------------------+--------+------------------------+ 314 | ``ETHTOOL_A_STRSET_HEADER`` | nested | request header | 315 +---------------------------------------+--------+------------------------+ 316 | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | string set to request | 317 +-+-------------------------------------+--------+------------------------+ 318 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set | 319 +-+-+-----------------------------------+--------+------------------------+ 320 | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id | 321 +-+-+-----------------------------------+--------+------------------------+ 322 323Kernel response contents: 324 325 +---------------------------------------+--------+-----------------------+ 326 | ``ETHTOOL_A_STRSET_HEADER`` | nested | reply header | 327 +---------------------------------------+--------+-----------------------+ 328 | ``ETHTOOL_A_STRSET_STRINGSETS`` | nested | array of string sets | 329 +-+-------------------------------------+--------+-----------------------+ 330 | | ``ETHTOOL_A_STRINGSETS_STRINGSET+`` | nested | one string set | 331 +-+-+-----------------------------------+--------+-----------------------+ 332 | | | ``ETHTOOL_A_STRINGSET_ID`` | u32 | set id | 333 +-+-+-----------------------------------+--------+-----------------------+ 334 | | | ``ETHTOOL_A_STRINGSET_COUNT`` | u32 | number of strings | 335 +-+-+-----------------------------------+--------+-----------------------+ 336 | | | ``ETHTOOL_A_STRINGSET_STRINGS`` | nested | array of strings | 337 +-+-+-+---------------------------------+--------+-----------------------+ 338 | | | | ``ETHTOOL_A_STRINGS_STRING+`` | nested | one string | 339 +-+-+-+-+-------------------------------+--------+-----------------------+ 340 | | | | | ``ETHTOOL_A_STRING_INDEX`` | u32 | string index | 341 +-+-+-+-+-------------------------------+--------+-----------------------+ 342 | | | | | ``ETHTOOL_A_STRING_VALUE`` | string | string value | 343 +-+-+-+-+-------------------------------+--------+-----------------------+ 344 | ``ETHTOOL_A_STRSET_COUNTS_ONLY`` | flag | return only counts | 345 +---------------------------------------+--------+-----------------------+ 346 347Device identification in request header is optional. Depending on its presence 348a and ``NLM_F_DUMP`` flag, there are three type of ``STRSET_GET`` requests: 349 350 - no ``NLM_F_DUMP,`` no device: get "global" stringsets 351 - no ``NLM_F_DUMP``, with device: get string sets related to the device 352 - ``NLM_F_DUMP``, no device: get device related string sets for all devices 353 354If there is no ``ETHTOOL_A_STRSET_STRINGSETS`` array, all string sets of 355requested type are returned, otherwise only those specified in the request. 356Flag ``ETHTOOL_A_STRSET_COUNTS_ONLY`` tells kernel to only return string 357counts of the sets, not the actual strings. 358 359 360LINKINFO_GET 361============ 362 363Requests link settings as provided by ``ETHTOOL_GLINKSETTINGS`` except for 364link modes and autonegotiation related information. The request does not use 365any attributes. 366 367Request contents: 368 369 ==================================== ====== ========================== 370 ``ETHTOOL_A_LINKINFO_HEADER`` nested request header 371 ==================================== ====== ========================== 372 373Kernel response contents: 374 375 ==================================== ====== ========================== 376 ``ETHTOOL_A_LINKINFO_HEADER`` nested reply header 377 ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port 378 ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address 379 ``ETHTOOL_A_LINKINFO_TP_MDIX`` u8 MDI(-X) status 380 ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control 381 ``ETHTOOL_A_LINKINFO_TRANSCEIVER`` u8 transceiver 382 ==================================== ====== ========================== 383 384Attributes and their values have the same meaning as matching members of the 385corresponding ioctl structures. 386 387``LINKINFO_GET`` allows dump requests (kernel returns reply message for all 388devices supporting the request). 389 390 391LINKINFO_SET 392============ 393 394``LINKINFO_SET`` request allows setting some of the attributes reported by 395``LINKINFO_GET``. 396 397Request contents: 398 399 ==================================== ====== ========================== 400 ``ETHTOOL_A_LINKINFO_HEADER`` nested request header 401 ``ETHTOOL_A_LINKINFO_PORT`` u8 physical port 402 ``ETHTOOL_A_LINKINFO_PHYADDR`` u8 phy MDIO address 403 ``ETHTOOL_A_LINKINFO_TP_MDIX_CTRL`` u8 MDI(-X) control 404 ==================================== ====== ========================== 405 406MDI(-X) status and transceiver cannot be set, request with the corresponding 407attributes is rejected. 408 409 410LINKMODES_GET 411============= 412 413Requests link modes (supported, advertised and peer advertised) and related 414information (autonegotiation status, link speed and duplex) as provided by 415``ETHTOOL_GLINKSETTINGS``. The request does not use any attributes. 416 417Request contents: 418 419 ==================================== ====== ========================== 420 ``ETHTOOL_A_LINKMODES_HEADER`` nested request header 421 ==================================== ====== ========================== 422 423Kernel response contents: 424 425 ========================================== ====== ========================== 426 ``ETHTOOL_A_LINKMODES_HEADER`` nested reply header 427 ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status 428 ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes 429 ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes 430 ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s) 431 ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode 432 ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG`` u8 Master/slave port mode 433 ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE`` u8 Master/slave port state 434 ``ETHTOOL_A_LINKMODES_RATE_MATCHING`` u8 PHY rate matching 435 ========================================== ====== ========================== 436 437For ``ETHTOOL_A_LINKMODES_OURS``, value represents advertised modes and mask 438represents supported modes. ``ETHTOOL_A_LINKMODES_PEER`` in the reply is a bit 439list. 440 441``LINKMODES_GET`` allows dump requests (kernel returns reply messages for all 442devices supporting the request). 443 444 445LINKMODES_SET 446============= 447 448Request contents: 449 450 ========================================== ====== ========================== 451 ``ETHTOOL_A_LINKMODES_HEADER`` nested request header 452 ``ETHTOOL_A_LINKMODES_AUTONEG`` u8 autonegotiation status 453 ``ETHTOOL_A_LINKMODES_OURS`` bitset advertised link modes 454 ``ETHTOOL_A_LINKMODES_PEER`` bitset partner link modes 455 ``ETHTOOL_A_LINKMODES_SPEED`` u32 link speed (Mb/s) 456 ``ETHTOOL_A_LINKMODES_DUPLEX`` u8 duplex mode 457 ``ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG`` u8 Master/slave port mode 458 ``ETHTOOL_A_LINKMODES_RATE_MATCHING`` u8 PHY rate matching 459 ``ETHTOOL_A_LINKMODES_LANES`` u32 lanes 460 ========================================== ====== ========================== 461 462``ETHTOOL_A_LINKMODES_OURS`` bit set allows setting advertised link modes. If 463autonegotiation is on (either set now or kept from before), advertised modes 464are not changed (no ``ETHTOOL_A_LINKMODES_OURS`` attribute) and at least one 465of speed, duplex and lanes is specified, kernel adjusts advertised modes to all 466supported modes matching speed, duplex, lanes or all (whatever is specified). 467This autoselection is done on ethtool side with ioctl interface, netlink 468interface is supposed to allow requesting changes without knowing what exactly 469kernel supports. 470 471 472LINKSTATE_GET 473============= 474 475Requests link state information. Link up/down flag (as provided by 476``ETHTOOL_GLINK`` ioctl command) is provided. Optionally, extended state might 477be provided as well. In general, extended state describes reasons for why a port 478is down, or why it operates in some non-obvious mode. This request does not have 479any attributes. 480 481Request contents: 482 483 ==================================== ====== ========================== 484 ``ETHTOOL_A_LINKSTATE_HEADER`` nested request header 485 ==================================== ====== ========================== 486 487Kernel response contents: 488 489 ==================================== ====== ============================ 490 ``ETHTOOL_A_LINKSTATE_HEADER`` nested reply header 491 ``ETHTOOL_A_LINKSTATE_LINK`` bool link state (up/down) 492 ``ETHTOOL_A_LINKSTATE_SQI`` u32 Current Signal Quality Index 493 ``ETHTOOL_A_LINKSTATE_SQI_MAX`` u32 Max support SQI value 494 ``ETHTOOL_A_LINKSTATE_EXT_STATE`` u8 link extended state 495 ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE`` u8 link extended substate 496 ``ETHTOOL_A_LINKSTATE_EXT_DOWN_CNT`` u32 count of link down events 497 ==================================== ====== ============================ 498 499For most NIC drivers, the value of ``ETHTOOL_A_LINKSTATE_LINK`` returns 500carrier flag provided by ``netif_carrier_ok()`` but there are drivers which 501define their own handler. 502 503``ETHTOOL_A_LINKSTATE_EXT_STATE`` and ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE`` are 504optional values. ethtool core can provide either both 505``ETHTOOL_A_LINKSTATE_EXT_STATE`` and ``ETHTOOL_A_LINKSTATE_EXT_SUBSTATE``, 506or only ``ETHTOOL_A_LINKSTATE_EXT_STATE``, or none of them. 507 508``LINKSTATE_GET`` allows dump requests (kernel returns reply messages for all 509devices supporting the request). 510 511 512Link extended states: 513 514 ================================================ ============================================ 515 ``ETHTOOL_LINK_EXT_STATE_AUTONEG`` States relating to the autonegotiation or 516 issues therein 517 518 ``ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE`` Failure during link training 519 520 ``ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH`` Logical mismatch in physical coding sublayer 521 or forward error correction sublayer 522 523 ``ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY`` Signal integrity issues 524 525 ``ETHTOOL_LINK_EXT_STATE_NO_CABLE`` No cable connected 526 527 ``ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE`` Failure is related to cable, 528 e.g., unsupported cable 529 530 ``ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE`` Failure is related to EEPROM, e.g., failure 531 during reading or parsing the data 532 533 ``ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE`` Failure during calibration algorithm 534 535 ``ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED`` The hardware is not able to provide the 536 power required from cable or module 537 538 ``ETHTOOL_LINK_EXT_STATE_OVERHEAT`` The module is overheated 539 540 ``ETHTOOL_LINK_EXT_STATE_MODULE`` Transceiver module issue 541 ================================================ ============================================ 542 543Link extended substates: 544 545 Autoneg substates: 546 547 =============================================================== ================================ 548 ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED`` Peer side is down 549 550 ``ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED`` Ack not received from peer side 551 552 ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED`` Next page exchange failed 553 554 ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE`` Peer side is down during force 555 mode or there is no agreement of 556 speed 557 558 ``ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE`` Forward error correction modes 559 in both sides are mismatched 560 561 ``ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD`` No Highest Common Denominator 562 =============================================================== ================================ 563 564 Link training substates: 565 566 =========================================================================== ==================== 567 ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED`` Frames were not 568 recognized, the 569 lock failed 570 571 ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT`` The lock did not 572 occur before 573 timeout 574 575 ``ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY`` Peer side did not 576 send ready signal 577 after training 578 process 579 580 ``ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT`` Remote side is not 581 ready yet 582 =========================================================================== ==================== 583 584 Link logical mismatch substates: 585 586 ================================================================ =============================== 587 ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK`` Physical coding sublayer was 588 not locked in first phase - 589 block lock 590 591 ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK`` Physical coding sublayer was 592 not locked in second phase - 593 alignment markers lock 594 595 ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS`` Physical coding sublayer did 596 not get align status 597 598 ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED`` FC forward error correction is 599 not locked 600 601 ``ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED`` RS forward error correction is 602 not locked 603 ================================================================ =============================== 604 605 Bad signal integrity substates: 606 607 ================================================================= ============================= 608 ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS`` Large number of physical 609 errors 610 611 ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE`` The system attempted to 612 operate the cable at a rate 613 that is not formally 614 supported, which led to 615 signal integrity issues 616 617 ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST`` The external clock signal for 618 SerDes is too weak or 619 unavailable. 620 621 ``ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS`` The received signal for 622 SerDes is too weak because 623 analog loss of signal. 624 ================================================================= ============================= 625 626 Cable issue substates: 627 628 =================================================== ============================================ 629 ``ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE`` Unsupported cable 630 631 ``ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE`` Cable test failure 632 =================================================== ============================================ 633 634 Transceiver module issue substates: 635 636 =================================================== ============================================ 637 ``ETHTOOL_LINK_EXT_SUBSTATE_MODULE_CMIS_NOT_READY`` The CMIS Module State Machine did not reach 638 the ModuleReady state. For example, if the 639 module is stuck at ModuleFault state 640 =================================================== ============================================ 641 642DEBUG_GET 643========= 644 645Requests debugging settings of a device. At the moment, only message mask is 646provided. 647 648Request contents: 649 650 ==================================== ====== ========================== 651 ``ETHTOOL_A_DEBUG_HEADER`` nested request header 652 ==================================== ====== ========================== 653 654Kernel response contents: 655 656 ==================================== ====== ========================== 657 ``ETHTOOL_A_DEBUG_HEADER`` nested reply header 658 ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask 659 ==================================== ====== ========================== 660 661The message mask (``ETHTOOL_A_DEBUG_MSGMASK``) is equal to message level as 662provided by ``ETHTOOL_GMSGLVL`` and set by ``ETHTOOL_SMSGLVL`` in ioctl 663interface. While it is called message level there for historical reasons, most 664drivers and almost all newer drivers use it as a mask of enabled message 665classes (represented by ``NETIF_MSG_*`` constants); therefore netlink 666interface follows its actual use in practice. 667 668``DEBUG_GET`` allows dump requests (kernel returns reply messages for all 669devices supporting the request). 670 671 672DEBUG_SET 673========= 674 675Set or update debugging settings of a device. At the moment, only message mask 676is supported. 677 678Request contents: 679 680 ==================================== ====== ========================== 681 ``ETHTOOL_A_DEBUG_HEADER`` nested request header 682 ``ETHTOOL_A_DEBUG_MSGMASK`` bitset message mask 683 ==================================== ====== ========================== 684 685``ETHTOOL_A_DEBUG_MSGMASK`` bit set allows setting or modifying mask of 686enabled debugging message types for the device. 687 688 689WOL_GET 690======= 691 692Query device wake-on-lan settings. Unlike most "GET" type requests, 693``ETHTOOL_MSG_WOL_GET`` requires (netns) ``CAP_NET_ADMIN`` privileges as it 694(potentially) provides SecureOn(tm) password which is confidential. 695 696Request contents: 697 698 ==================================== ====== ========================== 699 ``ETHTOOL_A_WOL_HEADER`` nested request header 700 ==================================== ====== ========================== 701 702Kernel response contents: 703 704 ==================================== ====== ========================== 705 ``ETHTOOL_A_WOL_HEADER`` nested reply header 706 ``ETHTOOL_A_WOL_MODES`` bitset mask of enabled WoL modes 707 ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password 708 ==================================== ====== ========================== 709 710In reply, ``ETHTOOL_A_WOL_MODES`` mask consists of modes supported by the 711device, value of modes which are enabled. ``ETHTOOL_A_WOL_SOPASS`` is only 712included in reply if ``WAKE_MAGICSECURE`` mode is supported. 713 714 715WOL_SET 716======= 717 718Set or update wake-on-lan settings. 719 720Request contents: 721 722 ==================================== ====== ========================== 723 ``ETHTOOL_A_WOL_HEADER`` nested request header 724 ``ETHTOOL_A_WOL_MODES`` bitset enabled WoL modes 725 ``ETHTOOL_A_WOL_SOPASS`` binary SecureOn(tm) password 726 ==================================== ====== ========================== 727 728``ETHTOOL_A_WOL_SOPASS`` is only allowed for devices supporting 729``WAKE_MAGICSECURE`` mode. 730 731 732FEATURES_GET 733============ 734 735Gets netdev features like ``ETHTOOL_GFEATURES`` ioctl request. 736 737Request contents: 738 739 ==================================== ====== ========================== 740 ``ETHTOOL_A_FEATURES_HEADER`` nested request header 741 ==================================== ====== ========================== 742 743Kernel response contents: 744 745 ==================================== ====== ========================== 746 ``ETHTOOL_A_FEATURES_HEADER`` nested reply header 747 ``ETHTOOL_A_FEATURES_HW`` bitset dev->hw_features 748 ``ETHTOOL_A_FEATURES_WANTED`` bitset dev->wanted_features 749 ``ETHTOOL_A_FEATURES_ACTIVE`` bitset dev->features 750 ``ETHTOOL_A_FEATURES_NOCHANGE`` bitset NETIF_F_NEVER_CHANGE 751 ==================================== ====== ========================== 752 753Bitmaps in kernel response have the same meaning as bitmaps used in ioctl 754interference but attribute names are different (they are based on 755corresponding members of struct net_device). Legacy "flags" are not provided, 756if userspace needs them (most likely only ethtool for backward compatibility), 757it can calculate their values from related feature bits itself. 758ETHA_FEATURES_HW uses mask consisting of all features recognized by kernel (to 759provide all names when using verbose bitmap format), the other three use no 760mask (simple bit lists). 761 762 763FEATURES_SET 764============ 765 766Request to set netdev features like ``ETHTOOL_SFEATURES`` ioctl request. 767 768Request contents: 769 770 ==================================== ====== ========================== 771 ``ETHTOOL_A_FEATURES_HEADER`` nested request header 772 ``ETHTOOL_A_FEATURES_WANTED`` bitset requested features 773 ==================================== ====== ========================== 774 775Kernel response contents: 776 777 ==================================== ====== ========================== 778 ``ETHTOOL_A_FEATURES_HEADER`` nested reply header 779 ``ETHTOOL_A_FEATURES_WANTED`` bitset diff wanted vs. result 780 ``ETHTOOL_A_FEATURES_ACTIVE`` bitset diff old vs. new active 781 ==================================== ====== ========================== 782 783Request constains only one bitset which can be either value/mask pair (request 784to change specific feature bits and leave the rest) or only a value (request 785to set all features to specified set). 786 787As request is subject to netdev_change_features() sanity checks, optional 788kernel reply (can be suppressed by ``ETHTOOL_FLAG_OMIT_REPLY`` flag in request 789header) informs client about the actual result. ``ETHTOOL_A_FEATURES_WANTED`` 790reports the difference between client request and actual result: mask consists 791of bits which differ between requested features and result (dev->features 792after the operation), value consists of values of these bits in the request 793(i.e. negated values from resulting features). ``ETHTOOL_A_FEATURES_ACTIVE`` 794reports the difference between old and new dev->features: mask consists of 795bits which have changed, values are their values in new dev->features (after 796the operation). 797 798``ETHTOOL_MSG_FEATURES_NTF`` notification is sent not only if device features 799are modified using ``ETHTOOL_MSG_FEATURES_SET`` request or on of ethtool ioctl 800request but also each time features are modified with netdev_update_features() 801or netdev_change_features(). 802 803 804PRIVFLAGS_GET 805============= 806 807Gets private flags like ``ETHTOOL_GPFLAGS`` ioctl request. 808 809Request contents: 810 811 ==================================== ====== ========================== 812 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header 813 ==================================== ====== ========================== 814 815Kernel response contents: 816 817 ==================================== ====== ========================== 818 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested reply header 819 ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags 820 ==================================== ====== ========================== 821 822``ETHTOOL_A_PRIVFLAGS_FLAGS`` is a bitset with values of device private flags. 823These flags are defined by driver, their number and names (and also meaning) 824are device dependent. For compact bitset format, names can be retrieved as 825``ETH_SS_PRIV_FLAGS`` string set. If verbose bitset format is requested, 826response uses all private flags supported by the device as mask so that client 827gets the full information without having to fetch the string set with names. 828 829 830PRIVFLAGS_SET 831============= 832 833Sets or modifies values of device private flags like ``ETHTOOL_SPFLAGS`` 834ioctl request. 835 836Request contents: 837 838 ==================================== ====== ========================== 839 ``ETHTOOL_A_PRIVFLAGS_HEADER`` nested request header 840 ``ETHTOOL_A_PRIVFLAGS_FLAGS`` bitset private flags 841 ==================================== ====== ========================== 842 843``ETHTOOL_A_PRIVFLAGS_FLAGS`` can either set the whole set of private flags or 844modify only values of some of them. 845 846 847RINGS_GET 848========= 849 850Gets ring sizes like ``ETHTOOL_GRINGPARAM`` ioctl request. 851 852Request contents: 853 854 ==================================== ====== ========================== 855 ``ETHTOOL_A_RINGS_HEADER`` nested request header 856 ==================================== ====== ========================== 857 858Kernel response contents: 859 860 ==================================== ====== =========================== 861 ``ETHTOOL_A_RINGS_HEADER`` nested reply header 862 ``ETHTOOL_A_RINGS_RX_MAX`` u32 max size of RX ring 863 ``ETHTOOL_A_RINGS_RX_MINI_MAX`` u32 max size of RX mini ring 864 ``ETHTOOL_A_RINGS_RX_JUMBO_MAX`` u32 max size of RX jumbo ring 865 ``ETHTOOL_A_RINGS_TX_MAX`` u32 max size of TX ring 866 ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring 867 ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring 868 ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring 869 ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring 870 ``ETHTOOL_A_RINGS_RX_BUF_LEN`` u32 size of buffers on the ring 871 ``ETHTOOL_A_RINGS_TCP_DATA_SPLIT`` u8 TCP header / data split 872 ``ETHTOOL_A_RINGS_CQE_SIZE`` u32 Size of TX/RX CQE 873 ``ETHTOOL_A_RINGS_TX_PUSH`` u8 flag of TX Push mode 874 ==================================== ====== =========================== 875 876``ETHTOOL_A_RINGS_TCP_DATA_SPLIT`` indicates whether the device is usable with 877page-flipping TCP zero-copy receive (``getsockopt(TCP_ZEROCOPY_RECEIVE)``). 878If enabled the device is configured to place frame headers and data into 879separate buffers. The device configuration must make it possible to receive 880full memory pages of data, for example because MTU is high enough or through 881HW-GRO. 882 883``ETHTOOL_A_RINGS_TX_PUSH`` flag is used to enable descriptor fast 884path to send packets. In ordinary path, driver fills descriptors in DRAM and 885notifies NIC hardware. In fast path, driver pushes descriptors to the device 886through MMIO writes, thus reducing the latency. However, enabling this feature 887may increase the CPU cost. Drivers may enforce additional per-packet 888eligibility checks (e.g. on packet size). 889 890RINGS_SET 891========= 892 893Sets ring sizes like ``ETHTOOL_SRINGPARAM`` ioctl request. 894 895Request contents: 896 897 ==================================== ====== =========================== 898 ``ETHTOOL_A_RINGS_HEADER`` nested reply header 899 ``ETHTOOL_A_RINGS_RX`` u32 size of RX ring 900 ``ETHTOOL_A_RINGS_RX_MINI`` u32 size of RX mini ring 901 ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring 902 ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring 903 ``ETHTOOL_A_RINGS_RX_BUF_LEN`` u32 size of buffers on the ring 904 ``ETHTOOL_A_RINGS_CQE_SIZE`` u32 Size of TX/RX CQE 905 ``ETHTOOL_A_RINGS_TX_PUSH`` u8 flag of TX Push mode 906 ==================================== ====== =========================== 907 908Kernel checks that requested ring sizes do not exceed limits reported by 909driver. Driver may impose additional constraints and may not suspport all 910attributes. 911 912 913``ETHTOOL_A_RINGS_CQE_SIZE`` specifies the completion queue event size. 914Completion queue events(CQE) are the events posted by NIC to indicate the 915completion status of a packet when the packet is sent(like send success or 916error) or received(like pointers to packet fragments). The CQE size parameter 917enables to modify the CQE size other than default size if NIC supports it. 918A bigger CQE can have more receive buffer pointers inturn NIC can transfer 919a bigger frame from wire. Based on the NIC hardware, the overall completion 920queue size can be adjusted in the driver if CQE size is modified. 921 922CHANNELS_GET 923============ 924 925Gets channel counts like ``ETHTOOL_GCHANNELS`` ioctl request. 926 927Request contents: 928 929 ==================================== ====== ========================== 930 ``ETHTOOL_A_CHANNELS_HEADER`` nested request header 931 ==================================== ====== ========================== 932 933Kernel response contents: 934 935 ===================================== ====== ========================== 936 ``ETHTOOL_A_CHANNELS_HEADER`` nested reply header 937 ``ETHTOOL_A_CHANNELS_RX_MAX`` u32 max receive channels 938 ``ETHTOOL_A_CHANNELS_TX_MAX`` u32 max transmit channels 939 ``ETHTOOL_A_CHANNELS_OTHER_MAX`` u32 max other channels 940 ``ETHTOOL_A_CHANNELS_COMBINED_MAX`` u32 max combined channels 941 ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count 942 ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count 943 ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count 944 ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count 945 ===================================== ====== ========================== 946 947 948CHANNELS_SET 949============ 950 951Sets channel counts like ``ETHTOOL_SCHANNELS`` ioctl request. 952 953Request contents: 954 955 ===================================== ====== ========================== 956 ``ETHTOOL_A_CHANNELS_HEADER`` nested request header 957 ``ETHTOOL_A_CHANNELS_RX_COUNT`` u32 receive channel count 958 ``ETHTOOL_A_CHANNELS_TX_COUNT`` u32 transmit channel count 959 ``ETHTOOL_A_CHANNELS_OTHER_COUNT`` u32 other channel count 960 ``ETHTOOL_A_CHANNELS_COMBINED_COUNT`` u32 combined channel count 961 ===================================== ====== ========================== 962 963Kernel checks that requested channel counts do not exceed limits reported by 964driver. Driver may impose additional constraints and may not suspport all 965attributes. 966 967 968COALESCE_GET 969============ 970 971Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request. 972 973Request contents: 974 975 ==================================== ====== ========================== 976 ``ETHTOOL_A_COALESCE_HEADER`` nested request header 977 ==================================== ====== ========================== 978 979Kernel response contents: 980 981 =========================================== ====== ======================= 982 ``ETHTOOL_A_COALESCE_HEADER`` nested reply header 983 ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx 984 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx 985 ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ 986 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ 987 ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx 988 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx 989 ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ 990 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ 991 ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update 992 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce 993 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce 994 ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate 995 ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx 996 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx 997 ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx 998 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx 999 ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate 1000 ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx 1001 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx 1002 ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx 1003 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx 1004 ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval 1005 ``ETHTOOL_A_COALESCE_USE_CQE_TX`` bool timer reset mode, Tx 1006 ``ETHTOOL_A_COALESCE_USE_CQE_RX`` bool timer reset mode, Rx 1007 =========================================== ====== ======================= 1008 1009Attributes are only included in reply if their value is not zero or the 1010corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e. 1011they are declared as supported by driver). 1012 1013Timer reset mode (``ETHTOOL_A_COALESCE_USE_CQE_TX`` and 1014``ETHTOOL_A_COALESCE_USE_CQE_RX``) controls the interaction between packet 1015arrival and the various time based delay parameters. By default timers are 1016expected to limit the max delay between any packet arrival/departure and a 1017corresponding interrupt. In this mode timer should be started by packet 1018arrival (sometimes delivery of previous interrupt) and reset when interrupt 1019is delivered. 1020Setting the appropriate attribute to 1 will enable ``CQE`` mode, where 1021each packet event resets the timer. In this mode timer is used to force 1022the interrupt if queue goes idle, while busy queues depend on the packet 1023limit to trigger interrupts. 1024 1025COALESCE_SET 1026============ 1027 1028Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request. 1029 1030Request contents: 1031 1032 =========================================== ====== ======================= 1033 ``ETHTOOL_A_COALESCE_HEADER`` nested request header 1034 ``ETHTOOL_A_COALESCE_RX_USECS`` u32 delay (us), normal Rx 1035 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES`` u32 max packets, normal Rx 1036 ``ETHTOOL_A_COALESCE_RX_USECS_IRQ`` u32 delay (us), Rx in IRQ 1037 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ`` u32 max packets, Rx in IRQ 1038 ``ETHTOOL_A_COALESCE_TX_USECS`` u32 delay (us), normal Tx 1039 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES`` u32 max packets, normal Tx 1040 ``ETHTOOL_A_COALESCE_TX_USECS_IRQ`` u32 delay (us), Tx in IRQ 1041 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ`` u32 IRQ packets, Tx in IRQ 1042 ``ETHTOOL_A_COALESCE_STATS_BLOCK_USECS`` u32 delay of stats update 1043 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX`` bool adaptive Rx coalesce 1044 ``ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX`` bool adaptive Tx coalesce 1045 ``ETHTOOL_A_COALESCE_PKT_RATE_LOW`` u32 threshold for low rate 1046 ``ETHTOOL_A_COALESCE_RX_USECS_LOW`` u32 delay (us), low Rx 1047 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW`` u32 max packets, low Rx 1048 ``ETHTOOL_A_COALESCE_TX_USECS_LOW`` u32 delay (us), low Tx 1049 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW`` u32 max packets, low Tx 1050 ``ETHTOOL_A_COALESCE_PKT_RATE_HIGH`` u32 threshold for high rate 1051 ``ETHTOOL_A_COALESCE_RX_USECS_HIGH`` u32 delay (us), high Rx 1052 ``ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH`` u32 max packets, high Rx 1053 ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx 1054 ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx 1055 ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval 1056 ``ETHTOOL_A_COALESCE_USE_CQE_TX`` bool timer reset mode, Tx 1057 ``ETHTOOL_A_COALESCE_USE_CQE_RX`` bool timer reset mode, Rx 1058 =========================================== ====== ======================= 1059 1060Request is rejected if it attributes declared as unsupported by driver (i.e. 1061such that the corresponding bit in ``ethtool_ops::supported_coalesce_params`` 1062is not set), regardless of their values. Driver may impose additional 1063constraints on coalescing parameters and their values. 1064 1065 1066PAUSE_GET 1067========= 1068 1069Gets pause frame settings like ``ETHTOOL_GPAUSEPARAM`` ioctl request. 1070 1071Request contents: 1072 1073 ===================================== ====== ========================== 1074 ``ETHTOOL_A_PAUSE_HEADER`` nested request header 1075 ===================================== ====== ========================== 1076 1077Kernel response contents: 1078 1079 ===================================== ====== ========================== 1080 ``ETHTOOL_A_PAUSE_HEADER`` nested request header 1081 ``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation 1082 ``ETHTOOL_A_PAUSE_RX`` bool receive pause frames 1083 ``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames 1084 ``ETHTOOL_A_PAUSE_STATS`` nested pause statistics 1085 ===================================== ====== ========================== 1086 1087``ETHTOOL_A_PAUSE_STATS`` are reported if ``ETHTOOL_FLAG_STATS`` was set 1088in ``ETHTOOL_A_HEADER_FLAGS``. 1089It will be empty if driver did not report any statistics. Drivers fill in 1090the statistics in the following structure: 1091 1092.. kernel-doc:: include/linux/ethtool.h 1093 :identifiers: ethtool_pause_stats 1094 1095Each member has a corresponding attribute defined. 1096 1097PAUSE_SET 1098========= 1099 1100Sets pause parameters like ``ETHTOOL_GPAUSEPARAM`` ioctl request. 1101 1102Request contents: 1103 1104 ===================================== ====== ========================== 1105 ``ETHTOOL_A_PAUSE_HEADER`` nested request header 1106 ``ETHTOOL_A_PAUSE_AUTONEG`` bool pause autonegotiation 1107 ``ETHTOOL_A_PAUSE_RX`` bool receive pause frames 1108 ``ETHTOOL_A_PAUSE_TX`` bool transmit pause frames 1109 ===================================== ====== ========================== 1110 1111 1112EEE_GET 1113======= 1114 1115Gets Energy Efficient Ethernet settings like ``ETHTOOL_GEEE`` ioctl request. 1116 1117Request contents: 1118 1119 ===================================== ====== ========================== 1120 ``ETHTOOL_A_EEE_HEADER`` nested request header 1121 ===================================== ====== ========================== 1122 1123Kernel response contents: 1124 1125 ===================================== ====== ========================== 1126 ``ETHTOOL_A_EEE_HEADER`` nested request header 1127 ``ETHTOOL_A_EEE_MODES_OURS`` bool supported/advertised modes 1128 ``ETHTOOL_A_EEE_MODES_PEER`` bool peer advertised link modes 1129 ``ETHTOOL_A_EEE_ACTIVE`` bool EEE is actively used 1130 ``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled 1131 ``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled 1132 ``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us) 1133 ===================================== ====== ========================== 1134 1135In ``ETHTOOL_A_EEE_MODES_OURS``, mask consists of link modes for which EEE is 1136enabled, value of link modes for which EEE is advertised. Link modes for which 1137peer advertises EEE are listed in ``ETHTOOL_A_EEE_MODES_PEER`` (no mask). The 1138netlink interface allows reporting EEE status for all link modes but only 1139first 32 are provided by the ``ethtool_ops`` callback. 1140 1141 1142EEE_SET 1143======= 1144 1145Sets Energy Efficient Ethernet parameters like ``ETHTOOL_SEEE`` ioctl request. 1146 1147Request contents: 1148 1149 ===================================== ====== ========================== 1150 ``ETHTOOL_A_EEE_HEADER`` nested request header 1151 ``ETHTOOL_A_EEE_MODES_OURS`` bool advertised modes 1152 ``ETHTOOL_A_EEE_ENABLED`` bool EEE is enabled 1153 ``ETHTOOL_A_EEE_TX_LPI_ENABLED`` bool Tx lpi enabled 1154 ``ETHTOOL_A_EEE_TX_LPI_TIMER`` u32 Tx lpi timeout (in us) 1155 ===================================== ====== ========================== 1156 1157``ETHTOOL_A_EEE_MODES_OURS`` is used to either list link modes to advertise 1158EEE for (if there is no mask) or specify changes to the list (if there is 1159a mask). The netlink interface allows reporting EEE status for all link modes 1160but only first 32 can be set at the moment as that is what the ``ethtool_ops`` 1161callback supports. 1162 1163 1164TSINFO_GET 1165========== 1166 1167Gets timestamping information like ``ETHTOOL_GET_TS_INFO`` ioctl request. 1168 1169Request contents: 1170 1171 ===================================== ====== ========================== 1172 ``ETHTOOL_A_TSINFO_HEADER`` nested request header 1173 ===================================== ====== ========================== 1174 1175Kernel response contents: 1176 1177 ===================================== ====== ========================== 1178 ``ETHTOOL_A_TSINFO_HEADER`` nested request header 1179 ``ETHTOOL_A_TSINFO_TIMESTAMPING`` bitset SO_TIMESTAMPING flags 1180 ``ETHTOOL_A_TSINFO_TX_TYPES`` bitset supported Tx types 1181 ``ETHTOOL_A_TSINFO_RX_FILTERS`` bitset supported Rx filters 1182 ``ETHTOOL_A_TSINFO_PHC_INDEX`` u32 PTP hw clock index 1183 ===================================== ====== ========================== 1184 1185``ETHTOOL_A_TSINFO_PHC_INDEX`` is absent if there is no associated PHC (there 1186is no special value for this case). The bitset attributes are omitted if they 1187would be empty (no bit set). 1188 1189CABLE_TEST 1190========== 1191 1192Start a cable test. 1193 1194Request contents: 1195 1196 ==================================== ====== ========================== 1197 ``ETHTOOL_A_CABLE_TEST_HEADER`` nested request header 1198 ==================================== ====== ========================== 1199 1200Notification contents: 1201 1202An Ethernet cable typically contains 1, 2 or 4 pairs. The length of 1203the pair can only be measured when there is a fault in the pair and 1204hence a reflection. Information about the fault may not be available, 1205depending on the specific hardware. Hence the contents of the notify 1206message are mostly optional. The attributes can be repeated an 1207arbitrary number of times, in an arbitrary order, for an arbitrary 1208number of pairs. 1209 1210The example shows the notification sent when the test is completed for 1211a T2 cable, i.e. two pairs. One pair is OK and hence has no length 1212information. The second pair has a fault and does have length 1213information. 1214 1215 +---------------------------------------------+--------+---------------------+ 1216 | ``ETHTOOL_A_CABLE_TEST_HEADER`` | nested | reply header | 1217 +---------------------------------------------+--------+---------------------+ 1218 | ``ETHTOOL_A_CABLE_TEST_STATUS`` | u8 | completed | 1219 +---------------------------------------------+--------+---------------------+ 1220 | ``ETHTOOL_A_CABLE_TEST_NTF_NEST`` | nested | all the results | 1221 +-+-------------------------------------------+--------+---------------------+ 1222 | | ``ETHTOOL_A_CABLE_NEST_RESULT`` | nested | cable test result | 1223 +-+-+-----------------------------------------+--------+---------------------+ 1224 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number | 1225 +-+-+-----------------------------------------+--------+---------------------+ 1226 | | | ``ETHTOOL_A_CABLE_RESULTS_CODE`` | u8 | result code | 1227 +-+-+-----------------------------------------+--------+---------------------+ 1228 | | ``ETHTOOL_A_CABLE_NEST_RESULT`` | nested | cable test results | 1229 +-+-+-----------------------------------------+--------+---------------------+ 1230 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number | 1231 +-+-+-----------------------------------------+--------+---------------------+ 1232 | | | ``ETHTOOL_A_CABLE_RESULTS_CODE`` | u8 | result code | 1233 +-+-+-----------------------------------------+--------+---------------------+ 1234 | | ``ETHTOOL_A_CABLE_NEST_FAULT_LENGTH`` | nested | cable length | 1235 +-+-+-----------------------------------------+--------+---------------------+ 1236 | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR`` | u8 | pair number | 1237 +-+-+-----------------------------------------+--------+---------------------+ 1238 | | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_CM`` | u32 | length in cm | 1239 +-+-+-----------------------------------------+--------+---------------------+ 1240 1241CABLE_TEST TDR 1242============== 1243 1244Start a cable test and report raw TDR data 1245 1246Request contents: 1247 1248 +--------------------------------------------+--------+-----------------------+ 1249 | ``ETHTOOL_A_CABLE_TEST_TDR_HEADER`` | nested | reply header | 1250 +--------------------------------------------+--------+-----------------------+ 1251 | ``ETHTOOL_A_CABLE_TEST_TDR_CFG`` | nested | test configuration | 1252 +-+------------------------------------------+--------+-----------------------+ 1253 | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE`` | u32 | first data distance | 1254 +-+-+----------------------------------------+--------+-----------------------+ 1255 | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE`` | u32 | last data distance | 1256 +-+-+----------------------------------------+--------+-----------------------+ 1257 | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE`` | u32 | distance of each step | 1258 +-+-+----------------------------------------+--------+-----------------------+ 1259 | | ``ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR`` | u8 | pair to test | 1260 +-+-+----------------------------------------+--------+-----------------------+ 1261 1262The ETHTOOL_A_CABLE_TEST_TDR_CFG is optional, as well as all members 1263of the nest. All distances are expressed in centimeters. The PHY takes 1264the distances as a guide, and rounds to the nearest distance it 1265actually supports. If a pair is passed, only that one pair will be 1266tested. Otherwise all pairs are tested. 1267 1268Notification contents: 1269 1270Raw TDR data is gathered by sending a pulse down the cable and 1271recording the amplitude of the reflected pulse for a given distance. 1272 1273It can take a number of seconds to collect TDR data, especial if the 1274full 100 meters is probed at 1 meter intervals. When the test is 1275started a notification will be sent containing just 1276ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value 1277ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED. 1278 1279When the test has completed a second notification will be sent 1280containing ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value 1281ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED and the TDR data. 1282 1283The message may optionally contain the amplitude of the pulse send 1284down the cable. This is measured in mV. A reflection should not be 1285bigger than transmitted pulse. 1286 1287Before the raw TDR data should be an ETHTOOL_A_CABLE_TDR_NEST_STEP 1288nest containing information about the distance along the cable for the 1289first reading, the last reading, and the step between each 1290reading. Distances are measured in centimeters. These should be the 1291exact values the PHY used. These may be different to what the user 1292requested, if the native measurement resolution is greater than 1 cm. 1293 1294For each step along the cable, a ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE is 1295used to report the amplitude of the reflection for a given pair. 1296 1297 +---------------------------------------------+--------+----------------------+ 1298 | ``ETHTOOL_A_CABLE_TEST_TDR_HEADER`` | nested | reply header | 1299 +---------------------------------------------+--------+----------------------+ 1300 | ``ETHTOOL_A_CABLE_TEST_TDR_STATUS`` | u8 | completed | 1301 +---------------------------------------------+--------+----------------------+ 1302 | ``ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST`` | nested | all the results | 1303 +-+-------------------------------------------+--------+----------------------+ 1304 | | ``ETHTOOL_A_CABLE_TDR_NEST_PULSE`` | nested | TX Pulse amplitude | 1305 +-+-+-----------------------------------------+--------+----------------------+ 1306 | | | ``ETHTOOL_A_CABLE_PULSE_mV`` | s16 | Pulse amplitude | 1307 +-+-+-----------------------------------------+--------+----------------------+ 1308 | | ``ETHTOOL_A_CABLE_NEST_STEP`` | nested | TDR step info | 1309 +-+-+-----------------------------------------+--------+----------------------+ 1310 | | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE`` | u32 | First data distance | 1311 +-+-+-----------------------------------------+--------+----------------------+ 1312 | | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE`` | u32 | Last data distance | 1313 +-+-+-----------------------------------------+--------+----------------------+ 1314 | | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE`` | u32 | distance of each step| 1315 +-+-+-----------------------------------------+--------+----------------------+ 1316 | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude | 1317 +-+-+-----------------------------------------+--------+----------------------+ 1318 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number | 1319 +-+-+-----------------------------------------+--------+----------------------+ 1320 | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude | 1321 +-+-+-----------------------------------------+--------+----------------------+ 1322 | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude | 1323 +-+-+-----------------------------------------+--------+----------------------+ 1324 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number | 1325 +-+-+-----------------------------------------+--------+----------------------+ 1326 | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude | 1327 +-+-+-----------------------------------------+--------+----------------------+ 1328 | | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude | 1329 +-+-+-----------------------------------------+--------+----------------------+ 1330 | | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number | 1331 +-+-+-----------------------------------------+--------+----------------------+ 1332 | | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude | 1333 +-+-+-----------------------------------------+--------+----------------------+ 1334 1335TUNNEL_INFO 1336=========== 1337 1338Gets information about the tunnel state NIC is aware of. 1339 1340Request contents: 1341 1342 ===================================== ====== ========================== 1343 ``ETHTOOL_A_TUNNEL_INFO_HEADER`` nested request header 1344 ===================================== ====== ========================== 1345 1346Kernel response contents: 1347 1348 +---------------------------------------------+--------+---------------------+ 1349 | ``ETHTOOL_A_TUNNEL_INFO_HEADER`` | nested | reply header | 1350 +---------------------------------------------+--------+---------------------+ 1351 | ``ETHTOOL_A_TUNNEL_INFO_UDP_PORTS`` | nested | all UDP port tables | 1352 +-+-------------------------------------------+--------+---------------------+ 1353 | | ``ETHTOOL_A_TUNNEL_UDP_TABLE`` | nested | one UDP port table | 1354 +-+-+-----------------------------------------+--------+---------------------+ 1355 | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE`` | u32 | max size of the | 1356 | | | | | table | 1357 +-+-+-----------------------------------------+--------+---------------------+ 1358 | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES`` | bitset | tunnel types which | 1359 | | | | | table can hold | 1360 +-+-+-----------------------------------------+--------+---------------------+ 1361 | | | ``ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY`` | nested | offloaded UDP port | 1362 +-+-+-+---------------------------------------+--------+---------------------+ 1363 | | | | ``ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT`` | be16 | UDP port | 1364 +-+-+-+---------------------------------------+--------+---------------------+ 1365 | | | | ``ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE`` | u32 | tunnel type | 1366 +-+-+-+---------------------------------------+--------+---------------------+ 1367 1368For UDP tunnel table empty ``ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES`` indicates that 1369the table contains static entries, hard-coded by the NIC. 1370 1371FEC_GET 1372======= 1373 1374Gets FEC configuration and state like ``ETHTOOL_GFECPARAM`` ioctl request. 1375 1376Request contents: 1377 1378 ===================================== ====== ========================== 1379 ``ETHTOOL_A_FEC_HEADER`` nested request header 1380 ===================================== ====== ========================== 1381 1382Kernel response contents: 1383 1384 ===================================== ====== ========================== 1385 ``ETHTOOL_A_FEC_HEADER`` nested request header 1386 ``ETHTOOL_A_FEC_MODES`` bitset configured modes 1387 ``ETHTOOL_A_FEC_AUTO`` bool FEC mode auto selection 1388 ``ETHTOOL_A_FEC_ACTIVE`` u32 index of active FEC mode 1389 ``ETHTOOL_A_FEC_STATS`` nested FEC statistics 1390 ===================================== ====== ========================== 1391 1392``ETHTOOL_A_FEC_ACTIVE`` is the bit index of the FEC link mode currently 1393active on the interface. This attribute may not be present if device does 1394not support FEC. 1395 1396``ETHTOOL_A_FEC_MODES`` and ``ETHTOOL_A_FEC_AUTO`` are only meaningful when 1397autonegotiation is disabled. If ``ETHTOOL_A_FEC_AUTO`` is non-zero driver will 1398select the FEC mode automatically based on the parameters of the SFP module. 1399This is equivalent to the ``ETHTOOL_FEC_AUTO`` bit of the ioctl interface. 1400``ETHTOOL_A_FEC_MODES`` carry the current FEC configuration using link mode 1401bits (rather than old ``ETHTOOL_FEC_*`` bits). 1402 1403``ETHTOOL_A_FEC_STATS`` are reported if ``ETHTOOL_FLAG_STATS`` was set in 1404``ETHTOOL_A_HEADER_FLAGS``. 1405Each attribute carries an array of 64bit statistics. First entry in the array 1406contains the total number of events on the port, while the following entries 1407are counters corresponding to lanes/PCS instances. The number of entries in 1408the array will be: 1409 1410+--------------+---------------------------------------------+ 1411| `0` | device does not support FEC statistics | 1412+--------------+---------------------------------------------+ 1413| `1` | device does not support per-lane break down | 1414+--------------+---------------------------------------------+ 1415| `1 + #lanes` | device has full support for FEC stats | 1416+--------------+---------------------------------------------+ 1417 1418Drivers fill in the statistics in the following structure: 1419 1420.. kernel-doc:: include/linux/ethtool.h 1421 :identifiers: ethtool_fec_stats 1422 1423FEC_SET 1424======= 1425 1426Sets FEC parameters like ``ETHTOOL_SFECPARAM`` ioctl request. 1427 1428Request contents: 1429 1430 ===================================== ====== ========================== 1431 ``ETHTOOL_A_FEC_HEADER`` nested request header 1432 ``ETHTOOL_A_FEC_MODES`` bitset configured modes 1433 ``ETHTOOL_A_FEC_AUTO`` bool FEC mode auto selection 1434 ===================================== ====== ========================== 1435 1436``FEC_SET`` is only meaningful when autonegotiation is disabled. Otherwise 1437FEC mode is selected as part of autonegotiation. 1438 1439``ETHTOOL_A_FEC_MODES`` selects which FEC mode should be used. It's recommended 1440to set only one bit, if multiple bits are set driver may choose between them 1441in an implementation specific way. 1442 1443``ETHTOOL_A_FEC_AUTO`` requests the driver to choose FEC mode based on SFP 1444module parameters. This does not mean autonegotiation. 1445 1446MODULE_EEPROM_GET 1447================= 1448 1449Fetch module EEPROM data dump. 1450This interface is designed to allow dumps of at most 1/2 page at once. This 1451means only dumps of 128 (or less) bytes are allowed, without crossing half page 1452boundary located at offset 128. For pages other than 0 only high 128 bytes are 1453accessible. 1454 1455Request contents: 1456 1457 ======================================= ====== ========================== 1458 ``ETHTOOL_A_MODULE_EEPROM_HEADER`` nested request header 1459 ``ETHTOOL_A_MODULE_EEPROM_OFFSET`` u32 offset within a page 1460 ``ETHTOOL_A_MODULE_EEPROM_LENGTH`` u32 amount of bytes to read 1461 ``ETHTOOL_A_MODULE_EEPROM_PAGE`` u8 page number 1462 ``ETHTOOL_A_MODULE_EEPROM_BANK`` u8 bank number 1463 ``ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS`` u8 page I2C address 1464 ======================================= ====== ========================== 1465 1466If ``ETHTOOL_A_MODULE_EEPROM_BANK`` is not specified, bank 0 is assumed. 1467 1468Kernel response contents: 1469 1470 +---------------------------------------------+--------+---------------------+ 1471 | ``ETHTOOL_A_MODULE_EEPROM_HEADER`` | nested | reply header | 1472 +---------------------------------------------+--------+---------------------+ 1473 | ``ETHTOOL_A_MODULE_EEPROM_DATA`` | binary | array of bytes from | 1474 | | | module EEPROM | 1475 +---------------------------------------------+--------+---------------------+ 1476 1477``ETHTOOL_A_MODULE_EEPROM_DATA`` has an attribute length equal to the amount of 1478bytes driver actually read. 1479 1480STATS_GET 1481========= 1482 1483Get standard statistics for the interface. Note that this is not 1484a re-implementation of ``ETHTOOL_GSTATS`` which exposed driver-defined 1485stats. 1486 1487Request contents: 1488 1489 ======================================= ====== ========================== 1490 ``ETHTOOL_A_STATS_HEADER`` nested request header 1491 ``ETHTOOL_A_STATS_GROUPS`` bitset requested groups of stats 1492 ======================================= ====== ========================== 1493 1494Kernel response contents: 1495 1496 +-----------------------------------+--------+--------------------------------+ 1497 | ``ETHTOOL_A_STATS_HEADER`` | nested | reply header | 1498 +-----------------------------------+--------+--------------------------------+ 1499 | ``ETHTOOL_A_STATS_GRP`` | nested | one or more group of stats | 1500 +-+---------------------------------+--------+--------------------------------+ 1501 | | ``ETHTOOL_A_STATS_GRP_ID`` | u32 | group ID - ``ETHTOOL_STATS_*`` | 1502 +-+---------------------------------+--------+--------------------------------+ 1503 | | ``ETHTOOL_A_STATS_GRP_SS_ID`` | u32 | string set ID for names | 1504 +-+---------------------------------+--------+--------------------------------+ 1505 | | ``ETHTOOL_A_STATS_GRP_STAT`` | nested | nest containing a statistic | 1506 +-+---------------------------------+--------+--------------------------------+ 1507 | | ``ETHTOOL_A_STATS_GRP_HIST_RX`` | nested | histogram statistic (Rx) | 1508 +-+---------------------------------+--------+--------------------------------+ 1509 | | ``ETHTOOL_A_STATS_GRP_HIST_TX`` | nested | histogram statistic (Tx) | 1510 +-+---------------------------------+--------+--------------------------------+ 1511 1512Users specify which groups of statistics they are requesting via 1513the ``ETHTOOL_A_STATS_GROUPS`` bitset. Currently defined values are: 1514 1515 ====================== ======== =============================================== 1516 ETHTOOL_STATS_ETH_MAC eth-mac Basic IEEE 802.3 MAC statistics (30.3.1.1.*) 1517 ETHTOOL_STATS_ETH_PHY eth-phy Basic IEEE 802.3 PHY statistics (30.3.2.1.*) 1518 ETHTOOL_STATS_ETH_CTRL eth-ctrl Basic IEEE 802.3 MAC Ctrl statistics (30.3.3.*) 1519 ETHTOOL_STATS_RMON rmon RMON (RFC 2819) statistics 1520 ====================== ======== =============================================== 1521 1522Each group should have a corresponding ``ETHTOOL_A_STATS_GRP`` in the reply. 1523``ETHTOOL_A_STATS_GRP_ID`` identifies which group's statistics nest contains. 1524``ETHTOOL_A_STATS_GRP_SS_ID`` identifies the string set ID for the names of 1525the statistics in the group, if available. 1526 1527Statistics are added to the ``ETHTOOL_A_STATS_GRP`` nest under 1528``ETHTOOL_A_STATS_GRP_STAT``. ``ETHTOOL_A_STATS_GRP_STAT`` should contain 1529single 8 byte (u64) attribute inside - the type of that attribute is 1530the statistic ID and the value is the value of the statistic. 1531Each group has its own interpretation of statistic IDs. 1532Attribute IDs correspond to strings from the string set identified 1533by ``ETHTOOL_A_STATS_GRP_SS_ID``. Complex statistics (such as RMON histogram 1534entries) are also listed inside ``ETHTOOL_A_STATS_GRP`` and do not have 1535a string defined in the string set. 1536 1537RMON "histogram" counters count number of packets within given size range. 1538Because RFC does not specify the ranges beyond the standard 1518 MTU devices 1539differ in definition of buckets. For this reason the definition of packet ranges 1540is left to each driver. 1541 1542``ETHTOOL_A_STATS_GRP_HIST_RX`` and ``ETHTOOL_A_STATS_GRP_HIST_TX`` nests 1543contain the following attributes: 1544 1545 ================================= ====== =================================== 1546 ETHTOOL_A_STATS_RMON_HIST_BKT_LOW u32 low bound of the packet size bucket 1547 ETHTOOL_A_STATS_RMON_HIST_BKT_HI u32 high bound of the bucket 1548 ETHTOOL_A_STATS_RMON_HIST_VAL u64 packet counter 1549 ================================= ====== =================================== 1550 1551Low and high bounds are inclusive, for example: 1552 1553 ============================= ==== ==== 1554 RFC statistic low high 1555 ============================= ==== ==== 1556 etherStatsPkts64Octets 0 64 1557 etherStatsPkts512to1023Octets 512 1023 1558 ============================= ==== ==== 1559 1560PHC_VCLOCKS_GET 1561=============== 1562 1563Query device PHC virtual clocks information. 1564 1565Request contents: 1566 1567 ==================================== ====== ========================== 1568 ``ETHTOOL_A_PHC_VCLOCKS_HEADER`` nested request header 1569 ==================================== ====== ========================== 1570 1571Kernel response contents: 1572 1573 ==================================== ====== ========================== 1574 ``ETHTOOL_A_PHC_VCLOCKS_HEADER`` nested reply header 1575 ``ETHTOOL_A_PHC_VCLOCKS_NUM`` u32 PHC virtual clocks number 1576 ``ETHTOOL_A_PHC_VCLOCKS_INDEX`` s32 PHC index array 1577 ==================================== ====== ========================== 1578 1579MODULE_GET 1580========== 1581 1582Gets transceiver module parameters. 1583 1584Request contents: 1585 1586 ===================================== ====== ========================== 1587 ``ETHTOOL_A_MODULE_HEADER`` nested request header 1588 ===================================== ====== ========================== 1589 1590Kernel response contents: 1591 1592 ====================================== ====== ========================== 1593 ``ETHTOOL_A_MODULE_HEADER`` nested reply header 1594 ``ETHTOOL_A_MODULE_POWER_MODE_POLICY`` u8 power mode policy 1595 ``ETHTOOL_A_MODULE_POWER_MODE`` u8 operational power mode 1596 ====================================== ====== ========================== 1597 1598The optional ``ETHTOOL_A_MODULE_POWER_MODE_POLICY`` attribute encodes the 1599transceiver module power mode policy enforced by the host. The default policy 1600is driver-dependent, but "auto" is the recommended default and it should be 1601implemented by new drivers and drivers where conformance to a legacy behavior 1602is not critical. 1603 1604The optional ``ETHTHOOL_A_MODULE_POWER_MODE`` attribute encodes the operational 1605power mode policy of the transceiver module. It is only reported when a module 1606is plugged-in. Possible values are: 1607 1608.. kernel-doc:: include/uapi/linux/ethtool.h 1609 :identifiers: ethtool_module_power_mode 1610 1611MODULE_SET 1612========== 1613 1614Sets transceiver module parameters. 1615 1616Request contents: 1617 1618 ====================================== ====== ========================== 1619 ``ETHTOOL_A_MODULE_HEADER`` nested request header 1620 ``ETHTOOL_A_MODULE_POWER_MODE_POLICY`` u8 power mode policy 1621 ====================================== ====== ========================== 1622 1623When set, the optional ``ETHTOOL_A_MODULE_POWER_MODE_POLICY`` attribute is used 1624to set the transceiver module power policy enforced by the host. Possible 1625values are: 1626 1627.. kernel-doc:: include/uapi/linux/ethtool.h 1628 :identifiers: ethtool_module_power_mode_policy 1629 1630For SFF-8636 modules, low power mode is forced by the host according to table 16316-10 in revision 2.10a of the specification. 1632 1633For CMIS modules, low power mode is forced by the host according to table 6-12 1634in revision 5.0 of the specification. 1635 1636PSE_GET 1637======= 1638 1639Gets PSE attributes. 1640 1641Request contents: 1642 1643 ===================================== ====== ========================== 1644 ``ETHTOOL_A_PSE_HEADER`` nested request header 1645 ===================================== ====== ========================== 1646 1647Kernel response contents: 1648 1649 ====================================== ====== ============================= 1650 ``ETHTOOL_A_PSE_HEADER`` nested reply header 1651 ``ETHTOOL_A_PODL_PSE_ADMIN_STATE`` u32 Operational state of the PoDL 1652 PSE functions 1653 ``ETHTOOL_A_PODL_PSE_PW_D_STATUS`` u32 power detection status of the 1654 PoDL PSE. 1655 ====================================== ====== ============================= 1656 1657When set, the optional ``ETHTOOL_A_PODL_PSE_ADMIN_STATE`` attribute identifies 1658the operational state of the PoDL PSE functions. The operational state of the 1659PSE function can be changed using the ``ETHTOOL_A_PODL_PSE_ADMIN_CONTROL`` 1660action. This option is corresponding to ``IEEE 802.3-2018`` 30.15.1.1.2 1661aPoDLPSEAdminState. Possible values are: 1662 1663.. kernel-doc:: include/uapi/linux/ethtool.h 1664 :identifiers: ethtool_podl_pse_admin_state 1665 1666When set, the optional ``ETHTOOL_A_PODL_PSE_PW_D_STATUS`` attribute identifies 1667the power detection status of the PoDL PSE. The status depend on internal PSE 1668state machine and automatic PD classification support. This option is 1669corresponding to ``IEEE 802.3-2018`` 30.15.1.1.3 aPoDLPSEPowerDetectionStatus. 1670Possible values are: 1671 1672.. kernel-doc:: include/uapi/linux/ethtool.h 1673 :identifiers: ethtool_podl_pse_pw_d_status 1674 1675PSE_SET 1676======= 1677 1678Sets PSE parameters. 1679 1680Request contents: 1681 1682 ====================================== ====== ============================= 1683 ``ETHTOOL_A_PSE_HEADER`` nested request header 1684 ``ETHTOOL_A_PODL_PSE_ADMIN_CONTROL`` u32 Control PoDL PSE Admin state 1685 ====================================== ====== ============================= 1686 1687When set, the optional ``ETHTOOL_A_PODL_PSE_ADMIN_CONTROL`` attribute is used 1688to control PoDL PSE Admin functions. This option is implementing 1689``IEEE 802.3-2018`` 30.15.1.2.1 acPoDLPSEAdminControl. See 1690``ETHTOOL_A_PODL_PSE_ADMIN_STATE`` for supported values. 1691 1692RSS_GET 1693======= 1694 1695Get indirection table, hash key and hash function info associated with a 1696RSS context of an interface similar to ``ETHTOOL_GRSSH`` ioctl request. 1697 1698Request contents: 1699 1700===================================== ====== ========================== 1701 ``ETHTOOL_A_RSS_HEADER`` nested request header 1702 ``ETHTOOL_A_RSS_CONTEXT`` u32 context number 1703===================================== ====== ========================== 1704 1705Kernel response contents: 1706 1707===================================== ====== ========================== 1708 ``ETHTOOL_A_RSS_HEADER`` nested reply header 1709 ``ETHTOOL_A_RSS_HFUNC`` u32 RSS hash func 1710 ``ETHTOOL_A_RSS_INDIR`` binary Indir table bytes 1711 ``ETHTOOL_A_RSS_HKEY`` binary Hash key bytes 1712===================================== ====== ========================== 1713 1714ETHTOOL_A_RSS_HFUNC attribute is bitmap indicating the hash function 1715being used. Current supported options are toeplitz, xor or crc32. 1716ETHTOOL_A_RSS_INDIR attribute returns RSS indrection table where each byte 1717indicates queue number. 1718 1719Request translation 1720=================== 1721 1722The following table maps ioctl commands to netlink commands providing their 1723functionality. Entries with "n/a" in right column are commands which do not 1724have their netlink replacement yet. Entries which "n/a" in the left column 1725are netlink only. 1726 1727 =================================== ===================================== 1728 ioctl command netlink command 1729 =================================== ===================================== 1730 ``ETHTOOL_GSET`` ``ETHTOOL_MSG_LINKINFO_GET`` 1731 ``ETHTOOL_MSG_LINKMODES_GET`` 1732 ``ETHTOOL_SSET`` ``ETHTOOL_MSG_LINKINFO_SET`` 1733 ``ETHTOOL_MSG_LINKMODES_SET`` 1734 ``ETHTOOL_GDRVINFO`` n/a 1735 ``ETHTOOL_GREGS`` n/a 1736 ``ETHTOOL_GWOL`` ``ETHTOOL_MSG_WOL_GET`` 1737 ``ETHTOOL_SWOL`` ``ETHTOOL_MSG_WOL_SET`` 1738 ``ETHTOOL_GMSGLVL`` ``ETHTOOL_MSG_DEBUG_GET`` 1739 ``ETHTOOL_SMSGLVL`` ``ETHTOOL_MSG_DEBUG_SET`` 1740 ``ETHTOOL_NWAY_RST`` n/a 1741 ``ETHTOOL_GLINK`` ``ETHTOOL_MSG_LINKSTATE_GET`` 1742 ``ETHTOOL_GEEPROM`` n/a 1743 ``ETHTOOL_SEEPROM`` n/a 1744 ``ETHTOOL_GCOALESCE`` ``ETHTOOL_MSG_COALESCE_GET`` 1745 ``ETHTOOL_SCOALESCE`` ``ETHTOOL_MSG_COALESCE_SET`` 1746 ``ETHTOOL_GRINGPARAM`` ``ETHTOOL_MSG_RINGS_GET`` 1747 ``ETHTOOL_SRINGPARAM`` ``ETHTOOL_MSG_RINGS_SET`` 1748 ``ETHTOOL_GPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_GET`` 1749 ``ETHTOOL_SPAUSEPARAM`` ``ETHTOOL_MSG_PAUSE_SET`` 1750 ``ETHTOOL_GRXCSUM`` ``ETHTOOL_MSG_FEATURES_GET`` 1751 ``ETHTOOL_SRXCSUM`` ``ETHTOOL_MSG_FEATURES_SET`` 1752 ``ETHTOOL_GTXCSUM`` ``ETHTOOL_MSG_FEATURES_GET`` 1753 ``ETHTOOL_STXCSUM`` ``ETHTOOL_MSG_FEATURES_SET`` 1754 ``ETHTOOL_GSG`` ``ETHTOOL_MSG_FEATURES_GET`` 1755 ``ETHTOOL_SSG`` ``ETHTOOL_MSG_FEATURES_SET`` 1756 ``ETHTOOL_TEST`` n/a 1757 ``ETHTOOL_GSTRINGS`` ``ETHTOOL_MSG_STRSET_GET`` 1758 ``ETHTOOL_PHYS_ID`` n/a 1759 ``ETHTOOL_GSTATS`` n/a 1760 ``ETHTOOL_GTSO`` ``ETHTOOL_MSG_FEATURES_GET`` 1761 ``ETHTOOL_STSO`` ``ETHTOOL_MSG_FEATURES_SET`` 1762 ``ETHTOOL_GPERMADDR`` rtnetlink ``RTM_GETLINK`` 1763 ``ETHTOOL_GUFO`` ``ETHTOOL_MSG_FEATURES_GET`` 1764 ``ETHTOOL_SUFO`` ``ETHTOOL_MSG_FEATURES_SET`` 1765 ``ETHTOOL_GGSO`` ``ETHTOOL_MSG_FEATURES_GET`` 1766 ``ETHTOOL_SGSO`` ``ETHTOOL_MSG_FEATURES_SET`` 1767 ``ETHTOOL_GFLAGS`` ``ETHTOOL_MSG_FEATURES_GET`` 1768 ``ETHTOOL_SFLAGS`` ``ETHTOOL_MSG_FEATURES_SET`` 1769 ``ETHTOOL_GPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_GET`` 1770 ``ETHTOOL_SPFLAGS`` ``ETHTOOL_MSG_PRIVFLAGS_SET`` 1771 ``ETHTOOL_GRXFH`` n/a 1772 ``ETHTOOL_SRXFH`` n/a 1773 ``ETHTOOL_GGRO`` ``ETHTOOL_MSG_FEATURES_GET`` 1774 ``ETHTOOL_SGRO`` ``ETHTOOL_MSG_FEATURES_SET`` 1775 ``ETHTOOL_GRXRINGS`` n/a 1776 ``ETHTOOL_GRXCLSRLCNT`` n/a 1777 ``ETHTOOL_GRXCLSRULE`` n/a 1778 ``ETHTOOL_GRXCLSRLALL`` n/a 1779 ``ETHTOOL_SRXCLSRLDEL`` n/a 1780 ``ETHTOOL_SRXCLSRLINS`` n/a 1781 ``ETHTOOL_FLASHDEV`` n/a 1782 ``ETHTOOL_RESET`` n/a 1783 ``ETHTOOL_SRXNTUPLE`` n/a 1784 ``ETHTOOL_GRXNTUPLE`` n/a 1785 ``ETHTOOL_GSSET_INFO`` ``ETHTOOL_MSG_STRSET_GET`` 1786 ``ETHTOOL_GRXFHINDIR`` n/a 1787 ``ETHTOOL_SRXFHINDIR`` n/a 1788 ``ETHTOOL_GFEATURES`` ``ETHTOOL_MSG_FEATURES_GET`` 1789 ``ETHTOOL_SFEATURES`` ``ETHTOOL_MSG_FEATURES_SET`` 1790 ``ETHTOOL_GCHANNELS`` ``ETHTOOL_MSG_CHANNELS_GET`` 1791 ``ETHTOOL_SCHANNELS`` ``ETHTOOL_MSG_CHANNELS_SET`` 1792 ``ETHTOOL_SET_DUMP`` n/a 1793 ``ETHTOOL_GET_DUMP_FLAG`` n/a 1794 ``ETHTOOL_GET_DUMP_DATA`` n/a 1795 ``ETHTOOL_GET_TS_INFO`` ``ETHTOOL_MSG_TSINFO_GET`` 1796 ``ETHTOOL_GMODULEINFO`` ``ETHTOOL_MSG_MODULE_EEPROM_GET`` 1797 ``ETHTOOL_GMODULEEEPROM`` ``ETHTOOL_MSG_MODULE_EEPROM_GET`` 1798 ``ETHTOOL_GEEE`` ``ETHTOOL_MSG_EEE_GET`` 1799 ``ETHTOOL_SEEE`` ``ETHTOOL_MSG_EEE_SET`` 1800 ``ETHTOOL_GRSSH`` ``ETHTOOL_MSG_RSS_GET`` 1801 ``ETHTOOL_SRSSH`` n/a 1802 ``ETHTOOL_GTUNABLE`` n/a 1803 ``ETHTOOL_STUNABLE`` n/a 1804 ``ETHTOOL_GPHYSTATS`` n/a 1805 ``ETHTOOL_PERQUEUE`` n/a 1806 ``ETHTOOL_GLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_GET`` 1807 ``ETHTOOL_MSG_LINKMODES_GET`` 1808 ``ETHTOOL_SLINKSETTINGS`` ``ETHTOOL_MSG_LINKINFO_SET`` 1809 ``ETHTOOL_MSG_LINKMODES_SET`` 1810 ``ETHTOOL_PHY_GTUNABLE`` n/a 1811 ``ETHTOOL_PHY_STUNABLE`` n/a 1812 ``ETHTOOL_GFECPARAM`` ``ETHTOOL_MSG_FEC_GET`` 1813 ``ETHTOOL_SFECPARAM`` ``ETHTOOL_MSG_FEC_SET`` 1814 n/a ``ETHTOOL_MSG_CABLE_TEST_ACT`` 1815 n/a ``ETHTOOL_MSG_CABLE_TEST_TDR_ACT`` 1816 n/a ``ETHTOOL_MSG_TUNNEL_INFO_GET`` 1817 n/a ``ETHTOOL_MSG_PHC_VCLOCKS_GET`` 1818 n/a ``ETHTOOL_MSG_MODULE_GET`` 1819 n/a ``ETHTOOL_MSG_MODULE_SET`` 1820 =================================== ===================================== 1821