Message ID | 20180605130831.8175-2-nicolas.dichtel@6wind.com |
---|---|
State | Accepted, archived |
Delegated to: | stephen hemminger |
Headers | show |
Series | display netns name instead of nsid | expand |
On Tue, 5 Jun 2018 15:08:30 +0200 Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote: > > +char *get_name_from_nsid(int nsid) > +{ > + struct nsid_cache *c; > + > + netns_nsid_socket_init(); > + netns_map_init(); > + > + c = netns_map_get_by_nsid(nsid); > + if (c) > + return c->name; > + > + return NULL; > +} > + This is better, but now there is a different problem. When doing multiple interfaces, won't the initialization code be called twice?
Le 05/06/2018 à 18:52, Stephen Hemminger a écrit : > On Tue, 5 Jun 2018 15:08:30 +0200 > Nicolas Dichtel <nicolas.dichtel@6wind.com> wrote: > >> >> +char *get_name_from_nsid(int nsid) >> +{ >> + struct nsid_cache *c; >> + >> + netns_nsid_socket_init(); >> + netns_map_init(); >> + >> + c = netns_map_get_by_nsid(nsid); >> + if (c) >> + return c->name; >> + >> + return NULL; >> +} >> + > > This is better, but now there is a different problem. > When doing multiple interfaces, won't the initialization code be called twice? > No, the init function is propected: void netns_nsid_socket_init(void) { if (rtnsh.fd > -1 || !ipnetns_have_nsid()) return; ... void netns_map_init(void) { ... if (initialized || !ipnetns_have_nsid()) return; ...
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..e4a1b985e4e9 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -955,10 +955,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 +972,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..30af9319f39e 100644 --- a/ip/ipnetns.c +++ b/ip/ipnetns.c @@ -169,6 +169,20 @@ 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_nsid_socket_init(); + netns_map_init(); + + 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;
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 | 20 +++++++++++++++----- ip/ipnetns.c | 14 ++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-)