From owner-p4-projects@FreeBSD.ORG Mon Jul 27 17:23:42 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2DDEF106566B; Mon, 27 Jul 2009 17:23:42 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E1CEA1065674 for ; Mon, 27 Jul 2009 17:23:41 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id CEEE38FC08 for ; Mon, 27 Jul 2009 17:23:41 +0000 (UTC) (envelope-from pgj@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n6RHNfIu014395 for ; Mon, 27 Jul 2009 17:23:41 GMT (envelope-from pgj@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n6RHNfnB014393 for perforce@freebsd.org; Mon, 27 Jul 2009 17:23:41 GMT (envelope-from pgj@FreeBSD.org) Date: Mon, 27 Jul 2009 17:23:41 GMT Message-Id: <200907271723.n6RHNfnB014393@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to pgj@FreeBSD.org using -f From: Gabor Pali To: Perforce Change Reviews Cc: Subject: PERFORCE change 166637 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Jul 2009 17:23:43 -0000 http://perforce.freebsd.org/chv.cgi?CH=166637 Change 166637 by pgj@petymeg-current on 2009/07/27 17:22:41 Simplify calling of statistics routines. Affected files ... .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#13 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#28 edit .. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#21 edit Differences ... ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/extern.h#13 (text+ko) ==== @@ -74,8 +74,8 @@ void inetpr(void *, int, int); void inetppr(const struct socket_type *); void unixdomainpr(const struct socket_type *); -void tcp_stats(void *, const char *); -void udp_stats(void *, const char *); +void tcp_stats(const struct stat_type *); +void udp_stats(const struct stat_type *); #ifdef SCTP void sctp_protopr(u_long, const char *, int, int); void sctp_stats(u_long, const char *, int, int); @@ -84,7 +84,7 @@ void icmp_stats(u_long, const char *, int, int); void igmp_stats(u_long, const char *, int, int); void pim_stats(u_long, const char *, int, int); -void carp_stats(void *, const char *); +void carp_stats(const struct stat_type *); void pfsync_stats(u_long, const char *, int, int); #ifdef IPSEC void ipsec_stats(u_long, const char *, int, int); ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#28 (text+ko) ==== @@ -242,11 +242,9 @@ * Dump TCP statistics structure. */ void -tcp_stats(void *kvmd, const char *name) +tcp_stats(const struct stat_type *sttp) { const struct tcp_stat *s; - struct stat_type *sttp; - int stt_flags, error; #ifdef INET6 if (tcp_done != 0) @@ -254,35 +252,7 @@ else tcp_done = 1; #endif - - if (zflag) { - netstat_zerostat(stat_TCP); - return; - } - - stt_flags = 0; - if (!live) - stt_flags |= NETSTAT_STAT_KVM; - - sttp = netstat_stat_alloc(); - if (sttp == NULL) { - warn("netstat_stat_alloc"); - return; - } - - if (netstat_stat(stat_TCP, sttp, stt_flags, kvmd) < 0) { - error = netstat_stat_geterror(sttp); - if (error == NETSTAT_ERROR_KVM) - warnx("netstat_stat: %s", kvm_geterr(kvmd)); - else - warnx("netstat_stat: %s", netstat_strerror(error)); - goto out; - } - s = netstat_get_tcpstats(sttp); - - printf ("%s:\n", name); - #define p(f, m) if (netstat_tcps_get_##f(s) || sflag <= 1) \ printf(m, netstat_tcps_get_##f(s), plural(netstat_tcps_get_##f(s))) #define p1a(f, m) if (netstat_tcps_get_##f(s) || sflag <= 1) \ @@ -391,9 +361,6 @@ p(ecn_ect1, "\t%ju packet%s with ECN ECT(1) bit set\n"); p(ecn_shs, "\t%ju successful ECN handshake%s\n"); p(ecn_rcwnd, "\t%ju time%s ECN reduced the congestion window\n"); - -out: - netstat_stat_free(sttp); #undef p #undef p1a #undef p2 @@ -405,11 +372,9 @@ * Dump UDP statistics structure. */ void -udp_stats(void *kvmd, const char *name) +udp_stats(const struct stat_type *sttp) { const struct udp_stat *s; - struct stat_type *sttp; - int stt_flags, error; #ifdef INET6 if (udp_done != 0) @@ -417,34 +382,7 @@ else udp_done = 1; #endif - - if (zflag) { - netstat_zerostat(stat_UDP); - return; - } - - stt_flags = 0; - if (!live) - stt_flags |= NETSTAT_STAT_KVM; - - sttp = netstat_stat_alloc(); - if (sttp == NULL) { - warn("netstat_stat_alloc"); - return; - } - - if (netstat_stat(stat_UDP, sttp, stt_flags, kvmd) < 0) { - error = netstat_stat_geterror(sttp); - if (error == NETSTAT_ERROR_KVM) - warnx("netstat_stat: %s", kvm_geterr(kvmd)); - else - warnx("netstat_stat: %s", netstat_strerror(error)); - goto out; - } - s = netstat_get_udpstats(sttp); - - printf("%s:\n", name); #define p(f, m) if (netstat_udps_get_##f(s) || sflag <= 1) \ printf(m, netstat_udps_get_##f(s), plural(netstat_udps_get_##f(s))) #define p1a(f, m) if (netstat_udps_get_##f(s) || sflag <= 1) \ @@ -464,8 +402,6 @@ /* the next statistic is cumulative in udps_noportbcast */ p(filtermcast, "\t%ju time%s multicast source filter matched\n"); -out: - netstat_stat_free(sttp); #undef p #undef p1a } @@ -474,45 +410,15 @@ * Dump CARP statistics structure. */ void -carp_stats(void *kvmd, const char *name) +carp_stats(const struct stat_type *sttp) { const struct carp_stat *s; - struct stat_type *sttp; - int stt_flags, error; - - if (zflag) { - netstat_zerostat(stat_CARP); - return; - } - stt_flags = 0; - if (!live) - stt_flags |= NETSTAT_STAT_KVM; - - sttp = netstat_stat_alloc(); - if (sttp == NULL) { - warn("netstat_stat_alloc"); - return; - } - - if (netstat_stat(stat_CARP, sttp, stt_flags, kvmd) < 0) { - error = netstat_stat_geterror(sttp); - if (error == NETSTAT_ERROR_KVM) - warnx("netstat_stat: %s", kvm_geterr(kvmd)); - else - warnx("netstat_stat: %s", netstat_strerror(error)); - goto out; - } - s = netstat_get_carpstats(sttp); - - printf("%s:\n", name); - #define p(f, m) if (netstat_carps_get_##f(s) || sflag <= 1) \ printf(m, netstat_carps_get_##f(s), plural(netstat_carps_get_##f(s))) #define p2(f, m) if (netstat_carps_get_##f(s) || sflag <= 1) \ printf(m, netstat_carps_get_##f(s)) - p(ipackets, "\t%ju packet%s received (IPv4)\n"); p(ipackets6, "\t%ju packet%s received (IPv6)\n"); p(badttl, "\t\t%ju packet%s discarded for wrong TTL\n"); @@ -529,8 +435,6 @@ #if notyet p(ostates, "\t\t%s state update%s sent\n"); #endif -out: - netstat_stat_free(sttp); #undef p #undef p2 } ==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/main.c#21 (text+ko) ==== @@ -150,6 +150,8 @@ u_char pr_wanted; /* 1 if wanted, 0 otherwise */ void (*pr_cblocks)(u_long, const char *, int, int); /* control blocks printing routine */ + void (*pr_nstats)(const struct stat_type *); + enum stat pr_stx; void (*pr_stats)(u_long, const char *, int, int); /* statistics printing routine */ void (*pr_istats)(char *); /* per/if statistics printing routine */ @@ -157,99 +159,99 @@ int pr_usesysctl; /* non-zero if we use sysctl, not kvm */ int pr_protocol; } protox[] = { - { 0, 0, 1, NULL, + { 0, 0, 1, NULL, tcp_stats, stat_TCP, NULL, NULL, "tcp", 1, IPPROTO_TCP }, - { 0, 0, 1, NULL, + { 0, 0, 1, NULL, udp_stats, stat_UDP, NULL, NULL, "udp", 1, IPPROTO_UDP }, #ifdef SCTP - { -1, N_SCTPSTAT, 1, sctp_protopr, + { -1, N_SCTPSTAT, 1, sctp_protopr, NULL, stat_MAX, sctp_stats, NULL, "sctp", 1, IPPROTO_SCTP }, #endif - { 0, -1, 1, NULL, + { 0, -1, 1, NULL, NULL, stat_MAX, NULL, NULL, "divert", 1, IPPROTO_DIVERT }, - { 0, N_IPSTAT, 1, NULL, + { 0, N_IPSTAT, 1, NULL, NULL, stat_MAX, ip_stats, NULL, "ip", 1, IPPROTO_RAW }, - { 0, N_ICMPSTAT, 1, NULL, + { 0, N_ICMPSTAT, 1, NULL, NULL, stat_MAX, icmp_stats, NULL, "icmp", 1, IPPROTO_ICMP }, - { 0, N_IGMPSTAT, 1, NULL, + { 0, N_IGMPSTAT, 1, NULL, NULL, stat_MAX, igmp_stats, NULL, "igmp", 1, IPPROTO_IGMP }, #ifdef IPSEC - { -1, N_IPSECSTAT, 1, NULL, /* keep as compat */ + { -1, N_IPSECSTAT, 1, NULL, NULL, stat_MAX, /* keep as compat */ ipsec_stats, NULL, "ipsec", 0, 0}, - { -1, N_AHSTAT, 1, NULL, + { -1, N_AHSTAT, 1, NULL, NULL, stat_MAX, ah_stats, NULL, "ah", 0, 0}, - { -1, N_ESPSTAT, 1, NULL, + { -1, N_ESPSTAT, 1, NULL, NULL, stat_MAX, esp_stats, NULL, "esp", 0, 0}, - { -1, N_IPCOMPSTAT, 1, NULL, + { -1, N_IPCOMPSTAT, 1, NULL, NULL, stat_MAX, ipcomp_stats, NULL, "ipcomp", 0, 0}, #endif - { 0, N_PIMSTAT, 1, NULL, + { 0, N_PIMSTAT, 1, NULL, NULL, stat_MAX, pim_stats, NULL, "pim", 1, IPPROTO_PIM }, - { -1, 0, 1, NULL, + { -1, 0, 1, NULL, carp_stats, stat_CARP, NULL, NULL, "carp", 1, 0 }, - { -1, N_PFSYNCSTAT, 1, NULL, + { -1, N_PFSYNCSTAT, 1, NULL, NULL, stat_MAX, pfsync_stats, NULL, "pfsync", 1, 0 }, - { -1, -1, 0, NULL, + { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, NULL, 0, 0 } }; #ifdef INET6 struct protox ip6protox[] = { - { 0, 0, 1, NULL, + { 0, 0, 1, NULL, tcp_stats, stat_TCP, NULL, NULL, "tcp", 1, IPPROTO_TCP }, - { 0, 0, 1, NULL, + { 0, 0, 1, NULL, udp_stats, stat_UDP, NULL, NULL, "udp", 1, IPPROTO_UDP }, - { 0, N_IP6STAT, 1, NULL, + { 0, N_IP6STAT, 1, NULL, NULL, stat_MAX, ip6_stats, ip6_ifstats, "ip6", 1, IPPROTO_RAW }, - { 0, N_ICMP6STAT, 1, NULL, + { 0, N_ICMP6STAT, 1, NULL, NULL, stat_MAX, icmp6_stats, icmp6_ifstats, "icmp6", 1, IPPROTO_ICMPV6 }, #ifdef IPSEC - { -1, N_IPSEC6STAT, 1, NULL, + { -1, N_IPSEC6STAT, 1, NULL, NULL, stat_MAX, ipsec_stats, NULL, "ipsec6", 0, 0 }, #endif #ifdef notyet - { -1, N_PIM6STAT, 1, NULL, + { -1, N_PIM6STAT, 1, NULL, NULL, stat_MAX, pim6_stats, NULL, "pim6", 1, 0 }, #endif - { -1, N_RIP6STAT, 1, NULL, + { -1, N_RIP6STAT, 1, NULL, NULL, stat_MAX, rip6_stats, NULL, "rip6", 1, 0 }, - { -1, -1, 0, NULL, + { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, NULL, 0, 0 } }; #endif /*INET6*/ #ifdef IPSEC struct protox pfkeyprotox[] = { - { -1, N_PFKEYSTAT, 1, NULL, + { -1, N_PFKEYSTAT, 1, NULL, NULL, stat_MAX, pfkey_stats, NULL, "pfkey", 0, 0 }, - { -1, -1, 0, NULL, + { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, NULL, 0, 0 } }; #endif struct protox atalkprotox[] = { - { N_DDPCB, N_DDPSTAT, 1, atalkprotopr, + { N_DDPCB, N_DDPSTAT, 1, atalkprotopr, NULL, stat_MAX, ddp_stats, NULL, "ddp", 0, 0 }, - { -1, -1, 0, NULL, + { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, NULL, 0, 0 } }; #ifdef NETGRAPH struct protox netgraphprotox[] = { - { N_NGSOCKS, -1, 1, netgraphprotopr, + { N_NGSOCKS, -1, 1, netgraphprotopr, NULL, stat_MAX, NULL, NULL, "ctrl", 0, 0 }, - { N_NGSOCKS, -1, 1, netgraphprotopr, + { N_NGSOCKS, -1, 1, netgraphprotopr, NULL, stat_MAX, NULL, NULL, "data", 0, 0 }, - { -1, -1, 0, NULL, + { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, NULL, 0, 0 } }; #endif #ifdef IPX struct protox ipxprotox[] = { - { N_IPX, N_IPXSTAT, 1, ipxprotopr, + { N_IPX, N_IPXSTAT, 1, ipxprotopr, NULL, stat_MAX, ipx_stats, NULL, "ipx", 0, 0 }, - { N_IPX, N_SPXSTAT, 1, ipxprotopr, + { N_IPX, N_SPXSTAT, 1, ipxprotopr, NULL, stat_MAX, spx_stats, NULL, "spx", 0, 0 }, - { -1, -1, 0, NULL, + { -1, -1, 0, NULL, NULL, stat_MAX, NULL, NULL, 0, 0, 0 } }; #endif @@ -268,6 +270,7 @@ atalkprotox, NULL }; static void connpr(const struct socket_type *); +static void statpr(void (*)(const struct stat_type *), enum stat, const char *); static void printproto(struct protox *, const char *); static void usage(void); static struct protox *name2protox(const char *); @@ -649,12 +652,8 @@ return; } else { /* XXX: temp. hack */ - if (strcmp(tp->pr_name, "udp") == 0) - tcp_stats(kvmd, tp->pr_name); - else if (strcmp(tp->pr_name, "tcp") == 0) - udp_stats(kvmd, tp->pr_name); - else if (strcmp(tp->pr_name, "carp") == 0) - carp_stats(kvmd, tp->pr_name); + if (tp->pr_nstats != NULL) + statpr(tp->pr_nstats, tp->pr_stx, tp->pr_name); else { pr = tp->pr_stats; if (!pr) { @@ -719,6 +718,43 @@ } } +void +statpr(void (*stats_routine)(const struct stat_type *), enum stat sts, + const char *name) +{ + struct stat_type *sttp; + int stt_flags, error; + + if (zflag) { + netstat_zerostat(sts); + return; + } + + stt_flags = 0; + if (!live) + stt_flags |= NETSTAT_STAT_KVM; + + sttp = netstat_stat_alloc(); + if (sttp == NULL) { + warn("netstat_stat_alloc"); + return; + } + + if (netstat_stat(sts, sttp, stt_flags, kvmd) < 0) { + error = netstat_stat_geterror(sttp); + if (error == NETSTAT_ERROR_KVM) + warnx("netstat_stat: %s", kvm_geterr(kvmd)); + else + warnx("netstat_stat: %s", netstat_strerror(error)); + goto out; + } + + printf("%s:\n", name); + stats_routine(sttp); +out: + netstat_stat_free(sttp); +} + /* * Read kernel memory, return 0 on success. */