From 543fde3e85cb19f3ac50ab9242d83bcc57291cfd Mon Sep 17 00:00:00 2001 From: Reyk Floeter Date: Fri, 28 Dec 2007 17:22:33 +0000 Subject: add "show mib" command to dump compiled-in MIB names --- usr.sbin/snmpctl/Makefile | 4 ++-- usr.sbin/snmpctl/parser.c | 8 ++++++- usr.sbin/snmpctl/parser.h | 5 +++-- usr.sbin/snmpctl/snmpctl.8 | 14 +++++++----- usr.sbin/snmpctl/snmpctl.c | 56 +++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 72 insertions(+), 15 deletions(-) diff --git a/usr.sbin/snmpctl/Makefile b/usr.sbin/snmpctl/Makefile index dedb04dd6e7..da2c34289d9 100644 --- a/usr.sbin/snmpctl/Makefile +++ b/usr.sbin/snmpctl/Makefile @@ -1,9 +1,9 @@ -# $Id: Makefile,v 1.1 2007/12/05 09:22:44 reyk Exp $ +# $Id: Makefile,v 1.2 2007/12/28 17:22:32 reyk Exp $ .PATH: ${.CURDIR}/../snmpd PROG= snmpctl -SRCS= buffer.c imsg.c log.c snmpctl.c parser.c +SRCS= buffer.c imsg.c log.c smi.c snmpctl.c parser.c MAN= snmpctl.8 diff --git a/usr.sbin/snmpctl/parser.c b/usr.sbin/snmpctl/parser.c index 612c1fe36d5..60175a81079 100644 --- a/usr.sbin/snmpctl/parser.c +++ b/usr.sbin/snmpctl/parser.c @@ -1,4 +1,4 @@ -/* $OpenBSD: parser.c,v 1.2 2007/12/28 15:57:06 thib Exp $ */ +/* $OpenBSD: parser.c,v 1.3 2007/12/28 17:22:32 reyk Exp $ */ /* * Copyright (c) 2004 Esben Norby @@ -55,6 +55,12 @@ static const struct token t_show[]; static const struct token t_main[] = { {KEYWORD, "monitor", MONITOR, NULL}, + {KEYWORD, "show", NONE, t_show}, + {ENDTOKEN, "", NONE, NULL} +}; + +static const struct token t_show[] = { + {KEYWORD, "mib" , SHOW_MIB, NULL}, {ENDTOKEN, "", NONE, NULL} }; diff --git a/usr.sbin/snmpctl/parser.h b/usr.sbin/snmpctl/parser.h index 41202685b9d..3268e21b15b 100644 --- a/usr.sbin/snmpctl/parser.h +++ b/usr.sbin/snmpctl/parser.h @@ -1,4 +1,4 @@ -/* $OpenBSD: parser.h,v 1.1 2007/12/05 09:22:44 reyk Exp $ */ +/* $OpenBSD: parser.h,v 1.2 2007/12/28 17:22:32 reyk Exp $ */ /* * Copyright (c) 2007 Reyk Floeter @@ -18,7 +18,8 @@ enum actions { NONE, - MONITOR + MONITOR, + SHOW_MIB }; struct parse_result { diff --git a/usr.sbin/snmpctl/snmpctl.8 b/usr.sbin/snmpctl/snmpctl.8 index c83747ffe1c..2823cd5f123 100644 --- a/usr.sbin/snmpctl/snmpctl.8 +++ b/usr.sbin/snmpctl/snmpctl.8 @@ -1,6 +1,6 @@ -.\" $OpenBSD: snmpctl.8,v 1.1 2007/12/05 09:22:44 reyk Exp $ +.\" $OpenBSD: snmpctl.8,v 1.2 2007/12/28 17:22:32 reyk Exp $ .\" -.\" Copyright (c) 2006 Reyk Floeter +.\" Copyright (c) 2007 Reyk Floeter .\" .\" Permission to use, copy, modify, and distribute this software for any .\" purpose with or without fee is hereby granted, provided that the above @@ -14,7 +14,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: December 5 2007 $ +.Dd $Mdocdate: December 28 2007 $ .Dt SNMPCTL 8 .Os .Sh NAME @@ -33,8 +33,12 @@ daemon. .Pp The following commands are available: .Bl -tag -width Ds -.It Cm something -Do something +.It Cm monitor +Monitor internal messages of the +.Xr snmpd 8 +subsystems and engines. +.It Cm show mib +Dump the tree of compiled-in MIB objects. .El .Sh FILES .Bl -tag -width "/var/run/snmpd.sockXX" -compact diff --git a/usr.sbin/snmpctl/snmpctl.c b/usr.sbin/snmpctl/snmpctl.c index f20e5036cc8..126871a52fa 100644 --- a/usr.sbin/snmpctl/snmpctl.c +++ b/usr.sbin/snmpctl/snmpctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: snmpctl.c,v 1.3 2007/12/28 15:57:06 thib Exp $ */ +/* $OpenBSD: snmpctl.c,v 1.4 2007/12/28 17:22:32 reyk Exp $ */ /* * Copyright (c) 2007 Reyk Floeter @@ -41,6 +41,7 @@ #include "snmpd.h" #include "parser.h" +#include "mib.h" __dead void usage(void); @@ -50,6 +51,7 @@ struct imsgname { void (*func)(struct imsg *); }; +void show_mib(void); struct imsgname *monitor_lookup(u_int8_t); void monitor_host_status(struct imsg *); void monitor_id(struct imsg *); @@ -63,6 +65,8 @@ struct imsgname imsgunknown = { }; struct imsgbuf *ibuf; +struct snmpd *env; +struct oid mib_tree[] = MIB_TREE; __dead void usage(void) @@ -90,10 +94,30 @@ main(int argc, char *argv[]) int done = 0; int n; + if ((env = calloc(1, sizeof(struct snmpd *))) == NULL) + err(1, "calloc"); + gettimeofday(&env->sc_starttime, NULL); + smi_init(); + /* parse options */ if ((res = parse(argc - 1, argv + 1)) == NULL) exit(1); + switch (res->action) { + case NONE: + usage(); + break; + case SHOW_MIB: + show_mib(); + break; + default: + goto connect; + } + + free(env); + return (0); + + connect: /* connect to snmpd control socket */ if ((ctl_sock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) err(1, "socket"); @@ -113,18 +137,18 @@ main(int argc, char *argv[]) } if ((ibuf = malloc(sizeof(struct imsgbuf))) == NULL) - err(1, NULL); + err(1, "malloc"); imsg_init(ibuf, ctl_sock, NULL); done = 0; /* process user request */ switch (res->action) { - case NONE: - usage(); - /* not reached */ case MONITOR: imsg_compose(ibuf, IMSG_CTL_NOTIFY, 0, 0, -1, NULL, 0); break; + case NONE: + case SHOW_MIB: + break; } while (ibuf->w.queued) @@ -147,6 +171,7 @@ main(int argc, char *argv[]) done = monitor(&imsg); break; case NONE: + case SHOW_MIB: break; } imsg_free(&imsg); @@ -158,6 +183,27 @@ main(int argc, char *argv[]) return (0); } +void +mib_init(void) +{ + /* + * MIB declarations (to register the OID names) + */ + smi_mibtree(mib_tree); +} + +void +show_mib(void) +{ + struct oid *oid; + + for (oid = NULL; (oid = smi_foreach(oid, 0)) != NULL;) { + char buf[BUFSIZ]; + smi_oidstring(&oid->o_id, buf, sizeof(buf)); + printf("%s\n", buf); + } +} + struct imsgname * monitor_lookup(u_int8_t type) { -- cgit v1.2.3