diff options
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/sysctl/Makefile | 1 | ||||
-rw-r--r-- | sbin/sysctl/sysctl.c | 96 |
2 files changed, 90 insertions, 7 deletions
diff --git a/sbin/sysctl/Makefile b/sbin/sysctl/Makefile index 39432099a2c..0d87533a761 100644 --- a/sbin/sysctl/Makefile +++ b/sbin/sysctl/Makefile @@ -1,3 +1,4 @@ +# $OpenBSD: Makefile,v 1.2 1996/11/25 08:22:41 mickey Exp $ # $NetBSD: Makefile,v 1.3 1995/09/30 07:12:43 thorpej Exp $ # @(#)Makefile 8.1 (Berkeley) 6/6/93 diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c index c05b94f00bf..d4957d72837 100644 --- a/sbin/sysctl/sysctl.c +++ b/sbin/sysctl/sysctl.c @@ -1,3 +1,4 @@ +/* $OpenBSD: sysctl.c,v 1.4 1996/11/25 08:22:43 mickey Exp $ */ /* $NetBSD: sysctl.c,v 1.9 1995/09/30 07:12:50 thorpej Exp $ */ /* @@ -43,7 +44,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)sysctl.c 8.1 (Berkeley) 6/6/93"; #else -static char *rcsid = "$NetBSD: sysctl.c,v 1.9 1995/09/30 07:12:50 thorpej Exp $"; +static char *rcsid = "$OpenBSD: sysctl.c,v 1.4 1996/11/25 08:22:43 mickey Exp $"; #endif #endif /* not lint */ @@ -66,12 +67,17 @@ static char *rcsid = "$NetBSD: sysctl.c,v 1.9 1995/09/30 07:12:50 thorpej Exp $" #include <netinet/tcp.h> #include <netinet/tcp_timer.h> #include <netinet/tcp_var.h> + +#include <netipx/ipx.h> +#include <netipx/ipx_var.h> +#include <netipx/spx_var.h> #include <ddb/db_var.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <ctype.h> struct ctlname topname[] = CTL_NAMES; struct ctlname kernname[] = CTL_KERN_NAMES; @@ -118,6 +124,16 @@ int Aflag, aflag, nflag, wflag; #define BOOTTIME 0x00000002 #define CONSDEV 0x00000004 +/* prototypes */ +void usage(); +void debuginit(); +void parse __P(( char *string, int flags)); +void listall __P((char *prefix, struct list *lp)); +int findname __P((char *string, char *level, char **bufp, struct list *namelist)); +int sysctl_inet __P((char *string, char **bufpp, int mib[], int flags, int *typep)); +int sysctl_ipx __P((char *string, char **bufpp, int mib[], int flags, int *typep)); +int sysctl_fs __P((char *string, char **bufpp, int mib[], int flags, int *typep)); + int main(argc, argv) int argc; @@ -169,6 +185,7 @@ main(argc, argv) /* * List all variables known to the system. */ +void listall(prefix, lp) char *prefix; struct list *lp; @@ -178,7 +195,7 @@ listall(prefix, lp) if (lp->list == 0) return; - strcpy(name, prefix); + strncpy(name, prefix, BUFSIZ-1); cp = &name[strlen(name)]; *cp++ = '.'; for (lvl2 = 0; lvl2 < lp->size; lvl2++) { @@ -194,6 +211,7 @@ listall(prefix, lp) * Lookup and print out the MIB entry if it exists. * Set a new value if requested. */ +void parse(string, flags) char *string; int flags; @@ -206,7 +224,7 @@ parse(string, flags) size_t size; struct list *lp; int mib[CTL_MAXNAME]; - char *cp, *bufp, buf[BUFSIZ], strval[BUFSIZ]; + char *cp, *bufp, buf[BUFSIZ]; bufp = buf; snprintf(buf, BUFSIZ, "%s", string); @@ -230,7 +248,7 @@ parse(string, flags) lp = &secondlevel[indx]; if (lp->list == 0) { fprintf(stderr, "%s: class is not implemented\n", - topname[indx]); + topname[indx].ctl_name); return; } if (bufp == NULL) { @@ -317,6 +335,12 @@ parse(string, flags) break; return; } + if (mib[1] == PF_IPX) { + len = sysctl_ipx(string, &bufp, mib, flags, &type); + if (len >= 0) + break; + return; + } if (flags == 0) return; fprintf(stderr, "Use netstat to view %s information\n", string); @@ -407,7 +431,7 @@ parse(string, flags) boottime = btp->tv_sec; fprintf(stdout, "%s = %s\n", string, ctime(&boottime)); } else - fprintf(stdout, "%d\n", btp->tv_sec); + fprintf(stdout, "%ld\n", btp->tv_sec); return; } if (special & CONSDEV) { @@ -442,7 +466,7 @@ parse(string, flags) } else { if (!nflag) fprintf(stdout, "%s: %s -> ", string, buf); - fprintf(stdout, "%s\n", newval); + fprintf(stdout, "%s\n", (char *)newval); } return; @@ -475,6 +499,7 @@ parse(string, flags) /* * Initialize the set of debugging names */ +void debuginit() { int mib[3], loc, i; @@ -502,6 +527,7 @@ struct list fslist = { posixname, FS_POSIX_MAXID }; /* * handle file system requests */ +int sysctl_fs(string, bufpp, mib, flags, typep) char *string; char **bufpp; @@ -509,7 +535,6 @@ sysctl_fs(string, bufpp, mib, flags, typep) int flags; int *typep; { - struct list *lp; int indx; if (*bufpp == NULL) { @@ -553,6 +578,7 @@ struct list inetvars[] = { /* * handle internet requests */ +int sysctl_inet(string, bufpp, mib, flags, typep) char *string; char **bufpp; @@ -590,9 +616,64 @@ sysctl_inet(string, bufpp, mib, flags, typep) return (4); } +struct ctlname ipxname[] = CTL_IPXPROTO_NAMES; +struct ctlname ipxpname[] = IPXCTL_NAMES; +struct ctlname spxpname[] = SPXCTL_NAMES; +struct list ipxlist = { ipxname, IPXCTL_MAXID }; +struct list ipxvars[] = { + { ipxpname, IPXCTL_MAXID }, /* ipx */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { spxpname, SPXCTL_MAXID }, +}; + +/* + * handle internet requests + */ +int +sysctl_ipx(string, bufpp, mib, flags, typep) + char *string; + char **bufpp; + int mib[]; + int flags; + int *typep; +{ + struct list *lp; + int indx; + + if (*bufpp == NULL) { + listall(string, &ipxlist); + return (-1); + } + if ((indx = findname(string, "third", bufpp, &ipxlist)) == -1) + return (-1); + mib[2] = indx; + if (indx <= IPXPROTO_SPX && ipxvars[indx].list != NULL) + lp = &ipxvars[indx]; + else if (!flags) + return (-1); + else { + fprintf(stderr, "%s: no variables defined for this protocol\n", + string); + return (-1); + } + if (*bufpp == NULL) { + listall(string, lp); + return (-1); + } + if ((indx = findname(string, "fourth", bufpp, lp)) == -1) + return (-1); + mib[3] = indx; + *typep = lp->list[indx].ctl_type; + return (4); +} + /* * Scan a list of names searching for a particular name. */ +int findname(string, level, bufp, namelist) char *string; char *level; @@ -618,6 +699,7 @@ findname(string, level, bufp, namelist) return (i); } +void usage() { |