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 <[email protected]>
Reviewed-by: Florian Fainelli <[email protected]>
---
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
On Thu, May 28, 2020 at 01:54:14PM +0200, Oleksij Rempel wrote:
> 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 <[email protected]>
> Reviewed-by: Florian Fainelli <[email protected]>
Reviewed-by: Michal Kubecek <[email protected]>
> ---
> 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
>