History

ethtool: Add link extended state

Currently, drivers can only tell whether the link is up/down using LINKSTATE_GET, but no additional information is given. Add attributes to LINKSTATE_GET command in order to allow drivers to expose the user more information in addition to link state to ease the debug process, for example, reason for link down state. Extended state consists of two attributes - link_ext_state and link_ext_substate. The idea is to avoid 'vendor specific' states in order to prevent drivers to use specific link_ext_state that can be in the future common link_ext_state. The substates allows drivers to add more information to the common link_ext_state. For example, vendor can expose 'Autoneg' as link_ext_state and add 'No partner detected during force mode' as link_ext_substate. If a driver cannot pinpoint the extended state with the substate accuracy, it is free to expose only the extended state and omit the substate attribute.

Amit Cohen committed 6 years ago

Commit ecc31c61 parent e120c804 files · +143 −4Browse files

Showing the changes to include/uapi/linux (2 of 4 files). Show all

Unified · Split

2 files
  1. include/uapi/linux/ethtool.h +70 −0
  2. include/uapi/linux/ethtool_netlink.h +2 −0
include/uapi/linux/ethtool.h+70−0
@@ -579,6 +579,76 @@ struct ethtool_pauseparam { · 578 unmodified lines
579 __u32 tx_pause;579 __u32 tx_pause;
580};580};
581 581
582/**
583 * enum ethtool_link_ext_state - link extended state
584 */
585enum ethtool_link_ext_state {
586 ETHTOOL_LINK_EXT_STATE_AUTONEG,
587 ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE,
588 ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH,
589 ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY,
590 ETHTOOL_LINK_EXT_STATE_NO_CABLE,
591 ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE,
592 ETHTOOL_LINK_EXT_STATE_EEPROM_ISSUE,
593 ETHTOOL_LINK_EXT_STATE_CALIBRATION_FAILURE,
594 ETHTOOL_LINK_EXT_STATE_POWER_BUDGET_EXCEEDED,
595 ETHTOOL_LINK_EXT_STATE_OVERHEAT,
596};
597
598/**
599 * enum ethtool_link_ext_substate_autoneg - more information in addition to
600 * ETHTOOL_LINK_EXT_STATE_AUTONEG.
601 */
602enum ethtool_link_ext_substate_autoneg {
603 ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED = 1,
604 ETHTOOL_LINK_EXT_SUBSTATE_AN_ACK_NOT_RECEIVED,
605 ETHTOOL_LINK_EXT_SUBSTATE_AN_NEXT_PAGE_EXCHANGE_FAILED,
606 ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_PARTNER_DETECTED_FORCE_MODE,
607 ETHTOOL_LINK_EXT_SUBSTATE_AN_FEC_MISMATCH_DURING_OVERRIDE,
608 ETHTOOL_LINK_EXT_SUBSTATE_AN_NO_HCD,
609};
610
611/**
612 * enum ethtool_link_ext_substate_link_training - more information in addition to
613 * ETHTOOL_LINK_EXT_STATE_LINK_TRAINING_FAILURE.
614 */
615enum ethtool_link_ext_substate_link_training {
616 ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_FRAME_LOCK_NOT_ACQUIRED = 1,
617 ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_INHIBIT_TIMEOUT,
618 ETHTOOL_LINK_EXT_SUBSTATE_LT_KR_LINK_PARTNER_DID_NOT_SET_RECEIVER_READY,
619 ETHTOOL_LINK_EXT_SUBSTATE_LT_REMOTE_FAULT,
620};
621
622/**
623 * enum ethtool_link_ext_substate_logical_mismatch - more information in addition
624 * to ETHTOOL_LINK_EXT_STATE_LINK_LOGICAL_MISMATCH.
625 */
626enum ethtool_link_ext_substate_link_logical_mismatch {
627 ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_BLOCK_LOCK = 1,
628 ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_ACQUIRE_AM_LOCK,
629 ETHTOOL_LINK_EXT_SUBSTATE_LLM_PCS_DID_NOT_GET_ALIGN_STATUS,
630 ETHTOOL_LINK_EXT_SUBSTATE_LLM_FC_FEC_IS_NOT_LOCKED,
631 ETHTOOL_LINK_EXT_SUBSTATE_LLM_RS_FEC_IS_NOT_LOCKED,
632};
633
634/**
635 * enum ethtool_link_ext_substate_bad_signal_integrity - more information in
636 * addition to ETHTOOL_LINK_EXT_STATE_BAD_SIGNAL_INTEGRITY.
637 */
638enum ethtool_link_ext_substate_bad_signal_integrity {
639 ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1,
640 ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE,
641};
642
643/**
644 * enum ethtool_link_ext_substate_cable_issue - more information in
645 * addition to ETHTOOL_LINK_EXT_STATE_CABLE_ISSUE.
646 */
647enum ethtool_link_ext_substate_cable_issue {
648 ETHTOOL_LINK_EXT_SUBSTATE_CI_UNSUPPORTED_CABLE = 1,
649 ETHTOOL_LINK_EXT_SUBSTATE_CI_CABLE_TEST_FAILURE,
650};
651
582#define ETH_GSTRING_LEN 32652#define ETH_GSTRING_LEN 32
583 653
584/**654/**
include/uapi/linux/ethtool_netlink.h+2−0
@@ -236,6 +236,8 @@ enum { · 235 unmodified lines
236 ETHTOOL_A_LINKSTATE_LINK, /* u8 */236 ETHTOOL_A_LINKSTATE_LINK, /* u8 */
237 ETHTOOL_A_LINKSTATE_SQI, /* u32 */237 ETHTOOL_A_LINKSTATE_SQI, /* u32 */
238 ETHTOOL_A_LINKSTATE_SQI_MAX, /* u32 */238 ETHTOOL_A_LINKSTATE_SQI_MAX, /* u32 */
239 ETHTOOL_A_LINKSTATE_EXT_STATE, /* u8 */
240 ETHTOOL_A_LINKSTATE_EXT_SUBSTATE, /* u8 */
239 241
240 /* add new constants above here */242 /* add new constants above here */
241 __ETHTOOL_A_LINKSTATE_CNT,243 __ETHTOOL_A_LINKSTATE_CNT,