Some PHYs provide Signal Quality Index (SQI) if the link is in active state. This information can help to diagnose cable and system design related issues.
Signed-off-by: Oleksij Rempel <o.rem...@pengutronix.de> Reviewed-by: Florian Fainelli <f.faine...@gmail.com> --- netlink/desc-ethtool.c | 2 ++ netlink/settings.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c index b0a793c..8f4c36b 100644 --- a/netlink/desc-ethtool.c +++ b/netlink/desc-ethtool.c @@ -93,6 +93,8 @@ static const struct pretty_nla_desc __linkstate_desc[] = { NLATTR_DESC_INVALID(ETHTOOL_A_LINKSTATE_UNSPEC), NLATTR_DESC_NESTED(ETHTOOL_A_LINKSTATE_HEADER, header), NLATTR_DESC_BOOL(ETHTOOL_A_LINKSTATE_LINK), + NLATTR_DESC_U32(ETHTOOL_A_LINKSTATE_SQI), + NLATTR_DESC_U32(ETHTOOL_A_LINKSTATE_SQI_MAX), }; static const struct pretty_nla_desc __debug_desc[] = { diff --git a/netlink/settings.c b/netlink/settings.c index 851de15..cd4b9a7 100644 --- a/netlink/settings.c +++ b/netlink/settings.c @@ -638,6 +638,22 @@ int linkstate_reply_cb(const struct nlmsghdr *nlhdr, void *data) printf("\tLink detected: %s\n", val ? "yes" : "no"); } + if (tb[ETHTOOL_A_LINKSTATE_SQI]) { + uint32_t val = mnl_attr_get_u32(tb[ETHTOOL_A_LINKSTATE_SQI]); + + print_banner(nlctx); + printf("\tSQI: %u", val); + + if (tb[ETHTOOL_A_LINKSTATE_SQI_MAX]) { + uint32_t max; + + max = mnl_attr_get_u32(tb[ETHTOOL_A_LINKSTATE_SQI_MAX]); + printf("/%u\n", max); + } else { + printf("\n"); + } + } + return MNL_CB_OK; } -- 2.26.2