iplink: Use ll_index_to_name() instead of if_indextoname()
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 <serhe.popovych@gmail.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
parent
c619f2be8b
commit
45d3a6efb2
|
|
@ -219,10 +219,9 @@ int print_fdb(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
|
||||||
unsigned int ifindex = rta_getattr_u32(tb[NDA_IFINDEX]);
|
unsigned int ifindex = rta_getattr_u32(tb[NDA_IFINDEX]);
|
||||||
|
|
||||||
if (ifindex) {
|
if (ifindex) {
|
||||||
char ifname[IF_NAMESIZE];
|
if (!tb[NDA_LINK_NETNSID]) {
|
||||||
|
const char *ifname = ll_index_to_name(ifindex);
|
||||||
|
|
||||||
if (!tb[NDA_LINK_NETNSID] &&
|
|
||||||
if_indextoname(ifindex, ifname)) {
|
|
||||||
if (jw_global)
|
if (jw_global)
|
||||||
jsonw_string_field(jw_global, "viaIf",
|
jsonw_string_field(jw_global, "viaIf",
|
||||||
ifname);
|
ifname);
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@ static const char *port_states[] = {
|
||||||
[BR_STATE_BLOCKING] = "blocking",
|
[BR_STATE_BLOCKING] = "blocking",
|
||||||
};
|
};
|
||||||
|
|
||||||
extern char *if_indextoname(unsigned int __ifindex, char *__ifname);
|
|
||||||
|
|
||||||
static void print_link_flags(FILE *fp, unsigned int flags)
|
static void print_link_flags(FILE *fp, unsigned int flags)
|
||||||
{
|
{
|
||||||
fprintf(fp, "<");
|
fprintf(fp, "<");
|
||||||
|
|
@ -104,7 +102,6 @@ int print_linkinfo(const struct sockaddr_nl *who,
|
||||||
int len = n->nlmsg_len;
|
int len = n->nlmsg_len;
|
||||||
struct ifinfomsg *ifi = NLMSG_DATA(n);
|
struct ifinfomsg *ifi = NLMSG_DATA(n);
|
||||||
struct rtattr *tb[IFLA_MAX+1];
|
struct rtattr *tb[IFLA_MAX+1];
|
||||||
char b1[IFNAMSIZ];
|
|
||||||
|
|
||||||
len -= NLMSG_LENGTH(sizeof(*ifi));
|
len -= NLMSG_LENGTH(sizeof(*ifi));
|
||||||
if (len < 0) {
|
if (len < 0) {
|
||||||
|
|
@ -135,14 +132,10 @@ int print_linkinfo(const struct sockaddr_nl *who,
|
||||||
print_operstate(fp, rta_getattr_u8(tb[IFLA_OPERSTATE]));
|
print_operstate(fp, rta_getattr_u8(tb[IFLA_OPERSTATE]));
|
||||||
|
|
||||||
if (tb[IFLA_LINK]) {
|
if (tb[IFLA_LINK]) {
|
||||||
SPRINT_BUF(b1);
|
|
||||||
int iflink = rta_getattr_u32(tb[IFLA_LINK]);
|
int iflink = rta_getattr_u32(tb[IFLA_LINK]);
|
||||||
|
|
||||||
if (iflink == 0)
|
fprintf(fp, "@%s: ",
|
||||||
fprintf(fp, "@NONE: ");
|
iflink ? ll_index_to_name(iflink) : "NONE");
|
||||||
else
|
|
||||||
fprintf(fp, "@%s: ",
|
|
||||||
if_indextoname(iflink, b1));
|
|
||||||
} else
|
} else
|
||||||
fprintf(fp, ": ");
|
fprintf(fp, ": ");
|
||||||
|
|
||||||
|
|
@ -151,9 +144,11 @@ int print_linkinfo(const struct sockaddr_nl *who,
|
||||||
if (tb[IFLA_MTU])
|
if (tb[IFLA_MTU])
|
||||||
fprintf(fp, "mtu %u ", rta_getattr_u32(tb[IFLA_MTU]));
|
fprintf(fp, "mtu %u ", rta_getattr_u32(tb[IFLA_MTU]));
|
||||||
|
|
||||||
if (tb[IFLA_MASTER])
|
if (tb[IFLA_MASTER]) {
|
||||||
fprintf(fp, "master %s ",
|
int master = rta_getattr_u32(tb[IFLA_MASTER]);
|
||||||
if_indextoname(rta_getattr_u32(tb[IFLA_MASTER]), b1));
|
|
||||||
|
fprintf(fp, "master %s ", ll_index_to_name(master));
|
||||||
|
}
|
||||||
|
|
||||||
if (tb[IFLA_PROTINFO]) {
|
if (tb[IFLA_PROTINFO]) {
|
||||||
if (tb[IFLA_PROTINFO]->rta_type & NLA_F_NESTED) {
|
if (tb[IFLA_PROTINFO]->rta_type & NLA_F_NESTED) {
|
||||||
|
|
|
||||||
|
|
@ -369,8 +369,6 @@ static int bond_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
|
|
||||||
static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
{
|
{
|
||||||
unsigned int ifindex;
|
|
||||||
|
|
||||||
if (!tb)
|
if (!tb)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -380,21 +378,16 @@ static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
print_string(PRINT_ANY, "mode", "mode %s ", mode);
|
print_string(PRINT_ANY, "mode", "mode %s ", mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_BOND_ACTIVE_SLAVE] &&
|
if (tb[IFLA_BOND_ACTIVE_SLAVE]) {
|
||||||
(ifindex = rta_getattr_u32(tb[IFLA_BOND_ACTIVE_SLAVE]))) {
|
unsigned int ifindex =
|
||||||
char buf[IFNAMSIZ];
|
rta_getattr_u32(tb[IFLA_BOND_ACTIVE_SLAVE]);
|
||||||
const char *n = if_indextoname(ifindex, buf);
|
|
||||||
|
|
||||||
if (n)
|
if (ifindex) {
|
||||||
print_string(PRINT_ANY,
|
print_string(PRINT_ANY,
|
||||||
"active_slave",
|
"active_slave",
|
||||||
"active_slave %s ",
|
"active_slave %s ",
|
||||||
n);
|
ll_index_to_name(ifindex));
|
||||||
else
|
}
|
||||||
print_uint(PRINT_ANY,
|
|
||||||
"active_slave_index",
|
|
||||||
"active_slave %u ",
|
|
||||||
ifindex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_BOND_MIIMON])
|
if (tb[IFLA_BOND_MIIMON])
|
||||||
|
|
@ -479,18 +472,15 @@ static void bond_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
arp_all_targets);
|
arp_all_targets);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_BOND_PRIMARY] &&
|
if (tb[IFLA_BOND_PRIMARY]) {
|
||||||
(ifindex = rta_getattr_u32(tb[IFLA_BOND_PRIMARY]))) {
|
unsigned int ifindex = rta_getattr_u32(tb[IFLA_BOND_PRIMARY]);
|
||||||
char buf[IFNAMSIZ];
|
|
||||||
const char *n = if_indextoname(ifindex, buf);
|
|
||||||
|
|
||||||
if (n)
|
if (ifindex) {
|
||||||
print_string(PRINT_ANY, "primary", "primary %s ", n);
|
print_string(PRINT_ANY,
|
||||||
else
|
"primary",
|
||||||
print_uint(PRINT_ANY,
|
"primary %s ",
|
||||||
"primary_index",
|
ll_index_to_name(ifindex));
|
||||||
"primary %u ",
|
}
|
||||||
ifindex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_BOND_PRIMARY_RESELECT]) {
|
if (tb[IFLA_BOND_PRIMARY_RESELECT]) {
|
||||||
|
|
|
||||||
|
|
@ -394,10 +394,8 @@ static int vxlan_parse_opt(struct link_util *lu, int argc, char **argv,
|
||||||
static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
{
|
{
|
||||||
__u32 vni;
|
__u32 vni;
|
||||||
unsigned int link;
|
|
||||||
__u8 tos;
|
__u8 tos;
|
||||||
__u32 maxaddr;
|
__u32 maxaddr;
|
||||||
char s2[64];
|
|
||||||
|
|
||||||
if (!tb)
|
if (!tb)
|
||||||
return;
|
return;
|
||||||
|
|
@ -467,14 +465,13 @@ static void vxlan_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
&addr));
|
&addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_VXLAN_LINK] &&
|
if (tb[IFLA_VXLAN_LINK]) {
|
||||||
(link = rta_getattr_u32(tb[IFLA_VXLAN_LINK]))) {
|
unsigned int link = rta_getattr_u32(tb[IFLA_VXLAN_LINK]);
|
||||||
const char *n = if_indextoname(link, s2);
|
|
||||||
|
|
||||||
if (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_uint(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_VXLAN_PORT_RANGE]) {
|
if (tb[IFLA_VXLAN_PORT_RANGE]) {
|
||||||
|
|
|
||||||
|
|
@ -196,7 +196,6 @@ static int read_action_type(const char *name)
|
||||||
static void print_encap_seg6local(FILE *fp, struct rtattr *encap)
|
static void print_encap_seg6local(FILE *fp, struct rtattr *encap)
|
||||||
{
|
{
|
||||||
struct rtattr *tb[SEG6_LOCAL_MAX + 1];
|
struct rtattr *tb[SEG6_LOCAL_MAX + 1];
|
||||||
char ifbuf[IFNAMSIZ];
|
|
||||||
int action;
|
int action;
|
||||||
|
|
||||||
parse_rtattr_nested(tb, SEG6_LOCAL_MAX, encap);
|
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]) {
|
if (tb[SEG6_LOCAL_IIF]) {
|
||||||
int iif = rta_getattr_u32(tb[SEG6_LOCAL_IIF]);
|
int iif = rta_getattr_u32(tb[SEG6_LOCAL_IIF]);
|
||||||
|
|
||||||
fprintf(fp, "iif %s ",
|
fprintf(fp, "iif %s ", ll_index_to_name(iif));
|
||||||
if_indextoname(iif, ifbuf) ?: "<unknown>");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[SEG6_LOCAL_OIF]) {
|
if (tb[SEG6_LOCAL_OIF]) {
|
||||||
int oif = rta_getattr_u32(tb[SEG6_LOCAL_OIF]);
|
int oif = rta_getattr_u32(tb[SEG6_LOCAL_OIF]);
|
||||||
|
|
||||||
fprintf(fp, "oif %s ",
|
fprintf(fp, "oif %s ", ll_index_to_name(oif));
|
||||||
if_indextoname(oif, ifbuf) ?: "<unknown>");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -380,14 +380,13 @@ static void gre_print_direct_opt(FILE *f, struct rtattr *tb[])
|
||||||
|
|
||||||
print_string(PRINT_ANY, "local", "local %s ", local);
|
print_string(PRINT_ANY, "local", "local %s ", local);
|
||||||
|
|
||||||
if (tb[IFLA_GRE_LINK] && rta_getattr_u32(tb[IFLA_GRE_LINK])) {
|
if (tb[IFLA_GRE_LINK]) {
|
||||||
unsigned int 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 (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_uint(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_GRE_TTL]) {
|
if (tb[IFLA_GRE_TTL]) {
|
||||||
|
|
|
||||||
|
|
@ -414,14 +414,13 @@ static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
|
|
||||||
print_string(PRINT_ANY, "local", "local %s ", local);
|
print_string(PRINT_ANY, "local", "local %s ", local);
|
||||||
|
|
||||||
if (tb[IFLA_GRE_LINK] && rta_getattr_u32(tb[IFLA_GRE_LINK])) {
|
if (tb[IFLA_GRE_LINK]) {
|
||||||
unsigned int 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 (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_uint(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_GRE_TTL]) {
|
if (tb[IFLA_GRE_TTL]) {
|
||||||
|
|
|
||||||
|
|
@ -377,14 +377,13 @@ static void ip6tunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb
|
||||||
rt_addr_n2a_rta(AF_INET6, tb[IFLA_IPTUN_LOCAL]));
|
rt_addr_n2a_rta(AF_INET6, tb[IFLA_IPTUN_LOCAL]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_IPTUN_LINK] && rta_getattr_u32(tb[IFLA_IPTUN_LINK])) {
|
if (tb[IFLA_IPTUN_LINK]) {
|
||||||
unsigned int 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 (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_uint(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_IPTUN_TTL]) {
|
if (tb[IFLA_IPTUN_TTL]) {
|
||||||
|
|
|
||||||
|
|
@ -407,14 +407,13 @@ static void iptunnel_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[
|
||||||
|
|
||||||
print_string(PRINT_ANY, "local", "local %s ", local);
|
print_string(PRINT_ANY, "local", "local %s ", local);
|
||||||
|
|
||||||
if (tb[IFLA_IPTUN_LINK] && rta_getattr_u32(tb[IFLA_IPTUN_LINK])) {
|
if (tb[IFLA_IPTUN_LINK]) {
|
||||||
unsigned int 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 (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_int(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_IPTUN_TTL]) {
|
if (tb[IFLA_IPTUN_TTL]) {
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,6 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
const char *local = "any";
|
const char *local = "any";
|
||||||
const char *remote = "any";
|
const char *remote = "any";
|
||||||
__u32 key;
|
__u32 key;
|
||||||
unsigned int link;
|
|
||||||
char s2[IFNAMSIZ];
|
char s2[IFNAMSIZ];
|
||||||
|
|
||||||
if (!tb)
|
if (!tb)
|
||||||
|
|
@ -192,14 +191,13 @@ static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
|
|
||||||
print_string(PRINT_ANY, "local", "local %s ", local);
|
print_string(PRINT_ANY, "local", "local %s ", local);
|
||||||
|
|
||||||
if (tb[IFLA_VTI_LINK] &&
|
if (tb[IFLA_VTI_LINK]) {
|
||||||
(link = rta_getattr_u32(tb[IFLA_VTI_LINK]))) {
|
unsigned int link = rta_getattr_u32(tb[IFLA_VTI_LINK]);
|
||||||
const char *n = if_indextoname(link, s2);
|
|
||||||
|
|
||||||
if (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_uint(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_VTI_IKEY] &&
|
if (tb[IFLA_VTI_IKEY] &&
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,6 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
const char *remote = "any";
|
const char *remote = "any";
|
||||||
struct in6_addr saddr;
|
struct in6_addr saddr;
|
||||||
struct in6_addr daddr;
|
struct in6_addr daddr;
|
||||||
unsigned int link;
|
|
||||||
char s2[64];
|
char s2[64];
|
||||||
|
|
||||||
if (!tb)
|
if (!tb)
|
||||||
|
|
@ -190,13 +189,13 @@ static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
|
||||||
|
|
||||||
print_string(PRINT_ANY, "local", "local %s ", local);
|
print_string(PRINT_ANY, "local", "local %s ", local);
|
||||||
|
|
||||||
if (tb[IFLA_VTI_LINK] && (link = rta_getattr_u32(tb[IFLA_VTI_LINK]))) {
|
if (tb[IFLA_VTI_LINK]) {
|
||||||
const char *n = if_indextoname(link, s2);
|
unsigned int link = rta_getattr_u32(tb[IFLA_VTI_LINK]);
|
||||||
|
|
||||||
if (n)
|
if (link) {
|
||||||
print_string(PRINT_ANY, "link", "dev %s ", n);
|
print_string(PRINT_ANY, "link", "dev %s ",
|
||||||
else
|
ll_index_to_name(link));
|
||||||
print_uint(PRINT_ANY, "link_index", "dev %u ", link);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tb[IFLA_VTI_IKEY]) {
|
if (tb[IFLA_VTI_IKEY]) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue