Add kernel support for sysctl descriptions. The NO_SYSCTL_DESCRIPTIONS option

disables them if they're not wanted; in that case, sysctl_sysctl_descr will
always return an empty string.

Apporved by:	jkh
This commit is contained in:
des 1999-01-10 05:33:43 +00:00
parent f94cebfd23
commit 127fba5ec1
6 changed files with 73 additions and 8 deletions

View File

@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
# $Id: LINT,v 1.528 1999/01/08 17:31:07 eivind Exp $
# $Id: LINT,v 1.529 1999/01/09 18:12:07 wpaul Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@ -772,6 +772,9 @@ options VINUMDEBUG #enable Vinum debugging hooks
# Size of the kernel message buffer. Should be N * pagesize.
options "MSGBUF_SIZE=40960"
# Conserve space by not including sysctl descriptions (see sysctl(8))
#options NO_SYSCTL_DESCRIPTIONS
#####################################################################
# HARDWARE DEVICE CONFIGURATION

View File

@ -1,4 +1,4 @@
# $Id: options,v 1.113 1998/12/28 16:31:26 peter Exp $
# $Id: options,v 1.114 1999/01/08 17:31:05 eivind Exp $
#
# On the handling of kernel options
#
@ -254,6 +254,7 @@ DIAGNOSTIC opt_global.h
ENABLE_VFS_IOOPT opt_global.h
INVARIANT_SUPPORT opt_global.h
INVARIANTS opt_global.h
NO_SYSCTL_DESCRIPTIONS opt_global.h
SIMPLELOCK_DEBUG opt_global.h
VFS_BIO_DEBUG opt_global.h

View File

@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
# $Id: LINT,v 1.528 1999/01/08 17:31:07 eivind Exp $
# $Id: LINT,v 1.529 1999/01/09 18:12:07 wpaul Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@ -772,6 +772,9 @@ options VINUMDEBUG #enable Vinum debugging hooks
# Size of the kernel message buffer. Should be N * pagesize.
options "MSGBUF_SIZE=40960"
# Conserve space by not including sysctl descriptions (see sysctl(8))
#options NO_SYSCTL_DESCRIPTIONS
#####################################################################
# HARDWARE DEVICE CONFIGURATION

View File

@ -2,7 +2,7 @@
# LINT -- config file for checking all the sources, tries to pull in
# as much of the source tree as it can.
#
# $Id: LINT,v 1.528 1999/01/08 17:31:07 eivind Exp $
# $Id: LINT,v 1.529 1999/01/09 18:12:07 wpaul Exp $
#
# NB: You probably don't want to try running a kernel built from this
# file. Instead, you should start from GENERIC, and add options from
@ -772,6 +772,9 @@ options VINUMDEBUG #enable Vinum debugging hooks
# Size of the kernel message buffer. Should be N * pagesize.
options "MSGBUF_SIZE=40960"
# Conserve space by not including sysctl descriptions (see sysctl(8))
#options NO_SYSCTL_DESCRIPTIONS
#####################################################################
# HARDWARE DEVICE CONFIGURATION

View File

@ -37,7 +37,7 @@
* SUCH DAMAGE.
*
* @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
* $Id: kern_sysctl.c,v 1.80 1998/12/13 07:18:54 truckman Exp $
* $Id: kern_sysctl.c,v 1.81 1998/12/27 18:03:29 dfr Exp $
*/
#include "opt_compat.h"
@ -155,9 +155,10 @@ sysctl_order_all(void)
*
* {0,0} printf the entire MIB-tree.
* {0,1,...} return the name of the "..." OID.
* {0,2,...} return the next OID.
* {0,2} return the next OID.
* {0,3} return the OID of the name in "new"
* {0,4,...} return the kind & format info for the "..." OID.
* {0,5,...} return the description for the "..." OID.
*/
static void
@ -489,9 +490,53 @@ sysctl_sysctl_oidfmt SYSCTL_HANDLER_ARGS
return (error);
}
SYSCTL_NODE(_sysctl, 4, oidfmt, CTLFLAG_RD, sysctl_sysctl_oidfmt, "");
static int
sysctl_sysctl_descr SYSCTL_HANDLER_ARGS
{
#ifndef NO_SYSCTL_DESCRIPTIONS
int *name = (int *) arg1;
u_int namelen = arg2;
int i, j, error = 0;
struct sysctl_oid **oidpp;
struct linker_set *lsp = &sysctl_;
if (!lsp || !namelen)
return (SYSCTL_OUT(req, "", 1));
while (namelen) {
oidpp = (struct sysctl_oid **) lsp->ls_items;
j = lsp->ls_length;
lsp = 0;
for (i = 0; i < j; i++, oidpp++) {
if (*oidpp && ((*oidpp)->oid_number != *name))
continue;
namelen--;
name++;
if (((*oidpp)->oid_kind & CTLTYPE) != CTLTYPE_NODE)
break;
if ((*oidpp)->oid_handler)
break;
lsp = (struct linker_set*)(*oidpp)->oid_arg1;
break;
}
}
error = SYSCTL_OUT(req, (*oidpp)->oid_descr,
strlen((*oidpp)->oid_descr) + 1);
return (error);
#else
return (SYSCTL_OUT(req, "", 1));
#endif /* !NO_SYSCTL_DESCRIPTIONS */
}
SYSCTL_NODE(_sysctl, 5, descr, CTLFLAG_RD, sysctl_sysctl_descr, "");
/*
* Default "handler" functions.
*/

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)sysctl.h 8.1 (Berkeley) 6/2/93
* $Id: sysctl.h,v 1.67 1998/12/16 16:06:29 bde Exp $
* $Id: sysctl.h,v 1.68 1998/12/27 18:03:29 dfr Exp $
*/
#ifndef _SYS_SYSCTL_H_
@ -122,6 +122,9 @@ struct sysctl_oid {
const char *oid_name;
int (*oid_handler) SYSCTL_HANDLER_ARGS;
const char *oid_fmt;
#ifndef NO_SYSCTL_DESCRIPTIONS
const char *oid_descr;
#endif /* !NO_SYSCTL_DESCRIPTIONS */
};
#define SYSCTL_IN(r, p, l) (r->newfunc)(r, p, l)
@ -134,10 +137,17 @@ int sysctl_handle_string SYSCTL_HANDLER_ARGS;
int sysctl_handle_opaque SYSCTL_HANDLER_ARGS;
/* This constructs a "raw" MIB oid. */
#ifndef NO_SYSCTL_DESCRIPTIONS
#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
static struct sysctl_oid sysctl__##parent##_##name = { \
nbr, kind, a1, a2, #name, handler, fmt, descr }; \
DATA_SET(sysctl_##parent, sysctl__##parent##_##name)
#else
#define SYSCTL_OID(parent, nbr, name, kind, a1, a2, handler, fmt, descr) \
static struct sysctl_oid sysctl__##parent##_##name = { \
nbr, kind, a1, a2, #name, handler, fmt }; \
DATA_SET(sysctl_##parent, sysctl__##parent##_##name)
#endif /* !NO_SYSCTL_DESCRIPTIONS */
/* This constructs a node from which other oids can hang. */
#define SYSCTL_NODE(parent, nbr, name, access, handler, descr) \