diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1999-07-08 00:02:27 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1999-07-08 00:02:27 +0000 |
commit | bb8da9a588b69a7ed2a15110631ab1826a0f8cb5 (patch) | |
tree | 1b7a0402542ba0fe0e7fcdf51587465d7eb36bb5 | |
parent | aaa7e978ab0fa0994f3213dcc24473e15d9f39b4 (diff) |
cleanup; still needs kmem removal (terrible)
-rw-r--r-- | sbin/ipfstat/fils.c | 197 | ||||
-rw-r--r-- | sbin/ipfstat/ipfstat.8 | 25 | ||||
-rw-r--r-- | sbin/ipfstat/kmem.c | 14 | ||||
-rw-r--r-- | sbin/ipfstat/kmem.h | 9 |
4 files changed, 126 insertions, 119 deletions
diff --git a/sbin/ipfstat/fils.c b/sbin/ipfstat/fils.c index a6c4a03eacb..1cabd92fe33 100644 --- a/sbin/ipfstat/fils.c +++ b/sbin/ipfstat/fils.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fils.c,v 1.14 1999/02/05 05:58:43 deraadt Exp $ */ +/* $OpenBSD: fils.c,v 1.15 1999/07/08 00:02:26 deraadt Exp $ */ /* * Copyright (C) 1993-1998 by Darren Reed. * @@ -51,18 +51,9 @@ #if !defined(lint) static const char sccsid[] = "@(#)fils.c 1.21 4/20/96 (C) 1993-1996 Darren Reed"; -static const char rcsid[] = "@(#)$Id: fils.c,v 1.14 1999/02/05 05:58:43 deraadt Exp $"; +static const char rcsid[] = "@(#)$Id: fils.c,v 1.15 1999/07/08 00:02:26 deraadt Exp $"; #endif -#ifdef _PATH_UNIX -# define VMUNIX _PATH_UNIX -#else -# define VMUNIX "/vmunix" -#endif - -extern char *optarg; -#define PRINTF (void)printf -#define FPRINTF (void)fprintf #define F_IN 0 #define F_OUT 1 #define F_AC 2 @@ -71,6 +62,8 @@ static char *filters[4] = { "ipfilter(in)", "ipfilter(out)", int opts = 0; +char *nlistf = NULL, *memf = NULL; + extern int main __P((int, char *[])); static void showstats __P((int, friostat_t *)); static void showfrstates __P((int, ipfrstat_t *)); @@ -80,15 +73,14 @@ static void showauthstates __P((int, fr_authstat_t *)); static void Usage __P((char *)); static void printlist __P((frentry_t *)); - static void Usage(name) char *name; { - fprintf(stderr, "Usage: %s [-aAfhIinosv] [-d <device>]\n", name); + fprintf(stderr, + "usage: %s [-aAfhIinosv] [-d device] [-M core] [-N system]\n", name); exit(1); } - int main(argc,argv) int argc; char *argv[]; @@ -100,13 +92,7 @@ char *argv[]; char *name = NULL, *device = IPL_NAME; int c, fd; - if (openkmem() == -1) - exit(-1); - - (void)setuid(getuid()); - (void)setgid(getgid()); - - while ((c = getopt(argc, argv, "aAfhIinosvd:")) != -1) + while ((c = getopt(argc, argv, "AafhIinosvd:M:N:")) != -1) { switch (c) { @@ -143,12 +129,29 @@ char *argv[]; case 'v' : opts |= OPT_VERBOSE; break; + case 'N': + nlistf = optarg; + break; + case 'M': + memf = optarg; + break; default : Usage(argv[0]); break; } } + if (nlistf != NULL || memf != NULL) { + (void)setuid(getuid()); + (void)setgid(getgid()); + } + + if (openkmem(nlistf, memf) == -1) + exit(-1); + + (void)setuid(getuid()); + (void)setgid(getgid()); + if ((fd = open(device, O_RDONLY)) < 0) { perror("open"); exit(-1); @@ -181,7 +184,7 @@ char *argv[]; } if (opts & OPT_VERBOSE) - PRINTF("opts %#x name %s\n", opts, name ? name : "<>"); + printf("opts %#x name %s\n", opts, name ? name : "<>"); if ((opts & OPT_AUTHSTATS) && (ioctl(fd, SIOCATHST, &frauthst) == -1)) { @@ -222,63 +225,63 @@ struct friostat *fp; perror("ioctl(SIOCGETFF)"); #if SOLARIS - PRINTF("dropped packets:\tin %lu\tout %lu\n", + printf("dropped packets:\tin %lu\tout %lu\n", fp->f_st[0].fr_drop, fp->f_st[1].fr_drop); - PRINTF("non-data packets:\tin %lu\tout %lu\n", + printf("non-data packets:\tin %lu\tout %lu\n", fp->f_st[0].fr_notdata, fp->f_st[1].fr_notdata); - PRINTF("no-data packets:\tin %lu\tout %lu\n", + printf("no-data packets:\tin %lu\tout %lu\n", fp->f_st[0].fr_nodata, fp->f_st[1].fr_nodata); - PRINTF("non-ip packets:\t\tin %lu\tout %lu\n", + printf("non-ip packets:\t\tin %lu\tout %lu\n", fp->f_st[0].fr_notip, fp->f_st[1].fr_notip); - PRINTF(" bad packets:\t\tin %lu\tout %lu\n", + printf(" bad packets:\t\tin %lu\tout %lu\n", fp->f_st[0].fr_bad, fp->f_st[1].fr_bad); #endif - PRINTF(" input packets:\t\tblocked %lu passed %lu nomatch %lu", + printf(" input packets:\t\tblocked %lu passed %lu nomatch %lu", fp->f_st[0].fr_block, fp->f_st[0].fr_pass, fp->f_st[0].fr_nom); - PRINTF(" counted %lu\n", fp->f_st[0].fr_acct); - PRINTF("output packets:\t\tblocked %lu passed %lu nomatch %lu", + printf(" counted %lu\n", fp->f_st[0].fr_acct); + printf("output packets:\t\tblocked %lu passed %lu nomatch %lu", fp->f_st[1].fr_block, fp->f_st[1].fr_pass, fp->f_st[1].fr_nom); - PRINTF(" counted %lu\n", fp->f_st[0].fr_acct); - PRINTF(" input packets logged:\tblocked %lu passed %lu\n", + printf(" counted %lu\n", fp->f_st[0].fr_acct); + printf(" input packets logged:\tblocked %lu passed %lu\n", fp->f_st[0].fr_bpkl, fp->f_st[0].fr_ppkl); - PRINTF("output packets logged:\tblocked %lu passed %lu\n", + printf("output packets logged:\tblocked %lu passed %lu\n", fp->f_st[1].fr_bpkl, fp->f_st[1].fr_ppkl); - PRINTF(" packets logged:\tinput %lu output %lu\n", + printf(" packets logged:\tinput %lu output %lu\n", fp->f_st[0].fr_pkl, fp->f_st[1].fr_pkl); - PRINTF(" log failures:\t\tinput %lu output %lu\n", + printf(" log failures:\t\tinput %lu output %lu\n", fp->f_st[0].fr_skip, fp->f_st[1].fr_skip); - PRINTF("fragment state(in):\tkept %lu\tlost %lu\n", + printf("fragment state(in):\tkept %lu\tlost %lu\n", fp->f_st[0].fr_nfr, fp->f_st[0].fr_bnfr); - PRINTF("fragment state(out):\tkept %lu\tlost %lu\n", + printf("fragment state(out):\tkept %lu\tlost %lu\n", fp->f_st[1].fr_nfr, fp->f_st[1].fr_bnfr); - PRINTF("packet state(in):\tkept %lu\tlost %lu\n", + printf("packet state(in):\tkept %lu\tlost %lu\n", fp->f_st[0].fr_ads, fp->f_st[0].fr_bads); - PRINTF("packet state(out):\tkept %lu\tlost %lu\n", + printf("packet state(out):\tkept %lu\tlost %lu\n", fp->f_st[1].fr_ads, fp->f_st[1].fr_bads); - PRINTF("ICMP replies:\t%lu\tTCP RSTs sent:\t%lu\n", + printf("ICMP replies:\t%lu\tTCP RSTs sent:\t%lu\n", fp->f_st[0].fr_ret, fp->f_st[1].fr_ret); - PRINTF("Result cache hits(in):\t%lu\t(out):\t%lu\n", + printf("Result cache hits(in):\t%lu\t(out):\t%lu\n", fp->f_st[0].fr_chit, fp->f_st[1].fr_chit); - PRINTF("IN Pullups succeeded:\t%lu\tfailed:\t%lu\n", + printf("IN Pullups succeeded:\t%lu\tfailed:\t%lu\n", fp->f_st[0].fr_pull[0], fp->f_st[0].fr_pull[1]); - PRINTF("OUT Pullups succeeded:\t%lu\tfailed:\t%lu\n", + printf("OUT Pullups succeeded:\t%lu\tfailed:\t%lu\n", fp->f_st[1].fr_pull[0], fp->f_st[1].fr_pull[1]); - PRINTF("Fastroute successes:\t%lu\tfailures:\t%lu\n", + printf("Fastroute successes:\t%lu\tfailures:\t%lu\n", fp->f_froute[0], fp->f_froute[1]); - PRINTF("TCP cksum fails(in):\t%lu\t(out):\t%lu\n", + printf("TCP cksum fails(in):\t%lu\t(out):\t%lu\n", fp->f_st[0].fr_tcpbad, fp->f_st[1].fr_tcpbad); - PRINTF("Packet log flags set: (%#x)\n", frf); + printf("Packet log flags set: (%#x)\n", frf); if (frf & FF_LOGPASS) - PRINTF("\tpackets passed through filter\n"); + printf("\tpackets passed through filter\n"); if (frf & FF_LOGBLOCK) - PRINTF("\tpackets blocked by filter\n"); + printf("\tpackets blocked by filter\n"); if (frf & FF_LOGNOMATCH) - PRINTF("\tpackets not matched by filter\n"); + printf("\tpackets not matched by filter\n"); if (!frf) - PRINTF("\tnone\n"); + printf("\tnone\n"); } @@ -298,18 +301,18 @@ frentry_t *fp; fp->fr_flags |= FR_OUTQUE; if (opts & (OPT_HITS|OPT_VERBOSE)) #ifdef USE_QUAD_T - PRINTF("%qd ", fp->fr_hits); + printf("%qd ", fp->fr_hits); #else - PRINTF("%ld ", fp->fr_hits); + printf("%ld ", fp->fr_hits); #endif if (opts & (OPT_ACCNT|OPT_VERBOSE)) #ifdef USE_QUAD_T - PRINTF("%qd ", fp->fr_bytes); + printf("%qd ", fp->fr_bytes); #else - PRINTF("%ld ", fp->fr_bytes); + printf("%ld ", fp->fr_bytes); #endif if (opts & OPT_SHOWLINENO) - PRINTF("@%d ", n); + printf("@%d ", n); printfr(fp); if (opts & OPT_VERBOSE) binprint(fp); @@ -339,7 +342,7 @@ struct friostat *fiop; } else if (opts & OPT_INQUE) fp = (struct frentry *)fiop->f_acctin[set]; else { - FPRINTF(stderr, "No -i or -o given with -a\n"); + fprintf(stderr, "No -i or -o given with -a\n"); return; } } else if (opts & OPT_OUTQUE) { @@ -351,12 +354,12 @@ struct friostat *fiop; } else return; if (opts & OPT_VERBOSE) - FPRINTF(stderr, "showlist:opts %#x i %d\n", opts, i); + fprintf(stderr, "showlist:opts %#x i %d\n", opts, i); if (opts & OPT_VERBOSE) - PRINTF("fp %p set %d\n", fp, set); + printf("fp %p set %d\n", fp, set); if (!fp) { - FPRINTF(stderr, "empty list for %s%s\n", + fprintf(stderr, "empty list for %s%s\n", (opts & OPT_INACTIVE) ? "inactive " : "", filters[i]); return; } @@ -371,12 +374,12 @@ ips_stat_t *ipsp; ipstate_t *istab[IPSTATE_SIZE], ips; int i; - PRINTF("IP states added:\n\t%lu TCP\n\t%lu UDP\n\t%lu ICMP\n", + printf("IP states added:\n\t%lu TCP\n\t%lu UDP\n\t%lu ICMP\n", ipsp->iss_tcp, ipsp->iss_udp, ipsp->iss_icmp); - PRINTF("\t%lu hits\n\t%lu misses\n", ipsp->iss_hits, ipsp->iss_miss); - PRINTF("\t%lu maximum\n\t%lu no memory\n", + printf("\t%lu hits\n\t%lu misses\n", ipsp->iss_hits, ipsp->iss_miss); + printf("\t%lu maximum\n\t%lu no memory\n", ipsp->iss_max, ipsp->iss_nomem); - PRINTF("\t%lu active\n\t%lu expired\n\t%lu closed\n", + printf("\t%lu active\n\t%lu expired\n\t%lu closed\n", ipsp->iss_active, ipsp->iss_expire, ipsp->iss_fin); if (kmemcpy((char *)istab, (u_long)ipsp->iss_table, sizeof(istab))) return; @@ -385,79 +388,79 @@ ips_stat_t *ipsp; if (kmemcpy((char *)&ips, (u_long)istab[i], sizeof(ips)) == -1) break; - PRINTF("%s -> ", inet_ntoa(ips.is_src)); - PRINTF("%s ttl %ld pass %d pr %d state %d/%d\n", + printf("%s -> ", inet_ntoa(ips.is_src)); + printf("%s ttl %ld pass %d pr %d state %d/%d\n", inet_ntoa(ips.is_dst), ips.is_age, ips.is_pass, ips.is_p, ips.is_state[0], ips.is_state[1]); #ifdef USE_QUAD_T - PRINTF("\tpkts %qd bytes %qd", + printf("\tpkts %qd bytes %qd", ips.is_pkts, ips.is_bytes); #else - PRINTF("\tpkts %ld bytes %ld", + printf("\tpkts %ld bytes %ld", ips.is_pkts, ips.is_bytes); #endif if (ips.is_p == IPPROTO_TCP) - PRINTF("\t%hu -> %hu %lu:%lu %hu:%hu", + printf("\t%hu -> %hu %lu:%lu %hu:%hu", ntohs(ips.is_sport), ntohs(ips.is_dport), ips.is_seq, ips.is_ack, ips.is_swin, ips.is_dwin); else if (ips.is_p == IPPROTO_UDP) - PRINTF(" %hu -> %hu", ntohs(ips.is_sport), + printf(" %hu -> %hu", ntohs(ips.is_sport), ntohs(ips.is_dport)); else if (ips.is_p == IPPROTO_ICMP) - PRINTF(" %hu %hu %d", ips.is_icmp.ics_id, + printf(" %hu %hu %d", ips.is_icmp.ics_id, ips.is_icmp.ics_seq, ips.is_icmp.ics_type); - PRINTF("\n\t"); + printf("\n\t"); if (ips.is_pass & FR_PASS) { - PRINTF("pass"); + printf("pass"); } else if (ips.is_pass & FR_BLOCK) { - PRINTF("block"); + printf("block"); if (ips.is_pass & FR_RETICMP) - PRINTF(" return-icmp"); + printf(" return-icmp"); if (ips.is_pass & FR_RETRST) - PRINTF(" return-rst"); + printf(" return-rst"); } else if ((ips.is_pass & FR_LOGMASK) == FR_LOG) { - PRINTF("log"); + printf("log"); if (ips.is_pass & FR_LOGBODY) - PRINTF(" body"); + printf(" body"); if (ips.is_pass & FR_LOGFIRST) - PRINTF(" first"); + printf(" first"); } else if (ips.is_pass & FR_ACCOUNT) - PRINTF("count"); + printf("count"); if (ips.is_pass & FR_OUTQUE) - PRINTF(" out"); + printf(" out"); else - PRINTF(" in"); + printf(" in"); if ((ips.is_pass & (FR_LOGB|FR_LOGP)) != 0) { - PRINTF(" log"); + printf(" log"); if (ips.is_pass & FR_LOGBODY) - PRINTF(" body"); + printf(" body"); if (ips.is_pass & FR_LOGFIRST) - PRINTF(" first"); + printf(" first"); if (ips.is_pass & FR_LOGORBLOCK) - PRINTF(" or-block"); + printf(" or-block"); } if (ips.is_pass & FR_QUICK) - PRINTF(" quick"); + printf(" quick"); if (ips.is_pass & FR_KEEPFRAG) - PRINTF(" keep frags"); + printf(" keep frags"); /* a given; no? */ if (ips.is_pass & FR_KEEPSTATE) - PRINTF(" keep state"); - PRINTF("\n"); + printf(" keep state"); + printf("\n"); - PRINTF("\tpkt_flags & %x = %x,\t", ips.is_flags & 0xf, + printf("\tpkt_flags & %x = %x,\t", ips.is_flags & 0xf, ips.is_flags >> 4); - PRINTF("\tpkt_options & %x = %x\n", ips.is_optmsk, + printf("\tpkt_options & %x = %x\n", ips.is_optmsk, ips.is_opt); - PRINTF("\tpkt_security & %x = %x, pkt_auth & %x = %x\n", + printf("\tpkt_security & %x = %x, pkt_auth & %x = %x\n", ips.is_secmsk, ips.is_sec, ips.is_authmsk, ips.is_auth); istab[i] = ips.is_next; @@ -472,11 +475,11 @@ ipfrstat_t *ifsp; struct ipfr *ipfrtab[IPFT_SIZE], ifr; int i; - PRINTF("IP fragment states:\n\t%lu new\n\t%lu expired\n\t%lu hits\n", + printf("IP fragment states:\n\t%lu new\n\t%lu expired\n\t%lu hits\n", ifsp->ifs_new, ifsp->ifs_expire, ifsp->ifs_hits); - PRINTF("\t%lu no memory\n\t%lu already exist\n", + printf("\t%lu no memory\n\t%lu already exist\n", ifsp->ifs_nomem, ifsp->ifs_exists); - PRINTF("\t%lu inuse\n", ifsp->ifs_inuse); + printf("\t%lu inuse\n", ifsp->ifs_inuse); if (kmemcpy((char *)ipfrtab, (u_long)ifsp->ifs_table, sizeof(ipfrtab))) return; for (i = 0; i < IPFT_SIZE; i++) @@ -484,8 +487,8 @@ ipfrstat_t *ifsp; if (kmemcpy((char *)&ifr, (u_long)ipfrtab[i], sizeof(ifr)) == -1) break; - PRINTF("%s -> ", inet_ntoa(ifr.ipfr_src)); - PRINTF("%s %d %d %d %#02x = %#x\n", + printf("%s -> ", inet_ntoa(ifr.ipfr_src)); + printf("%s %d %d %d %#02x = %#x\n", inet_ntoa(ifr.ipfr_dst), ifr.ipfr_id, ifr.ipfr_ttl, ifr.ipfr_p, ifr.ipfr_tos, ifr.ipfr_pass); diff --git a/sbin/ipfstat/ipfstat.8 b/sbin/ipfstat/ipfstat.8 index fb013e2fa09..9fcbc785b6d 100644 --- a/sbin/ipfstat/ipfstat.8 +++ b/sbin/ipfstat/ipfstat.8 @@ -1,6 +1,6 @@ -.\" $OpenBSD: ipfstat.8,v 1.14 1999/07/07 10:50:10 aaron Exp $ +.\" $OpenBSD: ipfstat.8,v 1.15 1999/07/08 00:02:26 deraadt Exp $ .Dd June 13, 1999 -.Dt ipfstat 8 +.Dt IPFSTAT 8 .Os .Sh NAME .Nm ipfstat @@ -9,6 +9,8 @@ .Nm ipfstat .Op Fl aAfhIinosv .Op Fl d Ar device +.Op Fl M Ar core +.Op Fl N Ar system .Sh DESCRIPTION By default, .Nm @@ -24,18 +26,6 @@ it will retrieve and display the appropriate list of filter rules currently installed and in use by the kernel. .Pp -.Nm -examines -.Pa /dev/kmem -using the symbols -.Sy _fr_flags , -.Sy _frstats , -.Sy _filterin , -and -.Sy _filterout . -To run and work, it needs to be able to read both -.Pa /dev/kmem -and the kernel itself. .Sh OPTIONS .Bl -tag -width "-d device" .It Fl a @@ -72,6 +62,13 @@ filter list details. For use in combination with .Fl i . .It Fl n Show the rule number for each rule as it is printed. +.It Fl N Ar system +Extract the name list from the specified system instead of the default +.Pa /bsd . +.It Fl M Ar core +Extract values associated with the name list from the specified core +instead of the default +.Pa /dev/kmem . .It Fl o Display the filter list used for the output side of the kernel IP processing. .It Fl s diff --git a/sbin/ipfstat/kmem.c b/sbin/ipfstat/kmem.c index 1a9120253c5..7e3d6ba70dd 100644 --- a/sbin/ipfstat/kmem.c +++ b/sbin/ipfstat/kmem.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kmem.c,v 1.10 1999/02/05 05:58:43 deraadt Exp $ */ +/* $OpenBSD: kmem.c,v 1.11 1999/07/08 00:02:26 deraadt Exp $ */ /* * Copyright (C) 1993-1998 by Darren Reed. * @@ -21,14 +21,18 @@ #if !defined(lint) static const char sccsid[] = "@(#)kmem.c 1.4 1/12/96 (C) 1992 Darren Reed"; -static const char rcsid[] = "@(#)$Id: kmem.c,v 1.10 1999/02/05 05:58:43 deraadt Exp $"; +static const char rcsid[] = "@(#)$Id: kmem.c,v 1.11 1999/07/08 00:02:26 deraadt Exp $"; #endif static int kmemfd = -1; -int openkmem() +int openkmem(nlistf, memf) +char *nlistf, *memf; { - if ((kmemfd = open(KMEM,O_RDONLY)) == -1) + if (memf == NULL) + memf = KMEM; + + if ((kmemfd = open(memf,O_RDONLY)) == -1) { perror("kmeminit:open"); return -1; @@ -46,7 +50,7 @@ register int n; if (!n) return 0; if (kmemfd == -1) - if (openkmem() == -1) + if (openkmem(nlistf, memf) == -1) return -1; if (lseek(kmemfd, pos, 0) == -1) { diff --git a/sbin/ipfstat/kmem.h b/sbin/ipfstat/kmem.h index 5a19954df85..5744e396d76 100644 --- a/sbin/ipfstat/kmem.h +++ b/sbin/ipfstat/kmem.h @@ -1,11 +1,11 @@ -/* $OpenBSD: kmem.h,v 1.7 1999/02/05 05:58:44 deraadt Exp $ */ +/* $OpenBSD: kmem.h,v 1.8 1999/07/08 00:02:26 deraadt Exp $ */ /* * Copyright (C) 1993-1998 by Darren Reed. * * Redistribution and use in source and binary forms are permitted * provided that this notice is preserved and due credit is given * to the original author and the contributors. - * $Id: kmem.h,v 1.7 1999/02/05 05:58:44 deraadt Exp $ + * $Id: kmem.h,v 1.8 1999/07/08 00:02:26 deraadt Exp $ */ #ifndef __KMEM_H__ @@ -18,13 +18,16 @@ # define __P(x) () # endif #endif -extern int openkmem __P((void)); +extern int openkmem __P((char *, char *)); extern int kmemcpy __P((char *, long, int)); #if defined(__NetBSD__) || defined(__OpenBSD) # include <paths.h> #endif +extern char *nlistf; +extern char *memf; + #ifdef _PATH_KMEM # define KMEM _PATH_KMEM #else |