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