From 0b1a326cee1df9f0530b4d6be9d79913ee9c0b84 Mon Sep 17 00:00:00 2001 From: giovanni Date: Thu, 22 Jul 2010 12:33:29 +0000 Subject: [PATCH] Let systat -N states resolve network addresses help and ok sthen@ lum@ ok canacar@ --- usr.bin/systat/Makefile | 4 +- usr.bin/systat/inetname.c | 88 +++++++++++++++++++++++++++++++++++++++ usr.bin/systat/netstat.c | 51 +---------------------- usr.bin/systat/pftop.c | 17 +++++--- usr.bin/systat/systat.h | 6 ++- 5 files changed, 107 insertions(+), 59 deletions(-) create mode 100644 usr.bin/systat/inetname.c diff --git a/usr.bin/systat/Makefile b/usr.bin/systat/Makefile index dabc5a97850..b8424d5bffc 100644 --- a/usr.bin/systat/Makefile +++ b/usr.bin/systat/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.23 2009/06/19 07:48:45 jasper Exp $ +# $OpenBSD: Makefile,v 1.24 2010/07/22 12:33:29 giovanni Exp $ PROG= systat @@ -7,7 +7,7 @@ PROG= systat CFLAGS+=-DNOKVM CPPFLAGS+=-I${.CURDIR}/../../usr.bin/vmstat CPPFLAGS+=-I${.CURDIR}/../../sbin/pfctl -SRCS= dkstats.c engine.c if.c iostat.c main.c mbufs.c netstat.c \ +SRCS= dkstats.c engine.c if.c inetname.c iostat.c main.c mbufs.c netstat.c \ nfs.c pigs.c sensors.c swap.c vmstat.c pftop.c cache.c pf.c \ pool.c malloc.c diff --git a/usr.bin/systat/inetname.c b/usr.bin/systat/inetname.c new file mode 100644 index 00000000000..effa249b26d --- /dev/null +++ b/usr.bin/systat/inetname.c @@ -0,0 +1,88 @@ +/* $OpenBSD: inetname.c,v 1.1 2010/07/22 12:33:29 giovanni Exp $ */ + +/*- + * Copyright (c) 1980, 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include + +#include + +#include +#include +#include + +#include "systat.h" + +const char * +inet6name(struct in6_addr *in6) +{ + static char line[NI_MAXHOST]; + struct sockaddr_in6 sin6; + int flags; + + flags = nflag ? NI_NUMERICHOST : 0; + if (IN6_IS_ADDR_UNSPECIFIED(in6)) + return "*"; + memset(&sin6, 0, sizeof(sin6)); + sin6.sin6_family = AF_INET6; + sin6.sin6_len = sizeof(struct sockaddr_in6); + sin6.sin6_addr = *in6; + if (getnameinfo((struct sockaddr *)&sin6, sin6.sin6_len, + line, sizeof(line), NULL, 0, flags) == 0) + return line; + return "?"; +} + +const char * +inetname(struct in_addr in) +{ + static char line[NI_MAXHOST]; + struct sockaddr_in si; + int flags, e; + + flags = nflag ? NI_NUMERICHOST : 0; + if (in.s_addr == INADDR_ANY) + return "*"; + + memset(&si, 0, sizeof(si)); + si.sin_family = AF_INET; + si.sin_len = sizeof(struct sockaddr_in); + si.sin_addr = in; + + e = getnameinfo((struct sockaddr *)&si, si.sin_len, + line, sizeof(line), NULL, 0, flags); + + if (e == 0) + return line; + + error("Lookup: %s", gai_strerror(e)); + + return "?"; +} diff --git a/usr.bin/systat/netstat.c b/usr.bin/systat/netstat.c index 06a41e35e35..53d6cd0864b 100644 --- a/usr.bin/systat/netstat.c +++ b/usr.bin/systat/netstat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: netstat.c,v 1.32 2008/12/07 02:56:06 canacar Exp $ */ +/* $OpenBSD: netstat.c,v 1.33 2010/07/22 12:33:29 giovanni Exp $ */ /* $NetBSD: netstat.c,v 1.3 1995/06/18 23:53:07 cgd Exp $ */ /*- @@ -92,9 +92,7 @@ struct netinfo { #define nif_faddr6 f.nif_faddr6 static void enter(struct inpcb *, struct socket *, int, char *); -static const char *inetname(struct in_addr); static void inetprint(struct in_addr *, int, char *, field_def *); -static const char *inet6name(struct in6_addr *); static void inet6print(struct in6_addr *, int, char *, field_def *); static void shownetstat(struct netinfo *p); @@ -426,53 +424,6 @@ inet6print(struct in6_addr *in6, int port, char *proto, field_def *fld) print_fld_tb(fld); } -static const char * -inet6name(struct in6_addr *in6) -{ - static char line[NI_MAXHOST]; - struct sockaddr_in6 sin6; - int flags; - - flags = nflag ? NI_NUMERICHOST : 0; - if (IN6_IS_ADDR_UNSPECIFIED(in6)) - return "*"; - memset(&sin6, 0, sizeof(sin6)); - sin6.sin6_family = AF_INET6; - sin6.sin6_len = sizeof(struct sockaddr_in6); - sin6.sin6_addr = *in6; - if (getnameinfo((struct sockaddr *)&sin6, sin6.sin6_len, - line, sizeof(line), NULL, 0, flags) == 0) - return line; - return "?"; -} - -static const char * -inetname(struct in_addr in) -{ - static char line[NI_MAXHOST]; - struct sockaddr_in si; - int flags, e; - - flags = nflag ? NI_NUMERICHOST : 0; - if (in.s_addr == INADDR_ANY) - return "*"; - - memset(&si, 0, sizeof(si)); - si.sin_family = AF_INET; - si.sin_len = sizeof(struct sockaddr_in); - si.sin_addr = in; - - e = getnameinfo((struct sockaddr *)&si, si.sin_len, - line, sizeof(line), NULL, 0, flags); - - if (e == 0) - return line; - - error("Lookup: %s", gai_strerror(e)); - - return "?"; -} - int kvm_ckread(void *a, void *b, size_t l) { diff --git a/usr.bin/systat/pftop.c b/usr.bin/systat/pftop.c index 8b2b3f938b2..8d67757f8c3 100644 --- a/usr.bin/systat/pftop.c +++ b/usr.bin/systat/pftop.c @@ -1,4 +1,4 @@ -/* $Id: pftop.c,v 1.14 2009/11/23 21:30:14 henning Exp $ */ +/* $Id: pftop.c,v 1.15 2010/07/22 12:33:29 giovanni Exp $ */ /* * Copyright (c) 2001, 2007 Can Erkin Acar * Copyright (c) 2001 Daniel Hartmeier @@ -708,11 +708,16 @@ unmask(struct pf_addr * m, u_int8_t af) void tb_print_addr(struct pf_addr * addr, struct pf_addr * mask, int af) { - static char buf[48]; - const char *bf; - - bf = inet_ntop(af, addr, buf, sizeof(buf)); - tbprintf("%s", bf); + switch (af) { + case AF_INET: { + tbprintf("%s", inetname(addr->v4)); + break; + } + case AF_INET6: { + tbprintf("%s", inet6name(&addr->v6)); + break; + } + } if (mask != NULL) { if (!PF_AZERO(mask, af)) diff --git a/usr.bin/systat/systat.h b/usr.bin/systat/systat.h index 3dbbe040caa..191e38ec5e0 100644 --- a/usr.bin/systat/systat.h +++ b/usr.bin/systat/systat.h @@ -1,4 +1,4 @@ -/* $OpenBSD: systat.h,v 1.14 2009/08/13 23:45:35 deraadt Exp $ */ +/* $OpenBSD: systat.h,v 1.15 2010/07/22 12:33:29 giovanni Exp $ */ /* $NetBSD: systat.h,v 1.2 1995/01/20 08:52:14 jtc Exp $ */ /*- @@ -35,6 +35,7 @@ #ifndef _SYSTAT_H_ #define _SYSTAT_H_ +#include #include #include #include @@ -90,6 +91,9 @@ int initnfs(void); void error(const char *fmt, ...); void nlisterr(struct nlist []); +const char *inetname(struct in_addr); +const char *inet6name(struct in6_addr *); + #endif struct ifcount { -- 2.20.1