aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2014-03-06 07:50:54 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2014-03-06 07:50:54 +0000
commit03b1adbcc115f425be8e0d70cafd6fb1e03eebe0 (patch)
tree1048b9a7f60c79785e4481f5782cd66cba022645 /tools
parent2178f429ccbdb7811d983a61e49f7183261b307a (diff)
downloadsrc-03b1adbcc115f425be8e0d70cafd6fb1e03eebe0.tar.gz
src-03b1adbcc115f425be8e0d70cafd6fb1e03eebe0.zip
Migrate npestats to use bsdstat.
Notes
Notes: svn path=/head/; revision=262832
Diffstat (limited to 'tools')
-rw-r--r--tools/tools/npe/npestats/Makefile4
-rw-r--r--tools/tools/npe/npestats/npestats.c16
-rw-r--r--tools/tools/npe/npestats/npestats.h6
-rw-r--r--tools/tools/npe/npestats/statfoo.c192
-rw-r--r--tools/tools/npe/npestats/statfoo.h127
5 files changed, 14 insertions, 331 deletions
diff --git a/tools/tools/npe/npestats/Makefile b/tools/tools/npe/npestats/Makefile
index 1683fc9d74c1..4e0a8ee47c29 100644
--- a/tools/tools/npe/npestats/Makefile
+++ b/tools/tools/npe/npestats/Makefile
@@ -1,8 +1,10 @@
# $FreeBSD$
PROG= npestats
-SRCS= main.c statfoo.c npestats.c
+SRCS= main.c npestats.c
BINDIR= /usr/local/bin
NO_MAN= true
+USEPRIVATELIB=
+LDADD= -lbsdstat
.include <bsd.prog.mk>
diff --git a/tools/tools/npe/npestats/npestats.c b/tools/tools/npe/npestats/npestats.c
index 3d2a4c209855..6f4206562443 100644
--- a/tools/tools/npe/npestats/npestats.c
+++ b/tools/tools/npe/npestats/npestats.c
@@ -151,7 +151,7 @@ npe_collect(struct npestatfoo_p *wf, struct npestats *stats)
}
static void
-npe_collect_cur(struct statfoo *sf)
+npe_collect_cur(struct bsdstat *sf)
{
struct npestatfoo_p *wf = (struct npestatfoo_p *) sf;
@@ -159,7 +159,7 @@ npe_collect_cur(struct statfoo *sf)
}
static void
-npe_collect_tot(struct statfoo *sf)
+npe_collect_tot(struct bsdstat *sf)
{
struct npestatfoo_p *wf = (struct npestatfoo_p *) sf;
@@ -167,7 +167,7 @@ npe_collect_tot(struct statfoo *sf)
}
static void
-npe_update_tot(struct statfoo *sf)
+npe_update_tot(struct bsdstat *sf)
{
struct npestatfoo_p *wf = (struct npestatfoo_p *) sf;
@@ -175,7 +175,7 @@ npe_update_tot(struct statfoo *sf)
}
static int
-npe_get_curstat(struct statfoo *sf, int s, char b[], size_t bs)
+npe_get_curstat(struct bsdstat *sf, int s, char b[], size_t bs)
{
struct npestatfoo_p *wf = (struct npestatfoo_p *) sf;
#define STAT(x) \
@@ -211,7 +211,7 @@ npe_get_curstat(struct statfoo *sf, int s, char b[], size_t bs)
}
static int
-npe_get_totstat(struct statfoo *sf, int s, char b[], size_t bs)
+npe_get_totstat(struct bsdstat *sf, int s, char b[], size_t bs)
{
struct npestatfoo_p *wf = (struct npestatfoo_p *) sf;
#define STAT(x) \
@@ -246,7 +246,7 @@ npe_get_totstat(struct statfoo *sf, int s, char b[], size_t bs)
#undef STAT
}
-STATFOO_DEFINE_BOUNCE(npestatfoo)
+BSDSTAT_DEFINE_BOUNCE(npestatfoo)
struct npestatfoo *
npestats_new(const char *ifname, const char *fmtstring)
@@ -256,7 +256,7 @@ npestats_new(const char *ifname, const char *fmtstring)
wf = calloc(1, sizeof(struct npestatfoo_p));
if (wf != NULL) {
- statfoo_init(&wf->base.base, "npestats", npestats, N(npestats));
+ bsdstat_init(&wf->base.base, "npestats", npestats, N(npestats));
/* override base methods */
wf->base.base.collect_cur = npe_collect_cur;
wf->base.base.collect_tot = npe_collect_tot;
@@ -265,7 +265,7 @@ npestats_new(const char *ifname, const char *fmtstring)
wf->base.base.update_tot = npe_update_tot;
/* setup bounce functions for public methods */
- STATFOO_BOUNCE(wf, npestatfoo);
+ BSDSTAT_BOUNCE(wf, npestatfoo);
/* setup our public methods */
wf->base.setifname = npe_setifname;
diff --git a/tools/tools/npe/npestats/npestats.h b/tools/tools/npe/npestats/npestats.h
index 8342ed5381be..192a5f65477f 100644
--- a/tools/tools/npe/npestats/npestats.h
+++ b/tools/tools/npe/npestats/npestats.h
@@ -32,15 +32,15 @@
#ifndef _NPESTATS_H_
#define _NPESTATS_H_
-#include "statfoo.h"
+#include "bsdstat.h"
/*
* npe statistics class.
*/
struct npestatfoo {
- struct statfoo base;
+ struct bsdstat base;
- STATFOO_DECL_METHODS(struct npestatfoo *);
+ BSDSTAT_DECL_METHODS(struct npestatfoo *);
/* set the network interface name for collection */
void (*setifname)(struct npestatfoo *, const char *ifname);
diff --git a/tools/tools/npe/npestats/statfoo.c b/tools/tools/npe/npestats/statfoo.c
deleted file mode 100644
index 9963ea0495c7..000000000000
--- a/tools/tools/npe/npestats/statfoo.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*-
- * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
- * 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,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
- *
- * $FreeBSD$
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#include "statfoo.h"
-
-static void
-statfoo_setfmt(struct statfoo *sf, const char *fmt0)
-{
-#define N(a) (sizeof(a)/sizeof(a[0]))
- char fmt[4096];
- char *fp, *tok;
- int i, j;
-
- j = 0;
- strlcpy(fmt, fmt0, sizeof(fmt));
- for (fp = fmt; (tok = strsep(&fp, ", ")) != NULL;) {
- for (i = 0; i < sf->nstats; i++)
- if (strcasecmp(tok, sf->stats[i].name) == 0)
- break;
- if (i >= sf->nstats) {
- fprintf(stderr, "%s: unknown statistic name \"%s\" "
- "skipped\n", sf->name, tok);
- continue;
- }
- if (j+3 > sizeof(sf->fmts)) {
- fprintf(stderr, "%s: not enough room for all stats; "
- "stopped at %s\n", sf->name, tok);
- break;
- }
- if (j != 0)
- sf->fmts[j++] = ' ';
- sf->fmts[j++] = 0x80 | i;
- }
- sf->fmts[j] = '\0';
-#undef N
-}
-
-static void
-statfoo_collect(struct statfoo *sf)
-{
- fprintf(stderr, "%s: don't know how to collect data\n", sf->name);
-}
-
-static void
-statfoo_update_tot(struct statfoo *sf)
-{
- fprintf(stderr, "%s: don't know how to update total data\n", sf->name);
-}
-
-static int
-statfoo_get(struct statfoo *sf, int s, char b[], size_t bs)
-{
- fprintf(stderr, "%s: don't know how to get stat #%u\n", sf->name, s);
- return 0;
-}
-
-static void
-statfoo_print_header(struct statfoo *sf, FILE *fd)
-{
- const unsigned char *cp;
-
- for (cp = sf->fmts; *cp != '\0'; cp++) {
- if (*cp & 0x80) {
- const struct fmt *f = &sf->stats[*cp &~ 0x80];
- fprintf(fd, "%*s", f->width, f->label);
- } else
- putc(*cp, fd);
- }
- putc('\n', fd);
-}
-
-static void
-statfoo_print_current(struct statfoo *sf, FILE *fd)
-{
- char buf[32];
- const unsigned char *cp;
-
- for (cp = sf->fmts; *cp != '\0'; cp++) {
- if (*cp & 0x80) {
- const struct fmt *f = &sf->stats[*cp &~ 0x80];
- if (sf->get_curstat(sf, *cp &~ 0x80, buf, sizeof(buf)))
- fprintf(fd, "%*s", f->width, buf);
- } else
- putc(*cp, fd);
- }
- putc('\n', fd);
-}
-
-static void
-statfoo_print_total(struct statfoo *sf, FILE *fd)
-{
- char buf[32];
- const unsigned char *cp;
-
- for (cp = sf->fmts; *cp != '\0'; cp++) {
- if (*cp & 0x80) {
- const struct fmt *f = &sf->stats[*cp &~ 0x80];
- if (sf->get_totstat(sf, *cp &~ 0x80, buf, sizeof(buf)))
- fprintf(fd, "%*s", f->width, buf);
- } else
- putc(*cp, fd);
- }
- putc('\n', fd);
-}
-
-static void
-statfoo_print_verbose(struct statfoo *sf, FILE *fd)
-{
- const struct fmt *f;
- char s[32];
- int i, width;
-
- width = 0;
- for (i = 0; i < sf->nstats; i++) {
- f = &sf->stats[i];
- if (f->width > width)
- width = f->width;
- }
- for (i = 0; i < sf->nstats; i++) {
- f = &sf->stats[i];
- if (sf->get_totstat(sf, i, s, sizeof(s)) && strcmp(s, "0"))
- fprintf(fd, "%-*s %s\n", width, s, f->desc);
- }
-}
-
-static void
-statfoo_print_fields(struct statfoo *sf, FILE *fd)
-{
- int i, w, width;
-
- width = 0;
- for (i = 0; i < sf->nstats; i++) {
- w = strlen(sf->stats[i].name);
- if (w > width)
- width = w;
- }
- for (i = 0; i < sf->nstats; i++) {
- const struct fmt *f = &sf->stats[i];
- if (f->width != 0)
- fprintf(fd, "%-*s %s\n", width, f->name, f->desc);
- }
-}
-
-void
-statfoo_init(struct statfoo *sf, const char *name, const struct fmt *stats, int nstats)
-{
- sf->name = name;
- sf->stats = stats;
- sf->nstats = nstats;
- sf->setfmt = statfoo_setfmt;
- sf->collect_cur = statfoo_collect;
- sf->collect_tot = statfoo_collect;
- sf->update_tot = statfoo_update_tot;
- sf->get_curstat = statfoo_get;
- sf->get_totstat = statfoo_get;
- sf->print_header = statfoo_print_header;
- sf->print_current = statfoo_print_current;
- sf->print_total = statfoo_print_total;
- sf->print_verbose = statfoo_print_verbose;
- sf->print_fields = statfoo_print_fields;
-}
diff --git a/tools/tools/npe/npestats/statfoo.h b/tools/tools/npe/npestats/statfoo.h
deleted file mode 100644
index df7eb7acdcdd..000000000000
--- a/tools/tools/npe/npestats/statfoo.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*-
- * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
- * 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,
- * without modification.
- * 2. Redistributions in binary form must reproduce at minimum a disclaimer
- * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
- * redistribution must be conditioned upon including a substantially
- * similar Disclaimer requirement for further binary redistribution.
- *
- * NO WARRANTY
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
- * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES.
- *
- * $FreeBSD$
- */
-
-#ifndef _STATFOO_H_
-#define _STATFOO_H_
-/*
- * Base class for managing+displaying periodically collected statistics.
- */
-
-/*
- * Statistic definition/description. The are defined
- * for stats that correspond 1-1 w/ a collected stat
- * and for stats that are calculated indirectly.
- */
-struct fmt {
- int width; /* printed field width */
- const char* name; /* stat field name referenced by user */
- const char* label; /* printed header label */
- const char* desc; /* verbose description */
-};
-
-#define STATFOO_DECL_METHODS(_p) \
- /* set the format of the statistics to display */ \
- void (*setfmt)(_p, const char *); \
- /* collect+store ``current statistics'' */ \
- void (*collect_cur)(_p); \
- /* collect+store ``total statistics'' */ \
- void (*collect_tot)(_p); \
- /* update ``total statistics'' if necessary from current */ \
- void (*update_tot)(_p); \
- /* format a statistic from the current stats */ \
- int (*get_curstat)(_p, int, char [], size_t); \
- /* format a statistic from the total stats */ \
- int (*get_totstat)(_p, int, char [], size_t); \
- /* print field headers terminated by a \n */ \
- void (*print_header)(_p, FILE *); \
- /* print current statistics terminated by a \n */ \
- void (*print_current)(_p, FILE *); \
- /* print total statistics terminated by a \n */ \
- void (*print_total)(_p, FILE *); \
- /* print total statistics in a verbose (1 stat/line) format */ \
- void (*print_verbose)(_p, FILE *); \
- /* print available statistics */ \
- void (*print_fields)(_p, FILE *)
-
-/*
- * Statistics base class. This class is not usable; only
- * classes derived from it are useful.
- */
-struct statfoo {
- const char *name; /* statistics name, e.g. wlanstats */
- const struct fmt *stats; /* statistics in class */
- int nstats; /* number of stats */
- unsigned char fmts[4096]; /* private: compiled stats to display */
-
- STATFOO_DECL_METHODS(struct statfoo *);
-};
-
-void statfoo_init(struct statfoo *, const char *name,
- const struct fmt *stats, int nstats);
-
-#define STATFOO_DEFINE_BOUNCE(_t) \
-static void _t##_setfmt(struct _t *wf, const char *fmt0) \
- { wf->base.setfmt(&wf->base, fmt0); } \
-static void _t##_collect_cur(struct _t *wf) \
- { wf->base.collect_cur(&wf->base); } \
-static void _t##_collect_tot(struct _t *wf) \
- { wf->base.collect_tot(&wf->base); } \
-static void _t##_update_tot(struct _t *wf) \
- { wf->base.update_tot(&wf->base); } \
-static int _t##_get_curstat(struct _t *wf, int s, char b[], size_t bs) \
- { return wf->base.get_curstat(&wf->base, s, b, bs); } \
-static int _t##_get_totstat(struct _t *wf, int s, char b[], size_t bs) \
- { return wf->base.get_totstat(&wf->base, s, b, bs); } \
-static void _t##_print_header(struct _t *wf, FILE *fd) \
- { wf->base.print_header(&wf->base, fd); } \
-static void _t##_print_current(struct _t *wf, FILE *fd) \
- { wf->base.print_current(&wf->base, fd); } \
-static void _t##_print_total(struct _t *wf, FILE *fd) \
- { wf->base.print_total(&wf->base, fd); } \
-static void _t##_print_verbose(struct _t *wf, FILE *fd) \
- { wf->base.print_verbose(&wf->base, fd); } \
-static void _t##_print_fields(struct _t *wf, FILE *fd) \
- { wf->base.print_fields(&wf->base, fd); }
-
-#define STATFOO_BOUNCE(_p, _t) do { \
- _p->base.setfmt = _t##_setfmt; \
- _p->base.collect_cur = _t##_collect_cur; \
- _p->base.collect_tot = _t##_collect_tot; \
- _p->base.update_tot = _t##_update_tot; \
- _p->base.get_curstat = _t##_get_curstat; \
- _p->base.get_totstat = _t##_get_totstat; \
- _p->base.print_header = _t##_print_header; \
- _p->base.print_current = _t##_print_current; \
- _p->base.print_total = _t##_print_total; \
- _p->base.print_verbose = _t##_print_verbose; \
- _p->base.print_fields = _t##_print_fields; \
-} while (0)
-#endif /* _STATFOO_H_ */