Blame SOURCES/0034-netlink-support-u32-enumerated-types-in-pretty-print.patch

268297
From 856c0c40eb221499b7326c216aaf87691062eacb Mon Sep 17 00:00:00 2001
268297
From: Michal Kubecek <mkubecek@suse.cz>
268297
Date: Mon, 19 Oct 2020 23:32:40 +0200
268297
Subject: [PATCH 34/37] netlink: support u32 enumerated types in pretty
268297
 printing
268297
268297
Some numeric attributes take values from a short list/range with symbolic
268297
names. Showing the symbolic names instead of numeric values will make the
268297
pretty printed netlink messages easier to read. If the value is too big for
268297
provided names array (e.g. running on newer kernel) or the name is omitted,
268297
numeric attribute value is shown.
268297
268297
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
268297
(cherry picked from commit c7fe2f38477f5f90569f73bacd6fab3a8a739f62)
268297
---
268297
 netlink/prettymsg.c |  9 +++++++++
268297
 netlink/prettymsg.h | 18 ++++++++++++++++--
268297
 2 files changed, 25 insertions(+), 2 deletions(-)
268297
268297
diff --git a/netlink/prettymsg.c b/netlink/prettymsg.c
268297
index f992dcaf071f..d5d999fddfbb 100644
268297
--- a/netlink/prettymsg.c
268297
+++ b/netlink/prettymsg.c
268297
@@ -137,6 +137,15 @@ static int pretty_print_attr(const struct nlattr *attr,
268297
 	case NLA_BOOL:
268297
 		printf("%s", mnl_attr_get_u8(attr) ? "on" : "off");
268297
 		break;
268297
+	case NLA_U32_ENUM: {
268297
+		uint32_t val = mnl_attr_get_u32(attr);
268297
+
268297
+		if (adesc && val < adesc->n_names && adesc->names[val])
268297
+			printf("%s", adesc->names[val]);
268297
+		else
268297
+			printf("%u", val);
268297
+		break;
268297
+	}
268297
 	default:
268297
 		if (alen <= __DUMP_LINE)
268297
 			__print_binary_short(adata, alen);
268297
diff --git a/netlink/prettymsg.h b/netlink/prettymsg.h
268297
index b5e5f735ac8a..6987c6ec5bca 100644
268297
--- a/netlink/prettymsg.h
268297
+++ b/netlink/prettymsg.h
268297
@@ -28,13 +28,20 @@ enum pretty_nla_format {
268297
 	NLA_BOOL,
268297
 	NLA_NESTED,
268297
 	NLA_ARRAY,
268297
+	NLA_U32_ENUM,
268297
 };
268297
 
268297
 struct pretty_nla_desc {
268297
 	enum pretty_nla_format		format;
268297
 	const char			*name;
268297
-	const struct pretty_nla_desc	*children;
268297
-	unsigned int			n_children;
268297
+	union {
268297
+		const struct pretty_nla_desc	*children;
268297
+		const char			*const *names;
268297
+	};
268297
+	union {
268297
+		unsigned int			n_children;
268297
+		unsigned int			n_names;
268297
+	};
268297
 };
268297
 
268297
 struct pretty_nlmsg_desc {
268297
@@ -81,6 +88,13 @@ struct pretty_nlmsg_desc {
268297
 		.children = __ ## _children_desc ## _desc, \
268297
 		.n_children = 1, \
268297
 	}
268297
+#define NLATTR_DESC_U32_ENUM(_name, _names_table) \
268297
+	[_name] = { \
268297
+		.format = NLA_U32_ENUM, \
268297
+		.name = #_name, \
268297
+		.names = __ ## _names_table ## _names, \
268297
+		.n_children = ARRAY_SIZE(__ ## _names_table ## _names), \
268297
+	}
268297
 
268297
 #define NLMSG_DESC(_name, _attrs) \
268297
 	[_name] = { \
268297
-- 
268297
2.26.2
268297