From dc896e1e4b69830c2b4c9813802dd76b4045b651 Mon Sep 17 00:00:00 2001 From: csjp Date: Tue, 13 Sep 2005 16:04:56 +0000 Subject: Garbage collect bpfstat. This is handled by netstat now. Requested by: rwatson --- tools/tools/bpfstat/Makefile | 17 --- tools/tools/bpfstat/bpfstat.8 | 83 ------------- tools/tools/bpfstat/bpfstat.c | 266 ------------------------------------------ tools/tools/bpfstat/bpfstat.h | 53 --------- 4 files changed, 419 deletions(-) delete mode 100644 tools/tools/bpfstat/Makefile delete mode 100644 tools/tools/bpfstat/bpfstat.8 delete mode 100644 tools/tools/bpfstat/bpfstat.c delete mode 100644 tools/tools/bpfstat/bpfstat.h (limited to 'tools') diff --git a/tools/tools/bpfstat/Makefile b/tools/tools/bpfstat/Makefile deleted file mode 100644 index 17e38b1..0000000 --- a/tools/tools/bpfstat/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -# $FreeBSD$ - -OBJS= bpfstat.o -CC?= CC -PROG= bpfstat -PREFIX?=/usr/local - -bpfstat: $(OBJS) - $(CC) -lm -o $(PROG) $(OBJS) -install: - cp $(PROG) $(PREFIX)/sbin - cp $(PROG).8 $(PREFIX)/man/man8/ - -clean: - rm -f *.o $(PROG) - -all: bpfstat diff --git a/tools/tools/bpfstat/bpfstat.8 b/tools/tools/bpfstat/bpfstat.8 deleted file mode 100644 index 5123beb..0000000 --- a/tools/tools/bpfstat/bpfstat.8 +++ /dev/null @@ -1,83 +0,0 @@ -.\" Copyright (c) 2005 Christian S.J. Peron -.\" 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. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. -.\" -.\" $FreeBSD$ -.\" -.Dd July 22, 2005 -.Os -.Dt BPFSTAT 8 -.Sh NAME -.Nm bpfstat -.Nd "retrieve bpf statistics" -.Sh SYNOPSIS -.Nm -.Op Fl q -.Op Fl c Ar procname -.Op Fl i Ar seconds -.Op Fl I Ar interface -.Op Fl p Ar pid -.Sh DESCRIPTION -The -.Nm -utility will print statistics associated with active -.Xr bpf 4 -devices. -These statistics contain information about device state as -well as packets which have been received, dropped or -matched by the bpf filter program. -.Pp -The following options are available: -.Bl -tag -width indent -.It Fl c Ar procname -Print information about devices which were opened by processes named -.Ar procname . -.It Fl i Ar seconds -Continuously retrieve statistics for devices, sleeping for -.Ar seconds -seconds after each iteration. -.It Fl I Ar interface -Print information about devices if they are attached to network -interface -.Ar interface . -.It Fl p Ar pid -Print information about devices if they were opened by process ID -.Ar pid . -.It Fl q -Suppress printing of column names. -.El -.Sh "EXIT STATUS" -The -.Nm -utility exits 0 on success, and >0 if an error occurs. -.Sh "SEE ALSO" -.Xr pcap 3 , -.Xr bpf 4 , -.Xr tcpdump 8 -.Sh HISTORY -The -.Nm -utility first appeared in -.Fx 7.0 . -.Sh AUTHORS -.An "Christian S.J. Peron" Aq csjp@FreeBSD.org diff --git a/tools/tools/bpfstat/bpfstat.c b/tools/tools/bpfstat/bpfstat.c deleted file mode 100644 index 8061f3d..0000000 --- a/tools/tools/bpfstat/bpfstat.c +++ /dev/null @@ -1,266 +0,0 @@ -/*- - * Copyright (c) 2005 Christian S.J. Peron - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - * $FreeBSD$ - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "bpfstat.h" - -/* Function prototypes */ -static void bpfd_print_header(struct conf *); -static void bpfd_parse_flags(struct xbpf_d *, char *); -static struct xbpf_d * - bpfd_get_descs(struct conf *); -static void bpfd_print_row(struct xbpf_d *, struct conf *); -static void usage(char *); -static void setwidths(struct colwidths *); -static int diglen(double); - -static char * -pidname(pid_t pid) -{ - struct kinfo_proc newkp; - int error, mib[4]; - size_t size; - - mib[0] = CTL_KERN; - mib[1] = KERN_PROC; - mib[2] = KERN_PROC_PID; - mib[3] = pid; - size = sizeof(newkp); - error = sysctl(mib, 4, &newkp, &size, NULL, 0); - if (error < 0) - return (strdup("??????")); - return (strdup(newkp.ki_comm)); -} - -static void -setwidths(struct colwidths *c) -{ - c->rc_width = 4; - c->dc_width = 4; - c->pd_width = 3; - c->hb_width = 5; - c->sb_width = 5; - c->fc_width = 5; -} - -static int -diglen(double n) -{ - int width; - - width = (int)ceil(log10(n)); - return (width); -} - -static void -calcwidths(struct conf *conf, struct xbpf_d *bd) -{ - struct colwidths *c; - int width; - - c = &conf->cw; - width = diglen((double)bd->bd_rcount); - if (width > c->rc_width) - c->rc_width = width; - width = diglen((double)bd->bd_dcount); - if (width > c->dc_width) - c->dc_width = width; - width = diglen((double)bd->bd_pid); - if (width > c->pd_width) - c->pd_width = width; - width = diglen((double)bd->bd_slen); - if (width > c->sb_width) - c->sb_width = width; - width = diglen((double)bd->bd_hlen); - if (width > c->hb_width) - c->hb_width = width; - width = diglen((double)bd->bd_fcount); - if (width > c->fc_width) - c->fc_width = width; -} - -static void -bpfd_print_header(struct conf *conf) -{ - struct colwidths *c; - - if (conf->qflag || conf->lps > 0) - return; - c = &conf->cw; - printf("%*s %*s %*s %*s %*s %*s %*s %*s %s\n", - c->pd_width, "pid", - 7, "netif", - 7, "flags", - c->rc_width, "recv", - c->dc_width, "drop", - c->fc_width, "match", - c->sb_width, "sblen", - c->hb_width, "hblen", - "command"); -} - -static void -bpfd_print_row(struct xbpf_d *bd, struct conf *conf) -{ - struct colwidths *c; - char *pname, flagbuf[8]; - - pname = pidname(bd->bd_pid); - c = &conf->cw; - bpfd_parse_flags(bd, &flagbuf[0]); - printf("%*d %*s %*s %*lu %*lu %*lu %*d %*d %s\n", - c->pd_width, bd->bd_pid, - 7, bd->bd_ifname, - 7, flagbuf, - c->rc_width, bd->bd_rcount, - c->dc_width, bd->bd_dcount, - c->fc_width, bd->bd_fcount, - c->sb_width, bd->bd_slen, - c->hb_width, bd->bd_hlen, - pname); -} - -static void -bpfd_parse_flags(struct xbpf_d *bd, char *flagbuf) -{ - - *flagbuf++ = bd->bd_promisc ? 'p' : '-'; - *flagbuf++ = bd->bd_immediate ? 'i' : '-'; - *flagbuf++ = bd->bd_hdrcmplt ? '-' : 'f'; - *flagbuf++ = bd->bd_seesent ? 's' : '.'; - *flagbuf++ = bd->bd_async ? 'a' : '-'; - *flagbuf++ = bd->bd_locked ? 'l' : '-'; - *flagbuf++ = '\0'; -} - -static struct xbpf_d * -bpfd_get_descs(struct conf *conf) -{ - size_t bpf_alloc; - int error; - - error = sysctlbyname(BPFSOID, NULL, &bpf_alloc, - NULL, 0); - if (error < 0) - err(1, "get buffer size"); - if (bpf_alloc == 0) - return (NULL); - conf->bpf_vec = malloc(bpf_alloc); - if (conf->bpf_vec == NULL) - return (NULL); - conf->nbdevs = bpf_alloc / sizeof(struct xbpf_d); - bzero(conf->bpf_vec, bpf_alloc); - error = sysctlbyname(BPFSOID, conf->bpf_vec, - &bpf_alloc, NULL, 0); - if (error < 0) - err(1, "get descriptors failed"); - if (bpf_alloc == 0) - return (NULL); - return (conf->bpf_vec); -} - -int -main(int argc, char *argv []) -{ - struct xbpf_d *bd, *bpfds; - int ch; - char *rem; - struct conf cf; - - memset(&cf, 0, sizeof(cf)); - setwidths(&cf.cw); - while ((ch = getopt(argc, argv, "c:i:I:p:q")) != -1) - switch (ch) { - case 'c': - cf.cflag = optarg; - break; - case 'i': - cf.iflag = strtol(optarg, &rem, 0); - break; - case 'I': - cf.Iflag = optarg; - break; - case 'p': - cf.pflag = strtol(optarg, &rem, 0); - break; - case 'q': - cf.qflag++; - break; - default: - usage(argv[0]); - } - do { - bpfds = bpfd_get_descs(&cf); - if (bpfds == NULL) - break; - for (bd = &bpfds[0]; bd < &bpfds[cf.nbdevs]; bd++) - calcwidths(&cf, bd); - bpfd_print_header(&cf); - for (bd = &bpfds[0]; bd < &bpfds[cf.nbdevs]; bd++) { - if (cf.pflag && cf.pflag != bd->bd_pid) - continue; - if (cf.Iflag && - strcmp(bd->bd_ifname, cf.Iflag) != 0) - continue; - bpfd_print_row(bd, &cf); - } - cf.lps++; - free(bpfds); - (void)sleep(cf.iflag); - } while (cf.iflag > 0); - return (0); -} - -static void -usage(char *prog) -{ - - fprintf(stderr, - "usage: %s [-q] [-c procname] [-i wait] [-I interface] [-p pid]\n", - prog); - exit(1); -} diff --git a/tools/tools/bpfstat/bpfstat.h b/tools/tools/bpfstat/bpfstat.h deleted file mode 100644 index 7b83a99..0000000 --- a/tools/tools/bpfstat/bpfstat.h +++ /dev/null @@ -1,53 +0,0 @@ -/*- - * Copyright (c) 2005 Christian S J Peron - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - * - * $FreeBSD$ - */ -#ifndef BPFSTAT_H_ -#define BPFSTAT_H_ - -struct colwidths { - int rc_width; - int dc_width; - int pd_width; - int hb_width; - int sb_width; - int fc_width; -}; - -struct conf { - char *cflag; - char *Iflag; - pid_t pflag; - int qflag; - int iflag; - int nbdevs; - int lps; - struct colwidths cw; - struct xbpf_d *bpf_vec; -}; - -#define BPFSOID "net.bpf.stats" -#endif /* BPFSTAT_H_ */ -- cgit v1.1