netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH ethtool 0/4] add missing message descriptions
@ 2020-10-19 21:32 Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 1/4] netlink: support u32 enumerated types in pretty printing Michal Kubecek
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Michal Kubecek @ 2020-10-19 21:32 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski

Add message descriptions needed for pretty printing of netlink messages
related to recently added features: genetlink policy dumps and pause frame
statistics. First two patches extend pretty printing code with features
used by these descriptions: support for 64-bit numeric attributes and
and enumerated types (shown as symbolic names rather than numeric values).

Michal Kubecek (4):
  netlink: support u32 enumerated types in pretty printing
  netlink: support 64-bit attribute types in pretty printed messages
  netlink: add descriptions for genetlink policy dumps
  netlink: add message descriptions for pause stats

 netlink/desc-ethtool.c  |  7 +++++
 netlink/desc-genlctrl.c | 57 +++++++++++++++++++++++++++++++++++++++++
 netlink/prettymsg.c     | 19 ++++++++++++++
 netlink/prettymsg.h     | 24 +++++++++++++++--
 4 files changed, 105 insertions(+), 2 deletions(-)

-- 
2.28.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH ethtool 1/4] netlink: support u32 enumerated types in pretty printing
  2020-10-19 21:32 [PATCH ethtool 0/4] add missing message descriptions Michal Kubecek
@ 2020-10-19 21:32 ` Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 2/4] netlink: support 64-bit attribute types in pretty printed messages Michal Kubecek
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Michal Kubecek @ 2020-10-19 21:32 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski

Some numeric attributes take values from a short list/range with symbolic
names. Showing the symbolic names instead of numeric values will make the
pretty printed netlink messages easier to read. If the value is too big for
provided names array (e.g. running on newer kernel) or the name is omitted,
numeric attribute value is shown.

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
---
 netlink/prettymsg.c |  9 +++++++++
 netlink/prettymsg.h | 18 ++++++++++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/netlink/prettymsg.c b/netlink/prettymsg.c
index f992dcaf071f..d5d999fddfbb 100644
--- a/netlink/prettymsg.c
+++ b/netlink/prettymsg.c
@@ -137,6 +137,15 @@ static int pretty_print_attr(const struct nlattr *attr,
 	case NLA_BOOL:
 		printf("%s", mnl_attr_get_u8(attr) ? "on" : "off");
 		break;
+	case NLA_U32_ENUM: {
+		uint32_t val = mnl_attr_get_u32(attr);
+
+		if (adesc && val < adesc->n_names && adesc->names[val])
+			printf("%s", adesc->names[val]);
+		else
+			printf("%u", val);
+		break;
+	}
 	default:
 		if (alen <= __DUMP_LINE)
 			__print_binary_short(adata, alen);
diff --git a/netlink/prettymsg.h b/netlink/prettymsg.h
index b5e5f735ac8a..6987c6ec5bca 100644
--- a/netlink/prettymsg.h
+++ b/netlink/prettymsg.h
@@ -28,13 +28,20 @@ enum pretty_nla_format {
 	NLA_BOOL,
 	NLA_NESTED,
 	NLA_ARRAY,
+	NLA_U32_ENUM,
 };
 
 struct pretty_nla_desc {
 	enum pretty_nla_format		format;
 	const char			*name;
-	const struct pretty_nla_desc	*children;
-	unsigned int			n_children;
+	union {
+		const struct pretty_nla_desc	*children;
+		const char			*const *names;
+	};
+	union {
+		unsigned int			n_children;
+		unsigned int			n_names;
+	};
 };
 
 struct pretty_nlmsg_desc {
@@ -81,6 +88,13 @@ struct pretty_nlmsg_desc {
 		.children = __ ## _children_desc ## _desc, \
 		.n_children = 1, \
 	}
+#define NLATTR_DESC_U32_ENUM(_name, _names_table) \
+	[_name] = { \
+		.format = NLA_U32_ENUM, \
+		.name = #_name, \
+		.names = __ ## _names_table ## _names, \
+		.n_children = ARRAY_SIZE(__ ## _names_table ## _names), \
+	}
 
 #define NLMSG_DESC(_name, _attrs) \
 	[_name] = { \
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 2/4] netlink: support 64-bit attribute types in pretty printed messages
  2020-10-19 21:32 [PATCH ethtool 0/4] add missing message descriptions Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 1/4] netlink: support u32 enumerated types in pretty printing Michal Kubecek
@ 2020-10-19 21:32 ` Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 3/4] netlink: add descriptions for genetlink policy dumps Michal Kubecek
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Michal Kubecek @ 2020-10-19 21:32 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski

Add NLA_U64 (unsigned), NLA_X64 (unsigned, printed as hex) and NLA_S64
(signed) attribute types in pretty printing code.

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
---
 netlink/prettymsg.c | 10 ++++++++++
 netlink/prettymsg.h |  6 ++++++
 2 files changed, 16 insertions(+)

diff --git a/netlink/prettymsg.c b/netlink/prettymsg.c
index d5d999fddfbb..0a1fae3da54e 100644
--- a/netlink/prettymsg.c
+++ b/netlink/prettymsg.c
@@ -9,6 +9,7 @@
 #include <errno.h>
 #include <stdint.h>
 #include <limits.h>
+#include <inttypes.h>
 #include <linux/genetlink.h>
 #include <linux/rtnetlink.h>
 #include <linux/if_link.h>
@@ -110,6 +111,9 @@ static int pretty_print_attr(const struct nlattr *attr,
 	case NLA_U32:
 		printf("%u", mnl_attr_get_u32(attr));
 		break;
+	case NLA_U64:
+		printf("%" PRIu64, mnl_attr_get_u64(attr));
+		break;
 	case NLA_X8:
 		printf("0x%02x", mnl_attr_get_u8(attr));
 		break;
@@ -119,6 +123,9 @@ static int pretty_print_attr(const struct nlattr *attr,
 	case NLA_X32:
 		printf("0x%08x", mnl_attr_get_u32(attr));
 		break;
+	case NLA_X64:
+		printf("%" PRIx64, mnl_attr_get_u64(attr));
+		break;
 	case NLA_S8:
 		printf("%d", (int)mnl_attr_get_u8(attr));
 		break;
@@ -128,6 +135,9 @@ static int pretty_print_attr(const struct nlattr *attr,
 	case NLA_S32:
 		printf("%d", (int)mnl_attr_get_u32(attr));
 		break;
+	case NLA_S64:
+		printf("%" PRId64, (int64_t)mnl_attr_get_u64(attr));
+		break;
 	case NLA_STRING:
 		printf("\"%.*s\"", alen, (const char *)adata);
 		break;
diff --git a/netlink/prettymsg.h b/netlink/prettymsg.h
index 6987c6ec5bca..25990cceffca 100644
--- a/netlink/prettymsg.h
+++ b/netlink/prettymsg.h
@@ -17,12 +17,15 @@ enum pretty_nla_format {
 	NLA_U8,
 	NLA_U16,
 	NLA_U32,
+	NLA_U64,
 	NLA_X8,
 	NLA_X16,
 	NLA_X32,
+	NLA_X64,
 	NLA_S8,
 	NLA_S16,
 	NLA_S32,
+	NLA_S64,
 	NLA_STRING,
 	NLA_FLAG,
 	NLA_BOOL,
@@ -62,12 +65,15 @@ struct pretty_nlmsg_desc {
 #define NLATTR_DESC_U8(_name)		NLATTR_DESC(_name, NLA_U8)
 #define NLATTR_DESC_U16(_name)		NLATTR_DESC(_name, NLA_U16)
 #define NLATTR_DESC_U32(_name)		NLATTR_DESC(_name, NLA_U32)
+#define NLATTR_DESC_U64(_name)		NLATTR_DESC(_name, NLA_U64)
 #define NLATTR_DESC_X8(_name)		NLATTR_DESC(_name, NLA_X8)
 #define NLATTR_DESC_X16(_name)		NLATTR_DESC(_name, NLA_X16)
 #define NLATTR_DESC_X32(_name)		NLATTR_DESC(_name, NLA_X32)
+#define NLATTR_DESC_X64(_name)		NLATTR_DESC(_name, NLA_X64)
 #define NLATTR_DESC_S8(_name)		NLATTR_DESC(_name, NLA_U8)
 #define NLATTR_DESC_S16(_name)		NLATTR_DESC(_name, NLA_U16)
 #define NLATTR_DESC_S32(_name)		NLATTR_DESC(_name, NLA_U32)
+#define NLATTR_DESC_S64(_name)		NLATTR_DESC(_name, NLA_S64)
 #define NLATTR_DESC_STRING(_name)	NLATTR_DESC(_name, NLA_STRING)
 #define NLATTR_DESC_FLAG(_name)		NLATTR_DESC(_name, NLA_FLAG)
 #define NLATTR_DESC_BOOL(_name)		NLATTR_DESC(_name, NLA_BOOL)
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 3/4] netlink: add descriptions for genetlink policy dumps
  2020-10-19 21:32 [PATCH ethtool 0/4] add missing message descriptions Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 1/4] netlink: support u32 enumerated types in pretty printing Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 2/4] netlink: support 64-bit attribute types in pretty printed messages Michal Kubecek
@ 2020-10-19 21:32 ` Michal Kubecek
  2020-10-19 21:32 ` [PATCH ethtool 4/4] netlink: add message descriptions for pause stats Michal Kubecek
  2020-10-20 21:51 ` [PATCH ethtool 0/4] add missing message descriptions Jakub Kicinski
  4 siblings, 0 replies; 6+ messages in thread
From: Michal Kubecek @ 2020-10-19 21:32 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski

Add GENL_ID_CTRL message descriptions for messages and attributes used
for policy dumps.

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
---
 netlink/desc-genlctrl.c | 57 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/netlink/desc-genlctrl.c b/netlink/desc-genlctrl.c
index 9840179b0a1a..43b41ab395b8 100644
--- a/netlink/desc-genlctrl.c
+++ b/netlink/desc-genlctrl.c
@@ -29,6 +29,59 @@ static const struct pretty_nla_desc __mcgrps_desc[] = {
 	NLATTR_DESC_NESTED(0, mcgrp),
 };
 
+static const char *__policy_attr_type_names[] = {
+	[NL_ATTR_TYPE_INVALID]		= "NL_ATTR_TYPE_INVALID",
+	[NL_ATTR_TYPE_FLAG]		= "NL_ATTR_TYPE_FLAG",
+	[NL_ATTR_TYPE_U8]		= "NL_ATTR_TYPE_U8",
+	[NL_ATTR_TYPE_U16]		= "NL_ATTR_TYPE_U16",
+	[NL_ATTR_TYPE_U32]		= "NL_ATTR_TYPE_U32",
+	[NL_ATTR_TYPE_U64]		= "NL_ATTR_TYPE_U64",
+	[NL_ATTR_TYPE_S8]		= "NL_ATTR_TYPE_S8",
+	[NL_ATTR_TYPE_S16]		= "NL_ATTR_TYPE_S16",
+	[NL_ATTR_TYPE_S32]		= "NL_ATTR_TYPE_S32",
+	[NL_ATTR_TYPE_S64]		= "NL_ATTR_TYPE_S64",
+	[NL_ATTR_TYPE_BINARY]		= "NL_ATTR_TYPE_BINARY",
+	[NL_ATTR_TYPE_STRING]		= "NL_ATTR_TYPE_STRING",
+	[NL_ATTR_TYPE_NUL_STRING]	= "NL_ATTR_TYPE_NUL_STRING",
+	[NL_ATTR_TYPE_NESTED]		= "NL_ATTR_TYPE_NESTED",
+	[NL_ATTR_TYPE_NESTED_ARRAY]	= "NL_ATTR_TYPE_NESTED_ARRAY",
+	[NL_ATTR_TYPE_BITFIELD32]	= "NL_ATTR_TYPE_BITFIELD32",
+};
+
+static const struct pretty_nla_desc __policy_attr_desc[] = {
+	NLATTR_DESC_INVALID(NL_POLICY_TYPE_ATTR_UNSPEC),
+	NLATTR_DESC_U32_ENUM(NL_POLICY_TYPE_ATTR_TYPE, policy_attr_type),
+	NLATTR_DESC_S64(NL_POLICY_TYPE_ATTR_MIN_VALUE_S),
+	NLATTR_DESC_S64(NL_POLICY_TYPE_ATTR_MAX_VALUE_S),
+	NLATTR_DESC_U64(NL_POLICY_TYPE_ATTR_MIN_VALUE_U),
+	NLATTR_DESC_U64(NL_POLICY_TYPE_ATTR_MAX_VALUE_U),
+	NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_MIN_LENGTH),
+	NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_MAX_LENGTH),
+	NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_POLICY_IDX),
+	NLATTR_DESC_U32(NL_POLICY_TYPE_ATTR_POLICY_MAXTYPE),
+	NLATTR_DESC_X32(NL_POLICY_TYPE_ATTR_BITFIELD32_MASK),
+	NLATTR_DESC_X64(NL_POLICY_TYPE_ATTR_PAD),
+	NLATTR_DESC_BINARY(NL_POLICY_TYPE_ATTR_MASK),
+};
+
+static const struct pretty_nla_desc __policy_attrs_desc[] = {
+	NLATTR_DESC_NESTED(0, policy_attr),
+};
+
+static const struct pretty_nla_desc __policies_desc[] = {
+	NLATTR_DESC_ARRAY(0, policy_attrs),
+};
+
+static const struct pretty_nla_desc __op_policy_desc[] = {
+	NLATTR_DESC_INVALID(CTRL_ATTR_POLICY_UNSPEC),
+	NLATTR_DESC_U32(CTRL_ATTR_POLICY_DO),
+	NLATTR_DESC_U32(CTRL_ATTR_POLICY_DUMP),
+};
+
+static const struct pretty_nla_desc __op_policies_desc[] = {
+	NLATTR_DESC_NESTED(0, op_policy),
+};
+
 static const struct pretty_nla_desc __attr_desc[] = {
 	NLATTR_DESC_INVALID(CTRL_ATTR_UNSPEC),
 	NLATTR_DESC_U16(CTRL_ATTR_FAMILY_ID),
@@ -38,6 +91,9 @@ static const struct pretty_nla_desc __attr_desc[] = {
 	NLATTR_DESC_U32(CTRL_ATTR_MAXATTR),
 	NLATTR_DESC_ARRAY(CTRL_ATTR_OPS, attrops),
 	NLATTR_DESC_ARRAY(CTRL_ATTR_MCAST_GROUPS, mcgrps),
+	NLATTR_DESC_ARRAY(CTRL_ATTR_POLICY, policies),
+	NLATTR_DESC_ARRAY(CTRL_ATTR_OP_POLICY, op_policies),
+	NLATTR_DESC_U32(CTRL_ATTR_OP),
 };
 
 const struct pretty_nlmsg_desc genlctrl_msg_desc[] = {
@@ -51,6 +107,7 @@ const struct pretty_nlmsg_desc genlctrl_msg_desc[] = {
 	NLMSG_DESC(CTRL_CMD_NEWMCAST_GRP, attr),
 	NLMSG_DESC(CTRL_CMD_DELMCAST_GRP, attr),
 	NLMSG_DESC(CTRL_CMD_GETMCAST_GRP, attr),
+	NLMSG_DESC(CTRL_CMD_GETPOLICY, attr),
 };
 
 const unsigned int genlctrl_msg_n_desc = ARRAY_SIZE(genlctrl_msg_desc);
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH ethtool 4/4] netlink: add message descriptions for pause stats
  2020-10-19 21:32 [PATCH ethtool 0/4] add missing message descriptions Michal Kubecek
                   ` (2 preceding siblings ...)
  2020-10-19 21:32 ` [PATCH ethtool 3/4] netlink: add descriptions for genetlink policy dumps Michal Kubecek
@ 2020-10-19 21:32 ` Michal Kubecek
  2020-10-20 21:51 ` [PATCH ethtool 0/4] add missing message descriptions Jakub Kicinski
  4 siblings, 0 replies; 6+ messages in thread
From: Michal Kubecek @ 2020-10-19 21:32 UTC (permalink / raw)
  To: netdev; +Cc: Jakub Kicinski

Add message descriptions for pretty printing of new attributes used for pause
statistics.

Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
---
 netlink/desc-ethtool.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/netlink/desc-ethtool.c b/netlink/desc-ethtool.c
index ee8fc4796987..96291b9bdd3b 100644
--- a/netlink/desc-ethtool.c
+++ b/netlink/desc-ethtool.c
@@ -180,12 +180,19 @@ static const struct pretty_nla_desc __coalesce_desc[] = {
 	NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL),
 };
 
+static const struct pretty_nla_desc __pause_stats_desc[] = {
+	NLATTR_DESC_BINARY(ETHTOOL_A_PAUSE_STAT_PAD),
+	NLATTR_DESC_U64(ETHTOOL_A_PAUSE_STAT_TX_FRAMES),
+	NLATTR_DESC_U64(ETHTOOL_A_PAUSE_STAT_RX_FRAMES),
+};
+
 static const struct pretty_nla_desc __pause_desc[] = {
 	NLATTR_DESC_INVALID(ETHTOOL_A_PAUSE_UNSPEC),
 	NLATTR_DESC_NESTED(ETHTOOL_A_PAUSE_HEADER, header),
 	NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_AUTONEG),
 	NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_RX),
 	NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_TX),
+	NLATTR_DESC_NESTED(ETHTOOL_A_PAUSE_STATS, pause_stats),
 };
 
 static const struct pretty_nla_desc __eee_desc[] = {
-- 
2.28.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH ethtool 0/4] add missing message descriptions
  2020-10-19 21:32 [PATCH ethtool 0/4] add missing message descriptions Michal Kubecek
                   ` (3 preceding siblings ...)
  2020-10-19 21:32 ` [PATCH ethtool 4/4] netlink: add message descriptions for pause stats Michal Kubecek
@ 2020-10-20 21:51 ` Jakub Kicinski
  4 siblings, 0 replies; 6+ messages in thread
From: Jakub Kicinski @ 2020-10-20 21:51 UTC (permalink / raw)
  To: Michal Kubecek; +Cc: netdev

On Mon, 19 Oct 2020 23:32:37 +0200 (CEST) Michal Kubecek wrote:
> Add message descriptions needed for pretty printing of netlink messages
> related to recently added features: genetlink policy dumps and pause frame
> statistics. First two patches extend pretty printing code with features
> used by these descriptions: support for 64-bit numeric attributes and
> and enumerated types (shown as symbolic names rather than numeric values).

Nice! I haven't crossed checked all the types but FWIW LGTM.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-10-20 21:51 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-10-19 21:32 [PATCH ethtool 0/4] add missing message descriptions Michal Kubecek
2020-10-19 21:32 ` [PATCH ethtool 1/4] netlink: support u32 enumerated types in pretty printing Michal Kubecek
2020-10-19 21:32 ` [PATCH ethtool 2/4] netlink: support 64-bit attribute types in pretty printed messages Michal Kubecek
2020-10-19 21:32 ` [PATCH ethtool 3/4] netlink: add descriptions for genetlink policy dumps Michal Kubecek
2020-10-19 21:32 ` [PATCH ethtool 4/4] netlink: add message descriptions for pause stats Michal Kubecek
2020-10-20 21:51 ` [PATCH ethtool 0/4] add missing message descriptions Jakub Kicinski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).