summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-11-08 08:48:36 +0000
committerphk <phk@FreeBSD.org>1995-11-08 08:48:36 +0000
commited1a50b4d7111b218b8582948fe23aa8318f68da (patch)
tree78213fe76ac78089384eab57a1fb507e8fb15619 /sys/kern
parent022ad6e83389fbbb373702949e7b57ca5029e1ac (diff)
downloadFreeBSD-src-ed1a50b4d7111b218b8582948fe23aa8318f68da.zip
FreeBSD-src-ed1a50b4d7111b218b8582948fe23aa8318f68da.tar.gz
Fix some of the sysctl broke, and add a lot more to it.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_clock.c15
-rw-r--r--sys/kern/kern_sysctl.c134
-rw-r--r--sys/kern/kern_tc.c15
-rw-r--r--sys/kern/kern_timeout.c15
4 files changed, 136 insertions, 43 deletions
diff --git a/sys/kern/kern_clock.c b/sys/kern/kern_clock.c
index 1b617fa..1773287 100644
--- a/sys/kern/kern_clock.c
+++ b/sys/kern/kern_clock.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
- * $Id: kern_clock.c,v 1.16 1995/09/09 18:10:01 davidg Exp $
+ * $Id: kern_clock.c,v 1.17 1995/10/12 20:35:01 wollman Exp $
*/
/* Portions of this software are covered by the following: */
@@ -975,13 +975,10 @@ statclock(frame)
/*
* Return information about system clocks.
*/
-int
-sysctl_clockrate(where, sizep)
- register char *where;
- size_t *sizep;
+static int
+sysctl_kern_clockrate SYSCTL_HANDLER_ARGS
{
struct clockinfo clkinfo;
-
/*
* Construct clockinfo structure.
*/
@@ -989,9 +986,13 @@ sysctl_clockrate(where, sizep)
clkinfo.tick = tick;
clkinfo.profhz = profhz;
clkinfo.stathz = stathz ? stathz : hz;
- return (sysctl_rdstruct(where, sizep, NULL, &clkinfo, sizeof(clkinfo)));
+ return (sysctl_handle_opaque(
+ oidp, &clkinfo, sizeof clkinfo, oldp, oldlenp, newp, newlen));
}
+SYSCTL_OID(_kern, KERN_CLOCKRATE, clockrate,
+ CTLTYPE_STRUCT|CTLFLAG_RD, 0, 0, sysctl_kern_clockrate, "");
+
/*#ifdef PPS_SYNC*/
#if 0
/* This code is completely bogus; if anybody ever wants to use it, get
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 98f172b..2c4217e 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)kern_sysctl.c 8.4 (Berkeley) 4/14/94
- * $Id: kern_sysctl.c,v 1.30 1995/10/28 13:07:23 phk Exp $
+ * $Id: kern_sysctl.c,v 1.31 1995/11/06 16:18:52 phk Exp $
*/
/*
@@ -57,7 +57,11 @@
#include <sys/sysctl.h>
#include <sys/user.h>
+extern struct linker_set sysctl_;
+
/* BEGIN_MIB */
+SYSCTL_NODE(, 0, sysctl, CTLFLAG_RW, 0,
+ "Sysctl internal magic");
SYSCTL_NODE(, CTL_KERN, kern, CTLFLAG_RW, 0,
"High kernel, proc, limits &c");
SYSCTL_NODE(, CTL_VM, vm, CTLFLAG_RW, 0,
@@ -122,7 +126,7 @@ SYSCTL_STRUCT(_kern, KERN_BOOTTIME, boottime,
SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD, machine, 0, "");
-SYSCTL_STRING(_hw, HW_MACHINE, model, CTLFLAG_RD, cpu_model, 0, "");
+SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD, cpu_model, 0, "");
SYSCTL_INT(_hw, HW_NCPU, ncpu, CTLFLAG_RD, 0, 1, "");
@@ -165,6 +169,103 @@ sysctl_kern_hostname SYSCTL_HANDLER_ARGS
SYSCTL_PROC(_kern, KERN_HOSTNAME, hostname, CTLTYPE_STRING|CTLFLAG_RW,
&hostname, sizeof(hostname), sysctl_kern_hostname, "");
+static int
+sysctl_order_cmp(void *a, void *b)
+{
+ struct sysctl_oid **pa,**pb;
+ pa = (struct sysctl_oid**) a;
+ pb = (struct sysctl_oid**) b;
+ if (!*pa) return 1;
+ if (!*pb) return -1;
+ return ((*pa)->oid_number - (*pb)->oid_number);
+}
+
+static void
+sysctl_order(void *arg)
+{
+ int j,k;
+ struct linker_set *l = (struct linker_set *) arg;
+ struct sysctl_oid **oidpp;
+
+ j = l->ls_length;
+ oidpp = (struct sysctl_oid **) l->ls_items;
+ for (; j--; oidpp++) {
+ if (!*oidpp)
+ continue;
+ if ((*oidpp)->oid_arg1 == arg) {
+ *oidpp = 0;
+ continue;
+ }
+ if (((*oidpp)->oid_kind & CTLTYPE) == CTLTYPE_NODE)
+ if (!(*oidpp)->oid_handler)
+ sysctl_order((*oidpp)->oid_arg1);
+ }
+ qsort(l->ls_items, l->ls_length, sizeof l->ls_items[0],
+ sysctl_order_cmp);
+}
+
+SYSINIT(sysctl,SI_SUB_KMEM,SI_ORDER_ANY,sysctl_order,&sysctl_);
+
+static void
+sysctl_sysctl_debug_dump_node(struct linker_set *l,int i)
+{
+ int j,k;
+ struct sysctl_oid **oidpp;
+
+ j = l->ls_length;
+ oidpp = (struct sysctl_oid **) l->ls_items;
+ for (; j--; oidpp++) {
+
+ if (!*oidpp)
+ continue;
+
+ for (k=0; k<i; k++)
+ printf(" ");
+
+ if ((*oidpp)->oid_number > 100) {
+ printf("Junk! %p nm %x # %x k %x a1 %x a2 %x h %x\n",
+ *oidpp,
+ (*oidpp)->oid_number, (*oidpp)->oid_name,
+ (*oidpp)->oid_kind, (*oidpp)->oid_arg1,
+ (*oidpp)->oid_arg2, (*oidpp)->oid_handler);
+ continue;
+ }
+ printf("%d %s ", (*oidpp)->oid_number, (*oidpp)->oid_name);
+
+ printf("%c%c",
+ (*oidpp)->oid_kind & CTLFLAG_RD ? 'R':' ',
+ (*oidpp)->oid_kind & CTLFLAG_WR ? 'W':' ');
+
+ switch ((*oidpp)->oid_kind & CTLTYPE) {
+ case CTLTYPE_NODE:
+ if ((*oidpp)->oid_handler) {
+ printf(" Node(proc)\n");
+ } else {
+ printf(" Node\n");
+ sysctl_sysctl_debug_dump_node(
+ (*oidpp)->oid_arg1,i+2);
+ }
+ break;
+ case CTLTYPE_INT: printf(" Int\n"); break;
+ case CTLTYPE_STRING: printf(" String\n"); break;
+ case CTLTYPE_QUAD: printf(" Quad\n"); break;
+ case CTLTYPE_OPAQUE: printf(" Opaque/struct\n"); break;
+ default: printf("\n");
+ }
+
+ }
+}
+
+
+static int
+sysctl_sysctl_debug SYSCTL_HANDLER_ARGS
+{
+ sysctl_sysctl_debug_dump_node(&sysctl_,0);
+ return ENOENT;
+}
+
+SYSCTL_PROC(_sysctl, 0, debug, CTLTYPE_STRING|CTLFLAG_RD,
+ 0, 0, sysctl_sysctl_debug, "");
char domainname[MAXHOSTNAMELEN];
int domainnamelen;
@@ -287,9 +388,6 @@ struct sysctl_args {
* We work entirely in kernel-space at this time.
*/
-extern struct linker_set sysctl_;
-
-int sysctl_dummy;
int
sysctl_root SYSCTL_HANDLER_ARGS
@@ -305,9 +403,7 @@ sysctl_root SYSCTL_HANDLER_ARGS
indx = 0;
while (j-- && indx < CTL_MAXNAME) {
- if (*oidpp &&
- ((void *)&sysctl_dummy != (void *)*oidpp) &&
- ((*oidpp)->oid_number == name[indx])) {
+ if (*oidpp && ((*oidpp)->oid_number == name[indx])) {
indx++;
if (((*oidpp)->oid_kind & CTLTYPE) == CTLTYPE_NODE) {
if ((*oidpp)->oid_handler)
@@ -396,14 +492,6 @@ __sysctl(p, uap, retval)
error = sysctl_root(0, name, uap->namelen, oldp, &oldlen,
newp, uap->newlen);
-#if 0
- if (error) {
- printf("SYSCTL_ROOT: ");
- for(i=0;i<uap->namelen;i++)
- printf("%d ", name[i]);
- printf("= %d\n", error);
- }
-#endif
if (!error || error == ENOMEM) {
if (uap->oldlenp) {
@@ -440,12 +528,6 @@ __sysctl(p, uap, retval)
fn = vm_sysctl;
break;
case CTL_NET:
-#if 0
- printf("SYSCTL_NET: ");
- for(i=0;i<uap->namelen;i++)
- printf("%d ", name[i]);
- printf("\n");
-#endif
fn = net_sysctl;
break;
case CTL_FS:
@@ -490,6 +572,14 @@ __sysctl(p, uap, retval)
wakeup((caddr_t)&memlock);
}
}
+#if 0
+ if (error) {
+ printf("SYSCTL_ERROR: ");
+ for(i=0;i<uap->namelen;i++)
+ printf("%d ", name[i]);
+ printf("= %d\n", error);
+ }
+#endif
if (error)
return (error);
if (uap->oldlenp)
diff --git a/sys/kern/kern_tc.c b/sys/kern/kern_tc.c
index 1b617fa..1773287 100644
--- a/sys/kern/kern_tc.c
+++ b/sys/kern/kern_tc.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
- * $Id: kern_clock.c,v 1.16 1995/09/09 18:10:01 davidg Exp $
+ * $Id: kern_clock.c,v 1.17 1995/10/12 20:35:01 wollman Exp $
*/
/* Portions of this software are covered by the following: */
@@ -975,13 +975,10 @@ statclock(frame)
/*
* Return information about system clocks.
*/
-int
-sysctl_clockrate(where, sizep)
- register char *where;
- size_t *sizep;
+static int
+sysctl_kern_clockrate SYSCTL_HANDLER_ARGS
{
struct clockinfo clkinfo;
-
/*
* Construct clockinfo structure.
*/
@@ -989,9 +986,13 @@ sysctl_clockrate(where, sizep)
clkinfo.tick = tick;
clkinfo.profhz = profhz;
clkinfo.stathz = stathz ? stathz : hz;
- return (sysctl_rdstruct(where, sizep, NULL, &clkinfo, sizeof(clkinfo)));
+ return (sysctl_handle_opaque(
+ oidp, &clkinfo, sizeof clkinfo, oldp, oldlenp, newp, newlen));
}
+SYSCTL_OID(_kern, KERN_CLOCKRATE, clockrate,
+ CTLTYPE_STRUCT|CTLFLAG_RD, 0, 0, sysctl_kern_clockrate, "");
+
/*#ifdef PPS_SYNC*/
#if 0
/* This code is completely bogus; if anybody ever wants to use it, get
diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c
index 1b617fa..1773287 100644
--- a/sys/kern/kern_timeout.c
+++ b/sys/kern/kern_timeout.c
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)kern_clock.c 8.5 (Berkeley) 1/21/94
- * $Id: kern_clock.c,v 1.16 1995/09/09 18:10:01 davidg Exp $
+ * $Id: kern_clock.c,v 1.17 1995/10/12 20:35:01 wollman Exp $
*/
/* Portions of this software are covered by the following: */
@@ -975,13 +975,10 @@ statclock(frame)
/*
* Return information about system clocks.
*/
-int
-sysctl_clockrate(where, sizep)
- register char *where;
- size_t *sizep;
+static int
+sysctl_kern_clockrate SYSCTL_HANDLER_ARGS
{
struct clockinfo clkinfo;
-
/*
* Construct clockinfo structure.
*/
@@ -989,9 +986,13 @@ sysctl_clockrate(where, sizep)
clkinfo.tick = tick;
clkinfo.profhz = profhz;
clkinfo.stathz = stathz ? stathz : hz;
- return (sysctl_rdstruct(where, sizep, NULL, &clkinfo, sizeof(clkinfo)));
+ return (sysctl_handle_opaque(
+ oidp, &clkinfo, sizeof clkinfo, oldp, oldlenp, newp, newlen));
}
+SYSCTL_OID(_kern, KERN_CLOCKRATE, clockrate,
+ CTLTYPE_STRUCT|CTLFLAG_RD, 0, 0, sysctl_kern_clockrate, "");
+
/*#ifdef PPS_SYNC*/
#if 0
/* This code is completely bogus; if anybody ever wants to use it, get
OpenPOWER on IntegriCloud