naccyde / rpms / iproute

Forked from rpms/iproute 5 months ago
Clone

Blame SOURCES/0190-devlink-introduce-helper-to-print-out-nice-names-ifn.patch

049c96
From 8dfa9a148b54fb2c7d58a5a391c8477fc75d9061 Mon Sep 17 00:00:00 2001
049c96
From: Phil Sutter <psutter@redhat.com>
049c96
Date: Sat, 9 Jul 2016 11:33:14 +0200
049c96
Subject: [PATCH] devlink: introduce helper to print out nice names (ifnames)
049c96
049c96
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1342515
049c96
Upstream Status: iproute2.git commit 43f35be4ebb63
049c96
049c96
commit 43f35be4ebb63bf5dea9cc0570ba8d15458d2457
049c96
Author: Jiri Pirko <jiri@mellanox.com>
049c96
Date:   Fri Apr 15 09:51:47 2016 +0200
049c96
049c96
    devlink: introduce helper to print out nice names (ifnames)
049c96
049c96
    By default, ifnames will be printed out. User can turn that off using
049c96
    "-n" option on the command line.
049c96
049c96
    Signed-off-by: Jiri Pirko <jiri@mellanox.com>
049c96
---
049c96
 devlink/devlink.c       | 90 +++++++++++++++++++++++++++++++++++++++++++------
049c96
 man/man8/devlink-dev.8  |  1 +
049c96
 man/man8/devlink-port.8 |  1 +
049c96
 man/man8/devlink.8      |  5 +++
049c96
 4 files changed, 86 insertions(+), 11 deletions(-)
049c96
049c96
diff --git a/devlink/devlink.c b/devlink/devlink.c
049c96
index 0904e07..5e08666 100644
049c96
--- a/devlink/devlink.c
049c96
+++ b/devlink/devlink.c
049c96
@@ -114,6 +114,7 @@ struct dl {
049c96
 	struct list_head ifname_map_list;
049c96
 	int argc;
049c96
 	char **argv;
049c96
+	bool no_nice_names;
049c96
 };
049c96
 
049c96
 static int dl_argc(struct dl *dl)
049c96
@@ -290,6 +291,23 @@ static int ifname_map_lookup(struct dl *dl, const char *ifname,
049c96
 	return -ENOENT;
049c96
 }
049c96
 
049c96
+static int ifname_map_rev_lookup(struct dl *dl, const char *bus_name,
049c96
+				 const char *dev_name, uint32_t port_index,
049c96
+				 char **p_ifname)
049c96
+{
049c96
+	struct ifname_map *ifname_map;
049c96
+
049c96
+	list_for_each_entry(ifname_map, &dl->ifname_map_list, list) {
049c96
+		if (strcmp(bus_name, ifname_map->bus_name) == 0 &&
049c96
+		    strcmp(dev_name, ifname_map->dev_name) == 0 &&
049c96
+		    port_index == ifname_map->port_index) {
049c96
+			*p_ifname = ifname_map->ifname;
049c96
+			return 0;
049c96
+		}
049c96
+	}
049c96
+	return -ENOENT;
049c96
+}
049c96
+
049c96
 static unsigned int strslashcount(char *str)
049c96
 {
049c96
 	unsigned int count = 0;
049c96
@@ -517,16 +535,62 @@ static void cmd_dev_help(void)
049c96
 	pr_out("Usage: devlink dev show [ DEV ]\n");
049c96
 }
049c96
 
049c96
+static void __pr_out_handle(const char *bus_name, const char *dev_name)
049c96
+{
049c96
+	pr_out("%s/%s", bus_name, dev_name);
049c96
+}
049c96
+
049c96
 static void pr_out_handle(struct nlattr **tb)
049c96
 {
049c96
-	pr_out("%s/%s", mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]),
049c96
+	__pr_out_handle(mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]),
049c96
 			mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]));
049c96
 }
049c96
 
049c96
+static void __pr_out_port_handle(const char *bus_name, const char *dev_name,
049c96
+				 uint32_t port_index)
049c96
+{
049c96
+	__pr_out_handle(bus_name, dev_name);
049c96
+	pr_out("/%d", port_index);
049c96
+}
049c96
+
049c96
 static void pr_out_port_handle(struct nlattr **tb)
049c96
 {
049c96
-	pr_out_handle(tb);
049c96
-	pr_out("/%d", mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_INDEX]));
049c96
+	__pr_out_port_handle(mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]),
049c96
+			     mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]),
049c96
+			     mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_INDEX]));
049c96
+}
049c96
+
049c96
+static void __pr_out_port_handle_nice(struct dl *dl, const char *bus_name,
049c96
+				      const char *dev_name, uint32_t port_index)
049c96
+{
049c96
+	char *ifname;
049c96
+	int err;
049c96
+
049c96
+	if (dl->no_nice_names)
049c96
+		goto no_nice_names;
049c96
+
049c96
+	err = ifname_map_rev_lookup(dl, bus_name, dev_name,
049c96
+				    port_index, &ifname);
049c96
+	if (err)
049c96
+		goto no_nice_names;
049c96
+	pr_out("%s", ifname);
049c96
+	return;
049c96
+
049c96
+no_nice_names:
049c96
+	__pr_out_port_handle(bus_name, dev_name, port_index);
049c96
+}
049c96
+
049c96
+static void pr_out_port_handle_nice(struct dl *dl, struct nlattr **tb)
049c96
+{
049c96
+	const char *bus_name;
049c96
+	const char *dev_name;
049c96
+	uint32_t port_index;
049c96
+
049c96
+	bus_name = mnl_attr_get_str(tb[DEVLINK_ATTR_BUS_NAME]);
049c96
+	dev_name = mnl_attr_get_str(tb[DEVLINK_ATTR_DEV_NAME]);
049c96
+	port_index = mnl_attr_get_u32(tb[DEVLINK_ATTR_PORT_INDEX]);
049c96
+
049c96
+	__pr_out_port_handle_nice(dl, bus_name, dev_name, port_index);
049c96
 }
049c96
 
049c96
 static void pr_out_dev(struct nlattr **tb)
049c96
@@ -867,7 +931,7 @@ static void help(void)
049c96
 {
049c96
 	pr_out("Usage: devlink [ OPTIONS ] OBJECT { COMMAND | help }\n"
049c96
 	       "where  OBJECT := { dev | port | monitor }\n"
049c96
-	       "       OPTIONS := { -V[ersion] }\n");
049c96
+	       "       OPTIONS := { -V[ersion] | -n[no-nice-names] }\n");
049c96
 }
049c96
 
049c96
 static int dl_cmd(struct dl *dl)
049c96
@@ -939,6 +1003,7 @@ int main(int argc, char **argv)
049c96
 {
049c96
 	static const struct option long_options[] = {
049c96
 		{ "Version",		no_argument,		NULL, 'V' },
049c96
+		{ "no-nice-names",	no_argument,		NULL, 'n' },
049c96
 		{ NULL, 0, NULL, 0 }
049c96
 	};
049c96
 	struct dl *dl;
049c96
@@ -946,13 +1011,22 @@ int main(int argc, char **argv)
049c96
 	int err;
049c96
 	int ret;
049c96
 
049c96
-	while ((opt = getopt_long(argc, argv, "V",
049c96
+	dl = dl_alloc();
049c96
+	if (!dl) {
049c96
+		pr_err("Failed to allocate memory for devlink\n");
049c96
+		return EXIT_FAILURE;
049c96
+	}
049c96
+
049c96
+	while ((opt = getopt_long(argc, argv, "Vn",
049c96
 				  long_options, NULL)) >= 0) {
049c96
 
049c96
 		switch (opt) {
049c96
 		case 'V':
049c96
 			printf("devlink utility, iproute2-ss%s\n", SNAPSHOT);
049c96
 			return EXIT_SUCCESS;
049c96
+		case 'n':
049c96
+			dl->no_nice_names = true;
049c96
+			break;
049c96
 		default:
049c96
 			pr_err("Unknown option.\n");
049c96
 			help();
049c96
@@ -963,12 +1037,6 @@ int main(int argc, char **argv)
049c96
 	argc -= optind;
049c96
 	argv += optind;
049c96
 
049c96
-	dl = dl_alloc();
049c96
-	if (!dl) {
049c96
-		pr_err("Failed to allocate memory for devlink\n");
049c96
-		return EXIT_FAILURE;
049c96
-	}
049c96
-
049c96
 	err = dl_init(dl, argc, argv);
049c96
 	if (err) {
049c96
 		ret = EXIT_FAILURE;
049c96
diff --git a/man/man8/devlink-dev.8 b/man/man8/devlink-dev.8
049c96
index 7878d89..af96a29 100644
049c96
--- a/man/man8/devlink-dev.8
049c96
+++ b/man/man8/devlink-dev.8
049c96
@@ -16,6 +16,7 @@ devlink-dev \- devlink device configuration
049c96
 .ti -8
049c96
 .IR OPTIONS " := { "
049c96
 \fB\-V\fR[\fIersion\fR] |
049c96
+\fB\-n\fR[\fIno-nice-names\fR] }
049c96
 
049c96
 .ti -8
049c96
 .B devlink dev show
049c96
diff --git a/man/man8/devlink-port.8 b/man/man8/devlink-port.8
049c96
index e6ae686..d78837c 100644
049c96
--- a/man/man8/devlink-port.8
049c96
+++ b/man/man8/devlink-port.8
049c96
@@ -16,6 +16,7 @@ devlink-port \- devlink port configuration
049c96
 .ti -8
049c96
 .IR OPTIONS " := { "
049c96
 \fB\-V\fR[\fIersion\fR] |
049c96
+\fB\-n\fR[\fIno-nice-names\fR] }
049c96
 
049c96
 .ti -8
049c96
 .BR "devlink port set "
049c96
diff --git a/man/man8/devlink.8 b/man/man8/devlink.8
049c96
index f608ccc..df00f4f 100644
049c96
--- a/man/man8/devlink.8
049c96
+++ b/man/man8/devlink.8
049c96
@@ -19,6 +19,7 @@ devlink \- Devlink tool
049c96
 .ti -8
049c96
 .IR OPTIONS " := { "
049c96
 \fB\-V\fR[\fIersion\fR] |
049c96
+\fB\-n\fR[\fIno-nice-names\fR] }
049c96
 
049c96
 .SH OPTIONS
049c96
 
049c96
@@ -28,6 +29,10 @@ Print the version of the
049c96
 .B devlink
049c96
 utility and exit.
049c96
 
049c96
+.TP
049c96
+.BR "\-n" , " -no-nice-names"
049c96
+Turn off printing out nice names, for example netdevice ifnames instead of devlink port identification.
049c96
+
049c96
 .SS
049c96
 .I OBJECT
049c96
 
049c96
-- 
049c96
1.8.3.1
049c96