Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Dynamic sysctl.



details:   https://anonhg.NetBSD.org/src/rev/f37cbf4a3d12
branches:  trunk
changeset: 555940:f37cbf4a3d12
user:      atatat <atatat%NetBSD.org@localhost>
date:      Thu Dec 04 19:38:21 2003 +0000

description:
Dynamic sysctl.

Gone are the old kern_sysctl(), cpu_sysctl(), hw_sysctl(),
vfs_sysctl(), etc, routines, along with sysctl_int() et al.  Now all
nodes are registered with the tree, and nodes can be added (or
removed) easily, and I/O to and from the tree is handled generically.

Since the nodes are registered with the tree, the mapping from name to
number (and back again) can now be discovered, instead of having to be
hard coded.  Adding new nodes to the tree is likewise much simpler --
the new infrastructure handles almost all the work for simple types,
and just about anything else can be done with a small helper function.

All existing nodes are where they were before (numerically speaking),
so all existing consumers of sysctl information should notice no
difference.

PS - I'm sorry, but there's a distinct lack of documentation at the
moment.  I'm working on sysctl(3/8/9) right now, and I promise to
watch out for buses.

diffstat:

 sys/arch/alpha/alpha/machdep.c             |    87 +-
 sys/arch/amd64/amd64/machdep.c             |    86 +-
 sys/arch/amiga/amiga/machdep.c             |    38 +-
 sys/arch/arm/arm32/arm32_machdep.c         |   129 +-
 sys/arch/atari/atari/machdep.c             |    38 +-
 sys/arch/cesfic/cesfic/machdep.c           |    39 +-
 sys/arch/dreamcast/dreamcast/machdep.c     |    27 +-
 sys/arch/evbsh3/evbsh3/machdep.c           |    70 +-
 sys/arch/hp300/hp300/machdep.c             |    38 +-
 sys/arch/hp700/hp700/machdep.c             |    34 +-
 sys/arch/hpcsh/hpcsh/machdep.c             |    27 +-
 sys/arch/i386/i386/machdep.c               |   213 +-
 sys/arch/luna68k/luna68k/machdep.c         |    38 +-
 sys/arch/m68k/m68k/svr4_machdep.c          |    12 +-
 sys/arch/mac68k/mac68k/machdep.c           |    38 +-
 sys/arch/mips/mips/mips_machdep.c          |    82 +-
 sys/arch/mmeye/mmeye/machdep.c             |    70 +-
 sys/arch/mvme68k/mvme68k/machdep.c         |    38 +-
 sys/arch/news68k/news68k/machdep.c         |    38 +-
 sys/arch/next68k/next68k/machdep.c         |    40 +-
 sys/arch/pc532/pc532/machdep.c             |    54 +-
 sys/arch/powerpc/powerpc/powerpc_machdep.c |   100 +-
 sys/arch/sparc/sparc/machdep.c             |    76 +-
 sys/arch/sparc64/sparc64/machdep.c         |   102 +-
 sys/arch/sun2/sun2/machdep.c               |    83 +-
 sys/arch/sun3/sun3/machdep.c               |    77 +-
 sys/arch/sun3/sun3x/machdep.c              |    77 +-
 sys/arch/vax/vax/machdep.c                 |    73 +-
 sys/arch/x68k/x68k/machdep.c               |    38 +-
 sys/coda/coda_vfsops.c                     |    47 +-
 sys/compat/common/kern_info_09.c           |    25 +-
 sys/compat/common/kern_info_43.c           |    89 +-
 sys/compat/darwin/darwin_sysctl.c          |   698 ++--
 sys/compat/irix/irix_exec.c                |     6 +-
 sys/compat/irix/irix_sysctl.c              |   103 +-
 sys/compat/irix/irix_sysmp.c               |    23 +-
 sys/compat/irix/irix_systeminfo.c          |    23 +-
 sys/compat/linux/arch/mips/linux_machdep.c |    11 +-
 sys/compat/linux/common/linux_exec.c       |     6 +-
 sys/compat/linux/common/linux_misc.c       |    17 +-
 sys/compat/linux/common/linux_sysctl.c     |   378 +-
 sys/compat/netbsd32/netbsd32_compat_09.c   |    27 +-
 sys/compat/netbsd32/netbsd32_compat_43.c   |    26 +-
 sys/compat/netbsd32/netbsd32_netbsd.c      |     7 +-
 sys/compat/netbsd32/netbsd32_sysctl.c      |   318 +-
 sys/compat/svr4/svr4_stat.c                |    21 +-
 sys/compat/svr4_32/svr4_32_stat.c          |    13 +-
 sys/conf/files                             |     3 +-
 sys/ddb/db_variables.c                     |    70 +-
 sys/ddb/ddbvar.h                           |     4 +-
 sys/fs/adosfs/advfsops.c                   |    34 +-
 sys/fs/cd9660/cd9660_extern.h              |     4 +-
 sys/fs/cd9660/cd9660_vfsops.c              |    32 +-
 sys/fs/filecorefs/filecore_extern.h        |     4 +-
 sys/fs/filecorefs/filecore_vfsops.c        |    31 +-
 sys/fs/msdosfs/msdosfs_vfsops.c            |    34 +-
 sys/fs/ntfs/ntfs_vfsops.c                  |    36 +-
 sys/fs/smbfs/smbfs_vfsops.c                |    26 +-
 sys/fs/union/union_vfsops.c                |    34 +-
 sys/kern/init_sysctl.c                     |  2282 ++++++++++++++++
 sys/kern/kern_clock.c                      |    23 +-
 sys/kern/kern_ntptime.c                    |    32 +-
 sys/kern/kern_resource.c                   |   302 ++-
 sys/kern/kern_sysctl.c                     |  3897 +++++++++++++--------------
 sys/kern/subr_disk.c                       |    32 +-
 sys/kern/subr_prof.c                       |   108 +-
 sys/kern/sys_pipe.c                        |    60 +-
 sys/kern/tty.c                             |    35 +-
 sys/kern/uipc_domain.c                     |    65 +-
 sys/kern/uipc_mbuf.c                       |   206 +-
 sys/kern/vfs_subr.c                        |   145 +-
 sys/miscfs/fdesc/fdesc_vfsops.c            |    34 +-
 sys/miscfs/genfs/layer_extern.h            |     4 +-
 sys/miscfs/genfs/layer_vfsops.c            |    30 +-
 sys/miscfs/kernfs/kernfs_vfsops.c          |    34 +-
 sys/miscfs/nullfs/null_vfsops.c            |    29 +-
 sys/miscfs/overlay/overlay_vfsops.c        |    25 +-
 sys/miscfs/portal/portal_vfsops.c          |    34 +-
 sys/miscfs/procfs/procfs_vfsops.c          |    34 +-
 sys/miscfs/umapfs/umap_vfsops.c            |    29 +-
 sys/net/if.c                               |    92 +-
 sys/net/rtsock.c                           |    36 +-
 sys/netinet/in_proto.c                     |    24 +-
 sys/netinet/ip_icmp.c                      |   162 +-
 sys/netinet/ip_input.c                     |   337 +-
 sys/netinet/tcp_usrreq.c                   |   496 ++-
 sys/netinet/udp_usrreq.c                   |    57 +-
 sys/netinet6/icmp6.c                       |   180 +-
 sys/netinet6/in6_proto.c                   |    18 +-
 sys/netinet6/ip6_input.c                   |   287 +-
 sys/netinet6/ip6protosw.h                  |     5 +-
 sys/netinet6/ipsec.c                       |   363 +-
 sys/netinet6/udp6_usrreq.c                 |    50 +-
 sys/netipsec/ipsec.h                       |     3 +-
 sys/netipsec/ipsec6.h                      |     3 +-
 sys/netipsec/ipsec_netbsd.c                |   199 +-
 sys/netipsec/key.c                         |   111 +-
 sys/netipsec/keysock.c                     |     6 +-
 sys/netipsec/keysock.h                     |     3 +-
 sys/netkey/key.c                           |   295 +-
 sys/netkey/keysock.c                       |     6 +-
 sys/nfs/nfs_vfsops.c                       |    96 +-
 sys/sys/mount.h                            |     7 +-
 sys/sys/proc.h                             |     8 +-
 sys/sys/protosw.h                          |     5 +-
 sys/sys/sysctl.h                           |   247 +-
 sys/ufs/ext2fs/ext2fs_extern.h             |     4 +-
 sys/ufs/ext2fs/ext2fs_vfsops.c             |    32 +-
 sys/ufs/ffs/ffs_extern.h                   |     4 +-
 sys/ufs/ffs/ffs_vfsops.c                   |    60 +-
 sys/ufs/lfs/lfs_extern.h                   |     3 +-
 sys/ufs/lfs/lfs_vfsops.c                   |    72 +-
 sys/ufs/mfs/mfs_extern.h                   |     4 +-
 sys/ufs/mfs/mfs_vfsops.c                   |    26 +-
 sys/uvm/uvm_meter.c                        |   254 +-
 115 files changed, 9114 insertions(+), 5893 deletions(-)

diffs (truncated from 18677 to 300 lines):

diff -r 174005b58f37 -r f37cbf4a3d12 sys/arch/alpha/alpha/machdep.c
--- a/sys/arch/alpha/alpha/machdep.c    Thu Dec 04 19:24:13 2003 +0000
+++ b/sys/arch/alpha/alpha/machdep.c    Thu Dec 04 19:38:21 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.277 2003/10/19 17:45:35 cl Exp $ */
+/* $NetBSD: machdep.c,v 1.278 2003/12/04 19:38:21 atatat Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -75,7 +75,7 @@
 
 #include <sys/cdefs.h>                 /* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.277 2003/10/19 17:45:35 cl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.278 2003/12/04 19:38:21 atatat Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1676,59 +1676,42 @@
 /*
  * machine dependent system variables.
  */
-int
-cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
-       int *name;
-       u_int namelen;
-       void *oldp;
-       size_t *oldlenp;
-       void *newp;
-       size_t newlen;
-       struct proc *p;
+SYSCTL_SETUP(sysctl_machdep_setup, "sysctl machdep subtree setup")
 {
-       dev_t consdev;
 
-       /* all sysctl names at this level are terminal */
-       if (namelen != 1)
-               return (ENOTDIR);               /* overloaded */
-
-       switch (name[0]) {
-       case CPU_CONSDEV:
-               if (cn_tab != NULL)
-                       consdev = cn_tab->cn_dev;
-               else
-                       consdev = NODEV;
-               return (sysctl_rdstruct(oldp, oldlenp, newp, &consdev,
-                       sizeof consdev));
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_NODE, "machdep", NULL,
+                      NULL, 0, NULL, 0,
+                      CTL_MACHDEP, CTL_EOL);
 
-       case CPU_ROOT_DEVICE:
-               return (sysctl_rdstring(oldp, oldlenp, newp,
-                   root_device->dv_xname));
-
-       case CPU_UNALIGNED_PRINT:
-               return (sysctl_int(oldp, oldlenp, newp, newlen,
-                   &alpha_unaligned_print));
-
-       case CPU_UNALIGNED_FIX:
-               return (sysctl_int(oldp, oldlenp, newp, newlen,
-                   &alpha_unaligned_fix));
-
-       case CPU_UNALIGNED_SIGBUS:
-               return (sysctl_int(oldp, oldlenp, newp, newlen,
-                   &alpha_unaligned_sigbus));
-
-       case CPU_BOOTED_KERNEL:
-               return (sysctl_rdstring(oldp, oldlenp, newp,
-                   bootinfo.booted_kernel));
-
-       case CPU_FP_SYNC_COMPLETE:
-               return (sysctl_int(oldp, oldlenp, newp, newlen,
-                   &alpha_fp_sync_complete));
-
-       default:
-               return (EOPNOTSUPP);
-       }
-       /* NOTREACHED */
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRUCT, "console_device", NULL,
+                      sysctl_consdev, 0, NULL, sizeof(dev_t),
+                      CTL_MACHDEP, CPU_CONSDEV, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRING, "root_device", NULL,
+                      sysctl_root_device, 0, NULL, 0,
+                      CTL_MACHDEP, CPU_ROOT_DEVICE, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE,
+                      CTLTYPE_INT, "unaligned_print", NULL,
+                      NULL, 0, &alpha_unaligned_print, 0,
+                      CTL_MACHDEP, CPU_UNALIGNED_PRINT, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE,
+                      CTLTYPE_INT, "unaligned_fix", NULL,
+                      NULL, 0, &alpha_unaligned_fix, 0,
+                      CTL_MACHDEP, CPU_UNALIGNED_FIX, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE,
+                      CTLTYPE_INT, "unaligned_sigbus", NULL,
+                      NULL, 0, &alpha_unaligned_sigbus, 0,
+                      CTL_MACHDEP, CPU_UNALIGNED_SIGBUS, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRING, "booted_kernel", NULL,
+                      NULL, 0, bootinfo.booted_kernel, 0,
+                      CTL_MACHDEP, CPU_BOOTED_KERNEL, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT|SYSCTL_READWRITE,
+                      CTLTYPE_INT, "fp_sync_complete", NULL,
+                      NULL, 0, &alpha_fp_sync_complete, 0,
+                      CTL_MACHDEP, CPU_FP_SYNC_COMPLETE, CTL_EOL);
 }
 
 /*
diff -r 174005b58f37 -r f37cbf4a3d12 sys/arch/amd64/amd64/machdep.c
--- a/sys/arch/amd64/amd64/machdep.c    Thu Dec 04 19:24:13 2003 +0000
+++ b/sys/arch/amd64/amd64/machdep.c    Thu Dec 04 19:38:21 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.16 2003/12/04 13:05:15 keihan Exp $      */
+/*     $NetBSD: machdep.c,v 1.17 2003/12/04 19:38:21 atatat Exp $      */
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.16 2003/12/04 13:05:15 keihan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.17 2003/12/04 19:38:21 atatat Exp $");
 
 #include "opt_user_ldt.h"
 #include "opt_ddb.h"
@@ -443,47 +443,57 @@
 /*  
  * machine dependent system variables.
  */ 
-int
-cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
-       int *name;
-       u_int namelen;
-       void *oldp;
-       size_t *oldlenp;
-       void *newp;
-       size_t newlen;
-       struct proc *p;
+static int
+sysctl_machdep_booted_kernel(SYSCTLFN_ARGS)
 {
-       dev_t consdev;
        struct btinfo_bootpath *bibp;
+       struct sysctlnode node;
+
+       bibp = lookup_bootinfo(BTINFO_BOOTPATH);
+       if(!bibp)
+               return(ENOENT); /* ??? */
 
-       /* all sysctl names at this level are terminal */
-       if (namelen != 1)
-               return (ENOTDIR);               /* overloaded */
+       node = *rnode;
+       node.sysctl_data = bibp->bootpath;
+       node.sysctl_size = sizeof(bibp->bootpath);
+       return (sysctl_lookup(SYSCTLFN_CALL(&node)));
+}
+
+static int
+sysctl_machdep_diskinfo(SYSCTLFN_ARGS)
+{
+        struct sysctlnode node;
+
+       if (x86_64_alldisks == NULL)
+               return (ENOENT);
 
-       switch (name[0]) {
-       case CPU_CONSDEV:
-               if (cn_tab != NULL)
-                       consdev = cn_tab->cn_dev;
-               else
-                       consdev = NODEV;
-               return (sysctl_rdstruct(oldp, oldlenp, newp, &consdev,
-                   sizeof consdev));
+        node = *rnode;
+        node.sysctl_data = x86_64_alldisks;
+        node.sysctl_size = sizeof(struct disklist) +
+           (x86_64_ndisks - 1) * sizeof(struct nativedisk_info);
+        return (sysctl_lookup(SYSCTLFN_CALL(&node)));
+}
+
+SYSCTL_SETUP(sysctl_machdep_setup, "sysctl machdep subtree setup")
+{
 
-       case CPU_BOOTED_KERNEL:
-               bibp = lookup_bootinfo(BTINFO_BOOTPATH);
-               if(!bibp)
-                       return(ENOENT); /* ??? */
-               return (sysctl_rdstring(oldp, oldlenp, newp, bibp->bootpath));
-       case CPU_DISKINFO:
-               if (x86_64_alldisks == NULL)
-                       return (ENOENT);
-               return (sysctl_rdstruct(oldp, oldlenp, newp, x86_64_alldisks,
-                   sizeof (struct disklist) +
-                       (x86_64_ndisks - 1) * sizeof (struct nativedisk_info)));
-       default:
-               return (EOPNOTSUPP);
-       }
-       /* NOTREACHED */
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_NODE, "machdep", NULL,
+                      NULL, 0, NULL, 0,
+                      CTL_MACHDEP, CTL_EOL);
+
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRUCT, "console_device", NULL,
+                      sysctl_consdev, 0, NULL, sizeof(dev_t),
+                      CTL_MACHDEP, CPU_CONSDEV, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRING, "booted_kernel", NULL,
+                      sysctl_machdep_booted_kernel, 0, NULL, 0,
+                      CTL_MACHDEP, CPU_BOOTED_KERNEL, CTL_EOL);
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRUCT, "diskinfo", NULL,
+                      sysctl_machdep_diskinfo, 0, NULL, 0,
+                      CTL_MACHDEP, CPU_DISKINFO, CTL_EOL);
 }
 
 void *
diff -r 174005b58f37 -r f37cbf4a3d12 sys/arch/amiga/amiga/machdep.c
--- a/sys/arch/amiga/amiga/machdep.c    Thu Dec 04 19:24:13 2003 +0000
+++ b/sys/arch/amiga/amiga/machdep.c    Thu Dec 04 19:38:21 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: machdep.c,v 1.186 2003/09/27 19:34:17 mhitch Exp $     */
+/*     $NetBSD: machdep.c,v 1.187 2003/12/04 19:38:21 atatat Exp $     */
 
 /*
  * Copyright (c) 1982, 1986, 1990 The Regents of the University of California.
@@ -85,7 +85,7 @@
 #include "opt_panicbutton.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.186 2003/09/27 19:34:17 mhitch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.187 2003/12/04 19:38:21 atatat Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -542,34 +542,18 @@
 /*
  * machine dependent system variables.
  */
-int
-cpu_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
-       int *name;
-       u_int namelen;
-       void *oldp;
-       size_t *oldlenp;
-       void *newp;
-       size_t newlen;
-       struct proc *p;
+SYSCTL_SETUP(sysctl_machdep_setup, "sysctl machdep subtree setup")
 {
-       dev_t consdev;
 
-       /* all sysctl names at this level are terminal */
-       if (namelen != 1)
-               return(ENOTDIR);               /* overloaded */
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_NODE, "machdep", NULL,
+                      NULL, 0, NULL, 0,
+                      CTL_MACHDEP, CTL_EOL);
 
-       switch (name[0]) {
-       case CPU_CONSDEV:
-               if (cn_tab != NULL)
-                       consdev = cn_tab->cn_dev;
-               else
-                       consdev = NODEV;
-               return(sysctl_rdstruct(oldp, oldlenp, newp, &consdev,
-                   sizeof(consdev)));
-       default:
-               return(EOPNOTSUPP);
-       }
-       /* NOTREACHED */
+       sysctl_createv(SYSCTL_PERMANENT,
+                      CTLTYPE_STRUCT, "console_device", NULL,
+                      sysctl_consdev, 0, NULL, sizeof(dev_t),
+                      CTL_MACHDEP, CPU_CONSDEV, CTL_EOL);
 }
 
 static int waittime = -1;
diff -r 174005b58f37 -r f37cbf4a3d12 sys/arch/arm/arm32/arm32_machdep.c
--- a/sys/arch/arm/arm32/arm32_machdep.c        Thu Dec 04 19:24:13 2003 +0000
+++ b/sys/arch/arm/arm32/arm32_machdep.c        Thu Dec 04 19:38:21 2003 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: arm32_machdep.c,v 1.38 2003/09/21 00:26:09 matt Exp $  */
+/*     $NetBSD: arm32_machdep.c,v 1.39 2003/12/04 19:38:21 atatat Exp $        */
 
 /*
  * Copyright (c) 1994-1998 Mark Brinicombe.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arm32_machdep.c,v 1.38 2003/09/21 00:26:09 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arm32_machdep.c,v 1.39 2003/12/04 19:38:21 atatat Exp $");



Home | Main Index | Thread Index | Old Index