From patchwork Fri Jan 12 17:39:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Serhey Popovych X-Patchwork-Id: 860087 X-Patchwork-Delegate: shemminger@vyatta.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Eaz/649M"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zJ94K4wzGz9t3G for ; Sat, 13 Jan 2018 04:40:01 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934190AbeALRj7 (ORCPT ); Fri, 12 Jan 2018 12:39:59 -0500 Received: from mail-lf0-f66.google.com ([209.85.215.66]:44240 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933729AbeALRj4 (ORCPT ); Fri, 12 Jan 2018 12:39:56 -0500 Received: by mail-lf0-f66.google.com with SMTP id w23so6744400lfd.11 for ; Fri, 12 Jan 2018 09:39:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=NdDq8Sxc1khGoRduoq+f3kNzsk25pNVC4l994YUp0i8=; b=Eaz/649MAwzFH6lJWWmCN1Dz2uOPsOH197PZUOodnMsF9W3pvvtdqJhQYULTRzO10O zORZzuz5IkHedAOjwIdC7ATszcJv3u2kaaLOHfRxRXYikuGh961WUQwb9TiDTTPv9HrZ y2Ean3VS+4kHs1KA9L5wFN+vAz5OLiW0iIuznJ1YWDdCOOBQrYHEfKuVSa1Mxwgfz+SM Gs6eaL8I2mkz0WGcfTi42HMxMtN43mT1RNXmy7unqji3YdqrOjjq34zCjCrGYji8Z6ud quMQaUdZu8f5WzOPzHwWX/jmh78sFw7uU3FK2lVfOBQWB4QbvcZorhp1xd7MIvdq/KW/ qq3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=NdDq8Sxc1khGoRduoq+f3kNzsk25pNVC4l994YUp0i8=; b=JLEZ1tJQIBIEaDYb11Zn503o4ckeI3km9R6n5LNNuTAQFN0kltl1fs/5fIQ4+qberr V+RflxBLHBO39d2uHryKmSUjN1jqu/QRmD5u+S+3QVaO1JBIQOWE0bXKVXQSv27btkQV smUUpKsxUFyfhyGFP/Faas1aHBCZjQ7SMR8jUU2ZviFlf99b+bDrKFxHPVwwNGFruEKs o76Qtt5B1snQLFddjblOepG4Q8PfuyRekSJ9nV2tj7sO9jL+aKUb8/6yAMcgLMIWqJek SGWAW4LCS5s37EGS6/Gld2Mhz6sAfD3FL0pPfD/ETT4haFRmlG22noMPBzTFICtCQEIV nTQg== X-Gm-Message-State: AKGB3mJecnv1BpGeRctszbXMRU4Ly0SMXQuc/1TmgvJxws4Qlli9GDdB znTOePw4Zdgwk1OpRQMxDPMeZg== X-Google-Smtp-Source: ACJfBosS7t+SVaV9wQbplREgg65vR72At1ySvaEKkGtCo9Tz2/Gq5sZAagdefvrMEWQ+n5bLpUuZ6Q== X-Received: by 10.46.101.90 with SMTP id z87mr15969276ljb.112.1515778794997; Fri, 12 Jan 2018 09:39:54 -0800 (PST) Received: from tuxracer.localdomain ([2a01:6d80::195:20:96:53]) by smtp.gmail.com with ESMTPSA id c190sm3781968lfc.81.2018.01.12.09.39.53 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Jan 2018 09:39:54 -0800 (PST) From: Serhey Popovych To: netdev@vger.kernel.org Subject: [PATCH iproute2 1/9] iplink: Use ll_index_to_name() instead of if_indextoname() Date: Fri, 12 Jan 2018 19:39:26 +0200 Message-Id: <1515778774-24173-2-git-send-email-serhe.popovych@gmail.com> X-Mailer: git-send-email 1.7.10.4 In-Reply-To: <1515778774-24173-1-git-send-email-serhe.popovych@gmail.com> References: <1515778774-24173-1-git-send-email-serhe.popovych@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org There are two reasons for switching to cached variant: 1) ll_index_to_name() may return result from cache, eliminating expensive ioctl() to the kernel. Note that most of the code already switched from plain if_indextoname() to ll_index_to_name() to cached variant in print path because in most cases cache populated. 2) It always return name in the form "if%d", even if entry is not in cache and ioctl() fails. This drops "link_index" from JSON output. Signed-off-by: Serhey Popovych --- bridge/fdb.c | 4 ++-- bridge/link.c | 18 ++++++------------ ip/iplink_bond.c | 25 ++++--------------------- ip/iplink_vxlan.c | 8 ++------ ip/iproute_lwtunnel.c | 7 ++----- ip/link_gre.c | 12 +++++------- ip/link_gre6.c | 12 +++++------- ip/link_ip6tnl.c | 12 +++++------- ip/link_iptnl.c | 12 +++++------- ip/link_vti.c | 7 ++----- ip/link_vti6.c | 10 ++++------ 11 files changed, 42 insertions(+), 85 deletions(-) diff --git a/bridge/fdb.c b/bridge/fdb.c index 376713b..2cc0268 100644 --- a/bridge/fdb.c +++ b/bridge/fdb.c @@ -219,10 +219,10 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg) unsigned int ifindex = rta_getattr_u32(tb[NDA_IFINDEX]); if (ifindex) { - char ifname[IF_NAMESIZE]; + const char *ifname; if (!tb[NDA_LINK_NETNSID] && - if_indextoname(ifindex, ifname)) { + (ifname = ll_index_to_name(ifindex))) { if (jw_global) jsonw_string_field(jw_global, "viaIf", ifname); diff --git a/bridge/link.c b/bridge/link.c index e2371d0..9c846c9 100644 --- a/bridge/link.c +++ b/bridge/link.c @@ -26,8 +26,6 @@ static const char *port_states[] = { [BR_STATE_BLOCKING] = "blocking", }; -extern char *if_indextoname(unsigned int __ifindex, char *__ifname); - static void print_link_flags(FILE *fp, unsigned int flags) { fprintf(fp, "<"); @@ -104,7 +102,6 @@ int print_linkinfo(const struct sockaddr_nl *who, int len = n->nlmsg_len; struct ifinfomsg *ifi = NLMSG_DATA(n); struct rtattr *tb[IFLA_MAX+1]; - char b1[IFNAMSIZ]; len -= NLMSG_LENGTH(sizeof(*ifi)); if (len < 0) { @@ -135,14 +132,9 @@ int print_linkinfo(const struct sockaddr_nl *who, print_operstate(fp, rta_getattr_u8(tb[IFLA_OPERSTATE])); if (tb[IFLA_LINK]) { - SPRINT_BUF(b1); int iflink = rta_getattr_u32(tb[IFLA_LINK]); - if (iflink == 0) - fprintf(fp, "@NONE: "); - else - fprintf(fp, "@%s: ", - if_indextoname(iflink, b1)); + fprintf(fp, "@%s: ", iflink ? ll_index_to_name(iflink) : "NONE"); } else fprintf(fp, ": "); @@ -151,9 +143,11 @@ int print_linkinfo(const struct sockaddr_nl *who, if (tb[IFLA_MTU]) fprintf(fp, "mtu %u ", rta_getattr_u32(tb[IFLA_MTU])); - if (tb[IFLA_MASTER]) - fprintf(fp, "master %s ", - if_indextoname(rta_getattr_u32(tb[IFLA_MASTER]), b1)); + if (tb[IFLA_MASTER]) { + int master = rta_getattr_u32(tb[IFLA_MASTER]); + + fprintf(fp, "master %s ", ll_index_to_name(master)); + } if (tb[IFLA_PROTINFO]) { if (tb[IFLA_PROTINFO]->rta_type & NLA_F_NESTED) { diff --git a/ip/iplink_bond.c b/ip/iplink_bond.c index 2b5cf4f..45900c8 100644 --- a/ip/iplink_bond.c +++ b/ip/iplink_bond.c @@ -382,19 +382,9 @@ static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_BOND_ACTIVE_SLAVE] && (ifindex = rta_getattr_u32(tb[IFLA_BOND_ACTIVE_SLAVE]))) { - char buf[IFNAMSIZ]; - const char *n = if_indextoname(ifindex, buf); + const char *n = ll_index_to_name(ifindex); - if (n) - print_string(PRINT_ANY, - "active_slave", - "active_slave %s ", - n); - else - print_uint(PRINT_ANY, - "active_slave_index", - "active_slave %u ", - ifindex); + print_string(PRINT_ANY, "active_slave", "active_slave %s ", n); } if (tb[IFLA_BOND_MIIMON]) @@ -481,16 +471,9 @@ static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_BOND_PRIMARY] && (ifindex = rta_getattr_u32(tb[IFLA_BOND_PRIMARY]))) { - char buf[IFNAMSIZ]; - const char *n = if_indextoname(ifindex, buf); + const char *n = ll_index_to_name(ifindex); - if (n) - print_string(PRINT_ANY, "primary", "primary %s ", n); - else - print_uint(PRINT_ANY, - "primary_index", - "primary %u ", - ifindex); + print_string(PRINT_ANY, "primary", "primary %s ", n); } if (tb[IFLA_BOND_PRIMARY_RESELECT]) { diff --git a/ip/iplink_vxlan.c b/ip/iplink_vxlan.c index 661eaa7..a6c964a 100644 --- a/ip/iplink_vxlan.c +++ b/ip/iplink_vxlan.c @@ -397,7 +397,6 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) unsigned int link; __u8 tos; __u32 maxaddr; - char s2[64]; if (!tb) return; @@ -469,12 +468,9 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_VXLAN_LINK] && (link = rta_getattr_u32(tb[IFLA_VXLAN_LINK]))) { - const char *n = if_indextoname(link, s2); + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_uint(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_VXLAN_PORT_RANGE]) { diff --git a/ip/iproute_lwtunnel.c b/ip/iproute_lwtunnel.c index 740da7c..a8d7171 100644 --- a/ip/iproute_lwtunnel.c +++ b/ip/iproute_lwtunnel.c @@ -196,7 +196,6 @@ static int read_action_type(const char *name) static void print_encap_seg6local(FILE *fp, struct rtattr *encap) { struct rtattr *tb[SEG6_LOCAL_MAX + 1]; - char ifbuf[IFNAMSIZ]; int action; parse_rtattr_nested(tb, SEG6_LOCAL_MAX, encap); @@ -229,15 +228,13 @@ static void print_encap_seg6local(FILE *fp, struct rtattr *encap) if (tb[SEG6_LOCAL_IIF]) { int iif = rta_getattr_u32(tb[SEG6_LOCAL_IIF]); - fprintf(fp, "iif %s ", - if_indextoname(iif, ifbuf) ?: ""); + fprintf(fp, "iif %s ", ll_index_to_name(iif)); } if (tb[SEG6_LOCAL_OIF]) { int oif = rta_getattr_u32(tb[SEG6_LOCAL_OIF]); - fprintf(fp, "oif %s ", - if_indextoname(oif, ifbuf) ?: ""); + fprintf(fp, "oif %s ", ll_index_to_name(oif)); } } diff --git a/ip/link_gre.c b/ip/link_gre.c index 3c0b6d6..d876bad 100644 --- a/ip/link_gre.c +++ b/ip/link_gre.c @@ -359,6 +359,7 @@ static void gre_print_direct_opt(FILE *f, struct rtattr *tb[]) char s2[64]; const char *local = "any"; const char *remote = "any"; + unsigned int link; unsigned int iflags = 0; unsigned int oflags = 0; @@ -380,14 +381,11 @@ static void gre_print_direct_opt(FILE *f, struct rtattr *tb[]) print_string(PRINT_ANY, "local", "local %s ", local); - if (tb[IFLA_GRE_LINK] && rta_getattr_u32(tb[IFLA_GRE_LINK])) { - unsigned int link = rta_getattr_u32(tb[IFLA_GRE_LINK]); - const char *n = if_indextoname(link, s2); + if (tb[IFLA_GRE_LINK] && + (link = rta_getattr_u32(tb[IFLA_GRE_LINK]))) { + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_uint(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_GRE_TTL]) { diff --git a/ip/link_gre6.c b/ip/link_gre6.c index 55bd1fb..93f3a96 100644 --- a/ip/link_gre6.c +++ b/ip/link_gre6.c @@ -377,6 +377,7 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) char s2[64]; const char *local = "any"; const char *remote = "any"; + unsigned int link; unsigned int iflags = 0; unsigned int oflags = 0; unsigned int flags = 0; @@ -414,14 +415,11 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) print_string(PRINT_ANY, "local", "local %s ", local); - if (tb[IFLA_GRE_LINK] && rta_getattr_u32(tb[IFLA_GRE_LINK])) { - unsigned int link = rta_getattr_u32(tb[IFLA_GRE_LINK]); - const char *n = if_indextoname(link, s2); + if (tb[IFLA_GRE_LINK] && + (link = rta_getattr_u32(tb[IFLA_GRE_LINK]))) { + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_uint(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_GRE_TTL]) { diff --git a/ip/link_ip6tnl.c b/ip/link_ip6tnl.c index bbc7878..0cfb2c6 100644 --- a/ip/link_ip6tnl.c +++ b/ip/link_ip6tnl.c @@ -334,6 +334,7 @@ get_failed: static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) { char s2[64]; + unsigned int link; int flags = 0; __u32 flowinfo = 0; @@ -377,14 +378,11 @@ static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb rt_addr_n2a_rta(AF_INET6, tb[IFLA_IPTUN_LOCAL])); } - if (tb[IFLA_IPTUN_LINK] && rta_getattr_u32(tb[IFLA_IPTUN_LINK])) { - unsigned int link = rta_getattr_u32(tb[IFLA_IPTUN_LINK]); - const char *n = if_indextoname(link, s2); + if (tb[IFLA_IPTUN_LINK] && + (link = rta_getattr_u32(tb[IFLA_IPTUN_LINK]))) { + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_uint(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_IPTUN_TTL]) { diff --git a/ip/link_iptnl.c b/ip/link_iptnl.c index 24a0f0c..3204e5e 100644 --- a/ip/link_iptnl.c +++ b/ip/link_iptnl.c @@ -364,6 +364,7 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[ char s2[64]; const char *local = "any"; const char *remote = "any"; + unsigned int link; __u16 prefixlen, type; if (!tb) @@ -407,14 +408,11 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[ print_string(PRINT_ANY, "local", "local %s ", local); - if (tb[IFLA_IPTUN_LINK] && rta_getattr_u32(tb[IFLA_IPTUN_LINK])) { - unsigned int link = rta_getattr_u32(tb[IFLA_IPTUN_LINK]); - const char *n = if_indextoname(link, s2); + if (tb[IFLA_IPTUN_LINK] && + (link = rta_getattr_u32(tb[IFLA_IPTUN_LINK]))) { + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_int(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_IPTUN_TTL]) { diff --git a/ip/link_vti.c b/ip/link_vti.c index 2b0fab2..7ae2e3c 100644 --- a/ip/link_vti.c +++ b/ip/link_vti.c @@ -194,12 +194,9 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) if (tb[IFLA_VTI_LINK] && (link = rta_getattr_u32(tb[IFLA_VTI_LINK]))) { - const char *n = if_indextoname(link, s2); + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_uint(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_VTI_IKEY] && diff --git a/ip/link_vti6.c b/ip/link_vti6.c index 74c246d..f7c40d3 100644 --- a/ip/link_vti6.c +++ b/ip/link_vti6.c @@ -190,13 +190,11 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[]) print_string(PRINT_ANY, "local", "local %s ", local); - if (tb[IFLA_VTI_LINK] && (link = rta_getattr_u32(tb[IFLA_VTI_LINK]))) { - const char *n = if_indextoname(link, s2); + if (tb[IFLA_VTI_LINK] && + (link = rta_getattr_u32(tb[IFLA_VTI_LINK]))) { + const char *n = ll_index_to_name(link); - if (n) - print_string(PRINT_ANY, "link", "dev %s ", n); - else - print_uint(PRINT_ANY, "link_index", "dev %u ", link); + print_string(PRINT_ANY, "link", "dev %s ", n); } if (tb[IFLA_VTI_IKEY]) {