fprintf(fp, "dev %s ", ll_index_to_name(r->ndm_ifindex));
if (tb[NDA_DST]) {
- SPRINT_BUF(abuf);
int family = AF_INET;
if (RTA_PAYLOAD(tb[NDA_DST]) == sizeof(struct in6_addr))
fprintf(fp, "dst %s ",
format_host(family,
RTA_PAYLOAD(tb[NDA_DST]),
- RTA_DATA(tb[NDA_DST]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[NDA_DST])));
}
if (tb[NDA_VLAN]) {
int af_bit_len(int af);
int af_byte_len(int af);
-const char *format_host(int af, int len, const void *addr,
+const char *format_host_r(int af, int len, const void *addr,
char *buf, int buflen);
+const char *format_host(int af, int lne, const void *addr);
const char *rt_addr_n2a(int af, int len, const void *addr,
char *buf, int buflen);
printf("%s: %s/ipv6 remote %s local %s",
p->name,
tnl_strproto(p->proto),
- format_host(AF_INET6, 16, &p->raddr, s1, sizeof(s1)),
+ format_host_r(AF_INET6, 16, &p->raddr, s1, sizeof(s1)),
rt_addr_n2a(AF_INET6, 16, &p->laddr, s2, sizeof(s2)));
if (p->link) {
const char *n = ll_index_to_name(p->link);
/* Use local copy of ifa_flags to not interfere with filtering code */
unsigned int ifa_flags;
struct rtattr *rta_tb[IFA_MAX+1];
- char abuf[256];
SPRINT_BUF(b1);
color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s",
format_host(ifa->ifa_family,
RTA_PAYLOAD(rta_tb[IFA_LOCAL]),
- RTA_DATA(rta_tb[IFA_LOCAL]),
- abuf, sizeof(abuf)));
+ RTA_DATA(rta_tb[IFA_LOCAL])));
if (rta_tb[IFA_ADDRESS] &&
memcmp(RTA_DATA(rta_tb[IFA_ADDRESS]),
RTA_DATA(rta_tb[IFA_LOCAL]),
color_fprintf(fp, ifa_family_color(ifa->ifa_family),
"%s", format_host(ifa->ifa_family,
RTA_PAYLOAD(rta_tb[IFA_ADDRESS]),
- RTA_DATA(rta_tb[IFA_ADDRESS]),
- abuf, sizeof(abuf)));
+ RTA_DATA(rta_tb[IFA_ADDRESS])));
}
fprintf(fp, "/%d ", ifa->ifa_prefixlen);
}
color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s ",
format_host(ifa->ifa_family,
RTA_PAYLOAD(rta_tb[IFA_BROADCAST]),
- RTA_DATA(rta_tb[IFA_BROADCAST]),
- abuf, sizeof(abuf)));
+ RTA_DATA(rta_tb[IFA_BROADCAST])));
}
if (rta_tb[IFA_ANYCAST]) {
fprintf(fp, "any ");
color_fprintf(fp, ifa_family_color(ifa->ifa_family), "%s ",
format_host(ifa->ifa_family,
RTA_PAYLOAD(rta_tb[IFA_ANYCAST]),
- RTA_DATA(rta_tb[IFA_ANYCAST]),
- abuf, sizeof(abuf)));
+ RTA_DATA(rta_tb[IFA_ANYCAST])));
}
fprintf(fp, "scope %s ", rtnl_rtscope_n2a(ifa->ifa_scope, b1, sizeof(b1)));
if (ifa_flags & IFA_F_SECONDARY) {
struct ifaddrlblmsg *ifal = NLMSG_DATA(n);
int len = n->nlmsg_len;
struct rtattr *tb[IFAL_MAX+1];
- char abuf[256];
if (n->nlmsg_type != RTM_NEWADDRLABEL && n->nlmsg_type != RTM_DELADDRLABEL)
return 0;
fprintf(fp, "prefix %s/%u ",
format_host(ifal->ifal_family,
RTA_PAYLOAD(tb[IFAL_ADDRESS]),
- RTA_DATA(tb[IFAL_ADDRESS]),
- abuf, sizeof(abuf)),
+ RTA_DATA(tb[IFAL_ADDRESS])),
ifal->ifal_prefixlen);
}
static void geneve_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
{
__u32 vni;
- char s1[1024];
__u8 tos;
if (!tb)
if (addr)
fprintf(f, "remote %s ",
- format_host(AF_INET, 4, &addr, s1, sizeof(s1)));
+ format_host(AF_INET, 4, &addr));
} else if (tb[IFLA_GENEVE_REMOTE6]) {
struct in6_addr addr;
if (memcmp(&addr, &in6addr_any, sizeof(addr)) != 0) {
if (IN6_IS_ADDR_MULTICAST(&addr))
fprintf(f, "remote %s ",
- format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1)));
+ format_host(AF_INET6, sizeof(struct in6_addr), &addr));
}
}
unsigned int link;
__u8 tos;
__u32 maxaddr;
- char s1[1024];
char s2[64];
if (!tb)
if (addr) {
if (IN_MULTICAST(ntohl(addr)))
fprintf(f, "group %s ",
- format_host(AF_INET, 4, &addr, s1, sizeof(s1)));
+ format_host(AF_INET, 4, &addr));
else
fprintf(f, "remote %s ",
- format_host(AF_INET, 4, &addr, s1, sizeof(s1)));
+ format_host(AF_INET, 4, &addr));
}
} else if (tb[IFLA_VXLAN_GROUP6]) {
struct in6_addr addr;
if (memcmp(&addr, &in6addr_any, sizeof(addr)) != 0) {
if (IN6_IS_ADDR_MULTICAST(&addr))
fprintf(f, "group %s ",
- format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1)));
+ format_host(AF_INET6, sizeof(struct in6_addr), &addr));
else
fprintf(f, "remote %s ",
- format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1)));
+ format_host(AF_INET6, sizeof(struct in6_addr), &addr));
}
}
if (addr)
fprintf(f, "local %s ",
- format_host(AF_INET, 4, &addr, s1, sizeof(s1)));
+ format_host(AF_INET, 4, &addr));
} else if (tb[IFLA_VXLAN_LOCAL6]) {
struct in6_addr addr;
memcpy(&addr, RTA_DATA(tb[IFLA_VXLAN_LOCAL6]), sizeof(struct in6_addr));
if (memcmp(&addr, &in6addr_any, sizeof(addr)) != 0)
fprintf(f, "local %s ",
- format_host(AF_INET6, sizeof(struct in6_addr), &addr, s1, sizeof(s1)));
+ format_host(AF_INET6, sizeof(struct in6_addr), &addr));
}
if (tb[IFLA_VXLAN_LINK] &&
list->addr.bytelen, 0,
b1, sizeof(b1)));
} else {
- char abuf[256];
-
switch (list->addr.family) {
case AF_INET:
fprintf(fp, "inet ");
}
fprintf(fp, "%s",
format_host(list->addr.family,
- -1,
- list->addr.data,
- abuf, sizeof(abuf)));
+ -1, list->addr.data));
}
if (list->users != 1)
fprintf(fp, " users %d", list->users);
struct ndmsg *r = NLMSG_DATA(n);
int len = n->nlmsg_len;
struct rtattr *tb[NDA_MAX+1];
- char abuf[256];
static int logit = 1;
if (n->nlmsg_type != RTM_NEWNEIGH && n->nlmsg_type != RTM_DELNEIGH &&
fprintf(fp, "%s ",
format_host(r->ndm_family,
RTA_PAYLOAD(tb[NDA_DST]),
- RTA_DATA(tb[NDA_DST]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[NDA_DST])));
}
if (!filter.index && r->ndm_ifindex)
fprintf(fp, "dev %s ", ll_index_to_name(r->ndm_ifindex));
} else {
fprintf(fp, "%s ", format_host(r->rtm_family,
RTA_PAYLOAD(tb[RTA_DST]),
- RTA_DATA(tb[RTA_DST]),
- abuf, sizeof(abuf))
+ RTA_DATA(tb[RTA_DST]))
);
}
} else if (r->rtm_dst_len) {
} else {
fprintf(fp, "from %s ", format_host(r->rtm_family,
RTA_PAYLOAD(tb[RTA_SRC]),
- RTA_DATA(tb[RTA_SRC]),
- abuf, sizeof(abuf))
+ RTA_DATA(tb[RTA_SRC]))
);
}
} else if (r->rtm_src_len) {
if (tb[RTA_NEWDST]) {
fprintf(fp, "as to %s ", format_host(r->rtm_family,
RTA_PAYLOAD(tb[RTA_NEWDST]),
- RTA_DATA(tb[RTA_NEWDST]),
- abuf, sizeof(abuf))
+ RTA_DATA(tb[RTA_NEWDST]))
);
}
fprintf(fp, "via %s ",
format_host(r->rtm_family,
RTA_PAYLOAD(tb[RTA_GATEWAY]),
- RTA_DATA(tb[RTA_GATEWAY]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[RTA_GATEWAY])));
}
if (tb[RTA_VIA]) {
size_t len = RTA_PAYLOAD(tb[RTA_VIA]) - 2;
fprintf(fp, "via %s %s ",
family_name(via->rtvia_family),
- format_host(via->rtvia_family, len, via->rtvia_addr,
- abuf, sizeof(abuf)));
+ format_host(via->rtvia_family, len, via->rtvia_addr));
}
if (tb[RTA_OIF] && filter.oifmask != -1)
fprintf(fp, "dev %s ", ll_index_to_name(*(int *)RTA_DATA(tb[RTA_OIF])));
fprintf(fp, " via %s ",
format_host(r->rtm_family,
RTA_PAYLOAD(tb[RTA_GATEWAY]),
- RTA_DATA(tb[RTA_GATEWAY]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[RTA_GATEWAY])));
}
if (tb[RTA_VIA]) {
size_t len = RTA_PAYLOAD(tb[RTA_VIA]) - 2;
fprintf(fp, "via %s %s ",
family_name(via->rtvia_family),
- format_host(via->rtvia_family, len, via->rtvia_addr,
- abuf, sizeof(abuf)));
+ format_host(via->rtvia_family, len, via->rtvia_addr));
}
if (tb[RTA_FLOW]) {
__u32 to = rta_getattr_u32(tb[RTA_FLOW]);
static void print_encap_mpls(FILE *fp, struct rtattr *encap)
{
struct rtattr *tb[MPLS_IPTUNNEL_MAX+1];
- char abuf[256];
parse_rtattr_nested(tb, MPLS_IPTUNNEL_MAX, encap);
if (tb[MPLS_IPTUNNEL_DST])
fprintf(fp, " %s ", format_host(AF_MPLS,
RTA_PAYLOAD(tb[MPLS_IPTUNNEL_DST]),
- RTA_DATA(tb[MPLS_IPTUNNEL_DST]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[MPLS_IPTUNNEL_DST])));
}
static void print_encap_ip(FILE *fp, struct rtattr *encap)
} else {
fprintf(fp, "from %s ", format_host(r->rtm_family,
RTA_PAYLOAD(tb[FRA_SRC]),
- RTA_DATA(tb[FRA_SRC]),
- abuf, sizeof(abuf))
+ RTA_DATA(tb[FRA_SRC]))
);
}
} else if (r->rtm_src_len) {
} else {
fprintf(fp, "to %s ", format_host(r->rtm_family,
RTA_PAYLOAD(tb[FRA_DST]),
- RTA_DATA(tb[FRA_DST]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[FRA_DST])));
}
} else if (r->rtm_dst_len) {
fprintf(fp, "to 0/%d ", r->rtm_dst_len);
fprintf(fp, "map-to %s ",
format_host(r->rtm_family,
RTA_PAYLOAD(tb[RTA_GATEWAY]),
- RTA_DATA(tb[RTA_GATEWAY]),
- abuf, sizeof(abuf)));
+ RTA_DATA(tb[RTA_GATEWAY])));
} else
fprintf(fp, "masquerade");
} else if (r->rtm_type == FR_ACT_GOTO) {
int len = n->nlmsg_len;
struct rtattr *tb[IFLA_MAX + 1];
struct rtattr *ltb[IFLA_INET6_MAX + 1];
- char abuf[256];
if (n->nlmsg_type != RTM_NEWLINK)
return -1;
fprintf(fp, "token %s ",
format_host(ifi->ifi_family,
RTA_PAYLOAD(ltb[IFLA_INET6_TOKEN]),
- RTA_DATA(ltb[IFLA_INET6_TOKEN]),
- abuf, sizeof(abuf)));
+ RTA_DATA(ltb[IFLA_INET6_TOKEN])));
fprintf(fp, "dev %s ", ll_index_to_name(ifi->ifi_index));
fprintf(fp, "\n");
fflush(fp);
printf("%s: %s/ip remote %s local %s",
p->name,
tnl_strproto(p->iph.protocol),
- p->iph.daddr ? format_host(AF_INET, 4, &p->iph.daddr, s1, sizeof(s1)) : "any",
+ p->iph.daddr ? format_host_r(AF_INET, 4, &p->iph.daddr, s1, sizeof(s1)) : "any",
p->iph.saddr ? rt_addr_n2a(AF_INET, 4, &p->iph.saddr, s2, sizeof(s2)) : "any");
if (p->iph.protocol == IPPROTO_IPV6 && (p->i_flags & SIT_ISATAP)) {
if (prl[i].addr != htonl(INADDR_ANY)) {
printf(" %s %s ",
(prl[i].flags & PRL_DEFAULT) ? "pdr" : "pr",
- format_host(AF_INET, 4, &prl[i].addr, s1, sizeof(s1)));
+ format_host(AF_INET, 4, &prl[i].addr));
}
}
}
ip6rd.prefixlen);
if (ip6rd.relay_prefix) {
printf(" 6rd-relay_prefix %s/%u",
- format_host(AF_INET, 4, &ip6rd.relay_prefix, s1, sizeof(s1)),
+ format_host(AF_INET, 4, &ip6rd.relay_prefix),
ip6rd.relay_prefixlen);
}
}
static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
{
- char s1[1024];
char s2[64];
const char *local = "any";
const char *remote = "any";
unsigned int addr = rta_getattr_u32(tb[IFLA_GRE_REMOTE]);
if (addr)
- remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1));
+ remote = format_host(AF_INET, 4, &addr);
}
fprintf(f, "remote %s ", remote);
unsigned int addr = rta_getattr_u32(tb[IFLA_GRE_LOCAL]);
if (addr)
- local = format_host(AF_INET, 4, &addr, s1, sizeof(s1));
+ local = format_host(AF_INET, 4, &addr);
}
fprintf(f, "local %s ", local);
static void gre_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
{
- char s1[1024];
char s2[64];
const char *local = "any";
const char *remote = "any";
memcpy(&addr, RTA_DATA(tb[IFLA_GRE_REMOTE]), sizeof(addr));
if (memcmp(&addr, &in6_addr_any, sizeof(addr)))
- remote = format_host(AF_INET6, sizeof(addr), &addr, s1, sizeof(s1));
+ remote = format_host(AF_INET6, sizeof(addr), &addr);
}
fprintf(f, "remote %s ", remote);
memcpy(&addr, RTA_DATA(tb[IFLA_GRE_LOCAL]), sizeof(addr));
if (memcmp(&addr, &in6_addr_any, sizeof(addr)))
- local = format_host(AF_INET6, sizeof(addr), &addr, s1, sizeof(s1));
+ local = format_host(AF_INET6, sizeof(addr), &addr);
}
fprintf(f, "local %s ", local);
unsigned int addr = rta_getattr_u32(tb[IFLA_IPTUN_REMOTE]);
if (addr)
- remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1));
+ remote = format_host(AF_INET, 4, &addr);
}
fprintf(f, "remote %s ", remote);
unsigned int addr = rta_getattr_u32(tb[IFLA_IPTUN_LOCAL]);
if (addr)
- local = format_host(AF_INET, 4, &addr, s1, sizeof(s1));
+ local = format_host(AF_INET, 4, &addr);
}
fprintf(f, "local %s ", local);
prefixlen);
if (relayprefix) {
printf("6rd-relay_prefix %s/%u ",
- format_host(AF_INET, 4, &relayprefix, s1,
- sizeof(s1)),
+ format_host(AF_INET, 4, &relayprefix),
relayprefixlen);
}
}
static void vti_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
{
- char s1[1024];
char s2[64];
const char *local = "any";
const char *remote = "any";
unsigned int addr = *(__u32 *)RTA_DATA(tb[IFLA_VTI_REMOTE]);
if (addr)
- remote = format_host(AF_INET, 4, &addr, s1, sizeof(s1));
+ remote = format_host(AF_INET, 4, &addr);
}
fprintf(f, "remote %s ", remote);
unsigned int addr = *(__u32 *)RTA_DATA(tb[IFLA_VTI_LOCAL]);
if (addr)
- local = format_host(AF_INET, 4, &addr, s1, sizeof(s1));
+ local = format_host(AF_INET, 4, &addr);
}
fprintf(f, "local %s ", local);
static void vti6_print_opt(struct link_util *lu, FILE *f, struct rtattr *tb[])
{
- char s1[1024];
char s2[64];
const char *local = "any";
const char *remote = "any";
if (tb[IFLA_VTI_REMOTE]) {
memcpy(&daddr, RTA_DATA(tb[IFLA_VTI_REMOTE]), sizeof(daddr));
- remote = format_host(AF_INET6, 16, &daddr, s1, sizeof(s1));
+ remote = format_host(AF_INET6, 16, &daddr);
}
fprintf(f, "remote %s ", remote);
if (tb[IFLA_VTI_LOCAL]) {
memcpy(&saddr, RTA_DATA(tb[IFLA_VTI_LOCAL]), sizeof(saddr));
- local = format_host(AF_INET6, 16, &saddr, s1, sizeof(s1));
+ local = format_host(AF_INET6, 16, &saddr);
}
fprintf(f, "local %s ", local);
struct genlmsghdr *ghdr;
struct rtattr *attrs[TCP_METRICS_ATTR_MAX + 1], *a;
int len = n->nlmsg_len;
- char abuf[256];
inet_prefix daddr, saddr;
int family, i, atype, stype, dlen = 0, slen = 0;
fprintf(fp, "Deleted ");
fprintf(fp, "%s",
- format_host(family, dlen, &daddr.data, abuf, sizeof(abuf)));
+ format_host(family, dlen, &daddr.data));
a = attrs[TCP_METRICS_ATTR_AGE];
if (a) {
if (slen) {
fprintf(fp, " source %s",
- format_host(family, slen, &saddr.data, abuf,
- sizeof(abuf)));
+ format_host(family, slen, &saddr.data));
}
fprintf(fp, "\n");
}
#endif
-const char *format_host(int af, int len, const void *addr,
+const char *format_host_r(int af, int len, const void *addr,
char *buf, int buflen)
{
#ifdef RESOLVE_HOSTNAMES
return rt_addr_n2a(af, len, addr, buf, buflen);
}
+const char *format_host(int af, int len, const void *addr)
+{
+ static char buf[256];
+
+ return format_host_r(af, len, addr, buf, 256);
+}
+
char *hexstring_n2a(const __u8 *str, int len, char *buf, int blen)
{
buf[0] = '*';
buf[1] = 0;
} else {
- ap = format_host(AF_INET, 4, a->data, buf, sizeof(buf));
+ ap = format_host(AF_INET, 4, a->data);
}
} else {
- ap = format_host(a->family, 16, a->data, buf, sizeof(buf));
+ ap = format_host(a->family, 16, a->data);
est_len = strlen(ap);
if (est_len <= addr_width)
est_len = addr_width;
fprintf(f, " nat %s %s/%d %s %s", sel->flags & TCA_NAT_FLAG_EGRESS ?
"egress" : "ingress",
- format_host(AF_INET, 4, &sel->old_addr, buf1, sizeof(buf1)),
+ format_host_r(AF_INET, 4, &sel->old_addr, buf1, sizeof(buf1)),
len,
- format_host(AF_INET, 4, &sel->new_addr, buf2, sizeof(buf2)),
+ format_host_r(AF_INET, 4, &sel->new_addr, buf2, sizeof(buf2)),
action_n2a(sel->action, buf3, sizeof(buf3)));
if (show_stats) {