diff mbox series

[iproute2,1/2] ip: display netns name instead of nsid

Message ID 20180604121253.2140-2-nicolas.dichtel@6wind.com
State Changes Requested, archived
Delegated to: stephen hemminger
Headers show
Series display netns name instead of nsid | expand

Commit Message

Nicolas Dichtel June 4, 2018, 12:12 p.m. UTC
When iproute2 has a name for the nsid, let's display it. It's more
user friendly than a number.

Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---
 ip/ip_common.h |  1 +
 ip/ipaddress.c | 23 ++++++++++++++++++-----
 ip/ipnetns.c   | 10 ++++++++++
 3 files changed, 29 insertions(+), 5 deletions(-)

Comments

Stephen Hemminger June 4, 2018, 9:12 p.m. UTC | #1
On Mon,  4 Jun 2018 14:12:52 +0200
Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote:

> diff --git a/ip/ipaddress.c b/ip/ipaddress.c
> index c7c7e7df4e81..aee09c7ff6df 100644
> --- a/ip/ipaddress.c
> +++ b/ip/ipaddress.c
> @@ -819,6 +819,9 @@ int print_linkinfo(const struct sockaddr_nl *who,
>  	unsigned int m_flag = 0;
>  	SPRINT_BUF(b1);
>  
> +	netns_nsid_socket_init();
> +	netns_map_init();
> +

The idea of printing network namespace is good but I am concerned that
setting up yet another netlink socket and scanning the netns directory on
each ip link command will impact some users.

Can this setup be deferred until the first net ns lookup happens?
diff mbox series

Patch

diff --git a/ip/ip_common.h b/ip/ip_common.h
index 49eb7d7bed40..794478c546cd 100644
--- a/ip/ip_common.h
+++ b/ip/ip_common.h
@@ -60,6 +60,7 @@  void netns_map_init(void);
 void netns_nsid_socket_init(void);
 int print_nsid(const struct sockaddr_nl *who,
 	       struct nlmsghdr *n, void *arg);
+char *get_name_from_nsid(int nsid);
 int do_ipaddr(int argc, char **argv);
 int do_ipaddrlabel(int argc, char **argv);
 int do_iproute(int argc, char **argv);
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index c7c7e7df4e81..aee09c7ff6df 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -819,6 +819,9 @@  int print_linkinfo(const struct sockaddr_nl *who,
 	unsigned int m_flag = 0;
 	SPRINT_BUF(b1);
 
+	netns_nsid_socket_init();
+	netns_map_init();
+
 	if (n->nlmsg_type != RTM_NEWLINK && n->nlmsg_type != RTM_DELLINK)
 		return 0;
 
@@ -955,10 +958,16 @@  int print_linkinfo(const struct sockaddr_nl *who,
 		if (is_json_context()) {
 			print_int(PRINT_JSON, "link_netnsid", NULL, id);
 		} else {
-			if (id >= 0)
-				print_int(PRINT_FP, NULL,
-					  " link-netnsid %d", id);
-			else
+			if (id >= 0) {
+				char *name = get_name_from_nsid(id);
+
+				if (name)
+					print_string(PRINT_FP, NULL,
+						     " link-netns %s", name);
+				else
+					print_int(PRINT_FP, NULL,
+						  " link-netnsid %d", id);
+			} else
 				print_string(PRINT_FP, NULL,
 					     " link-netnsid %s", "unknown");
 		}
@@ -966,8 +975,12 @@  int print_linkinfo(const struct sockaddr_nl *who,
 
 	if (tb[IFLA_NEW_NETNSID]) {
 		int id = rta_getattr_u32(tb[IFLA_NEW_NETNSID]);
+		char *name = get_name_from_nsid(id);
 
-		print_int(PRINT_FP, NULL, " new-nsid %d", id);
+		if (name)
+			print_string(PRINT_FP, NULL, " new-netns %s", name);
+		else
+			print_int(PRINT_FP, NULL, " new-netnsid %d", id);
 	}
 	if (tb[IFLA_NEW_IFINDEX]) {
 		int id = rta_getattr_u32(tb[IFLA_NEW_IFINDEX]);
diff --git a/ip/ipnetns.c b/ip/ipnetns.c
index e06100f4ad2d..a4f5b02427e7 100644
--- a/ip/ipnetns.c
+++ b/ip/ipnetns.c
@@ -169,6 +169,16 @@  static struct nsid_cache *netns_map_get_by_nsid(int nsid)
 	return NULL;
 }
 
+char *get_name_from_nsid(int nsid)
+{
+	struct nsid_cache *c = netns_map_get_by_nsid(nsid);
+
+	if (c)
+		return c->name;
+
+	return NULL;
+}
+
 static int netns_map_add(int nsid, const char *name)
 {
 	struct nsid_cache *c;