2020-05-28 11:58:09

by Oleksij Rempel

[permalink] [raw]
Subject: [PATCH v2 3/3] netlink: add LINKSTATE SQI support

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


2020-06-07 20:27:31

by Michal Kubecek

[permalink] [raw]
Subject: Re: [PATCH v2 3/3] netlink: add LINKSTATE SQI support

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
>


Attachments:
(No filename) (1.82 kB)
signature.asc (499.00 B)
Download all attachments