The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kern/init_sysctl_base.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: init_sysctl_base.c,v 1.8 2017/10/31 12:37:23 martin Exp $ */
    2 
    3 /*-
    4  * Copyright (c) 2003, 2007, 2008, 2009 The NetBSD Foundation, Inc.
    5  * All rights reserved.
    6  *
    7  * This code is derived from software contributed to The NetBSD Foundation
    8  * by Andrew Brown, and by Andrew Doran.
    9  *
   10  * Redistribution and use in source and binary forms, with or without
   11  * modification, are permitted provided that the following conditions
   12  * are met:
   13  * 1. Redistributions of source code must retain the above copyright
   14  *    notice, this list of conditions and the following disclaimer.
   15  * 2. Redistributions in binary form must reproduce the above copyright
   16  *    notice, this list of conditions and the following disclaimer in the
   17  *    documentation and/or other materials provided with the distribution.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  */
   31 
   32 #include <sys/cdefs.h>
   33 __KERNEL_RCSID(0, "$NetBSD: init_sysctl_base.c,v 1.8 2017/10/31 12:37:23 martin Exp $");
   34 
   35 #include <sys/types.h>
   36 #include <sys/param.h>
   37 #include <sys/sysctl.h>
   38 #include <sys/proc.h>
   39 #include <sys/cpu.h>
   40 #include <sys/kernel.h>
   41 #include <sys/disklabel.h>
   42 
   43 static int sysctl_setlen(SYSCTLFN_PROTO);
   44 
   45 /*
   46  * sets up the base nodes...
   47  */
   48 void
   49 sysctl_basenode_init(void)
   50 {
   51 
   52         sysctl_createv(NULL, 0, NULL, NULL,
   53                        CTLFLAG_PERMANENT,
   54                        CTLTYPE_NODE, "kern",
   55                        SYSCTL_DESCR("High kernel"),
   56                        NULL, 0, NULL, 0,
   57                        CTL_KERN, CTL_EOL);
   58         sysctl_createv(NULL, 0, NULL, NULL,
   59                        CTLFLAG_PERMANENT,
   60                        CTLTYPE_NODE, "vm",
   61                        SYSCTL_DESCR("Virtual memory"),
   62                        NULL, 0, NULL, 0,
   63                        CTL_VM, CTL_EOL);
   64         sysctl_createv(NULL, 0, NULL, NULL,
   65                        CTLFLAG_PERMANENT,
   66                        CTLTYPE_NODE, "vfs",
   67                        SYSCTL_DESCR("Filesystem"),
   68                        NULL, 0, NULL, 0,
   69                        CTL_VFS, CTL_EOL);
   70         sysctl_createv(NULL, 0, NULL, NULL,
   71                        CTLFLAG_PERMANENT,
   72                        CTLTYPE_NODE, "net",
   73                        SYSCTL_DESCR("Networking"),
   74                        NULL, 0, NULL, 0,
   75                        CTL_NET, CTL_EOL);
   76         sysctl_createv(NULL, 0, NULL, NULL,
   77                        CTLFLAG_PERMANENT,
   78                        CTLTYPE_NODE, "debug",
   79                        SYSCTL_DESCR("Debugging"),
   80                        NULL, 0, NULL, 0,
   81                        CTL_DEBUG, CTL_EOL);
   82         sysctl_createv(NULL, 0, NULL, NULL,
   83                        CTLFLAG_PERMANENT,
   84                        CTLTYPE_NODE, "hw",
   85                        SYSCTL_DESCR("Generic CPU, I/O"),
   86                        NULL, 0, NULL, 0,
   87                        CTL_HW, CTL_EOL);
   88         sysctl_createv(NULL, 0, NULL, NULL,
   89                        CTLFLAG_PERMANENT,
   90                        CTLTYPE_NODE, "machdep",
   91                        SYSCTL_DESCR("Machine dependent"),
   92                        NULL, 0, NULL, 0,
   93                        CTL_MACHDEP, CTL_EOL);
   94         /*
   95          * this node is inserted so that the sysctl nodes in libc can
   96          * operate.
   97          */
   98         sysctl_createv(NULL, 0, NULL, NULL,
   99                        CTLFLAG_PERMANENT,
  100                        CTLTYPE_NODE, "user",
  101                        SYSCTL_DESCR("User-level"),
  102                        NULL, 0, NULL, 0,
  103                        CTL_USER, CTL_EOL);
  104         sysctl_createv(NULL, 0, NULL, NULL,
  105                        CTLFLAG_PERMANENT,
  106                        CTLTYPE_NODE, "ddb",
  107                        SYSCTL_DESCR("In-kernel debugger"),
  108                        NULL, 0, NULL, 0,
  109                        CTL_DDB, CTL_EOL);
  110         sysctl_createv(NULL, 0, NULL, NULL,
  111                        CTLFLAG_PERMANENT,
  112                        CTLTYPE_NODE, "proc",
  113                        SYSCTL_DESCR("Per-process"),
  114                        NULL, 0, NULL, 0,
  115                        CTL_PROC, CTL_EOL);
  116         sysctl_createv(NULL, 0, NULL, NULL,
  117                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
  118                        CTLTYPE_NODE, "vendor",
  119                        SYSCTL_DESCR("Vendor specific"),
  120                        NULL, 0, NULL, 0,
  121                        CTL_VENDOR, CTL_EOL);
  122         sysctl_createv(NULL, 0, NULL, NULL,
  123                        CTLFLAG_PERMANENT,
  124                        CTLTYPE_NODE, "emul",
  125                        SYSCTL_DESCR("Emulation settings"),
  126                        NULL, 0, NULL, 0,
  127                        CTL_EMUL, CTL_EOL);
  128         sysctl_createv(NULL, 0, NULL, NULL,
  129                        CTLFLAG_PERMANENT,
  130                        CTLTYPE_NODE, "security",
  131                        SYSCTL_DESCR("Security"),
  132                        NULL, 0, NULL, 0,
  133                        CTL_SECURITY, CTL_EOL);
  134 }
  135 
  136 /*
  137  * now add some nodes which both rump kernel and standard
  138  * NetBSD both need, as rump cannot use sys/kern/init_sysctl.c
  139  */
  140 SYSCTL_SETUP(sysctl_kernbase_setup, "sysctl kern subtree base setup")
  141 {
  142 
  143         sysctl_createv(clog, 0, NULL, NULL,
  144                        CTLFLAG_PERMANENT,
  145                        CTLTYPE_STRING, "ostype",
  146                        SYSCTL_DESCR("Operating system type"),
  147                        NULL, 0, __UNCONST(&ostype), 0,
  148                        CTL_KERN, KERN_OSTYPE, CTL_EOL);
  149         sysctl_createv(clog, 0, NULL, NULL,
  150                        CTLFLAG_PERMANENT,
  151                        CTLTYPE_STRING, "osrelease",
  152                        SYSCTL_DESCR("Operating system release"),
  153                        NULL, 0, __UNCONST(&osrelease), 0,
  154                        CTL_KERN, KERN_OSRELEASE, CTL_EOL);
  155         sysctl_createv(clog, 0, NULL, NULL,
  156                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  157                        CTLTYPE_INT, "osrevision",
  158                        SYSCTL_DESCR("Operating system revision"),
  159                        NULL, __NetBSD_Version__, NULL, 0,
  160                        CTL_KERN, KERN_OSREV, CTL_EOL);
  161         sysctl_createv(clog, 0, NULL, NULL,
  162                        CTLFLAG_PERMANENT,
  163                        CTLTYPE_STRING, "version",
  164                        SYSCTL_DESCR("Kernel version"),
  165                        NULL, 0, __UNCONST(&version), 0,
  166                        CTL_KERN, KERN_VERSION, CTL_EOL);
  167         sysctl_createv(clog, 0, NULL, NULL,
  168                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
  169                        CTLTYPE_STRING, "hostname",
  170                        SYSCTL_DESCR("System hostname"),
  171                        sysctl_setlen, 0, hostname, MAXHOSTNAMELEN,
  172                        CTL_KERN, KERN_HOSTNAME, CTL_EOL);
  173         sysctl_createv(clog, 0, NULL, NULL,
  174                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
  175                        CTLTYPE_STRING, "domainname",
  176                        SYSCTL_DESCR("YP domain name"),
  177                        sysctl_setlen, 0, domainname, MAXHOSTNAMELEN,
  178                        CTL_KERN, KERN_DOMAINNAME, CTL_EOL);
  179         sysctl_createv(clog, 0, NULL, NULL,
  180                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  181                        CTLTYPE_INT, "rawpartition",
  182                        SYSCTL_DESCR("Raw partition of a disk"),
  183                        NULL, RAW_PART, NULL, 0,
  184                        CTL_KERN, KERN_RAWPARTITION, CTL_EOL);
  185 }
  186 
  187 static int
  188 sysctl_hw_machine_arch(SYSCTLFN_ARGS)
  189 {
  190         struct sysctlnode node = *rnode;
  191 #ifndef PROC_MACHINE_ARCH
  192 #define PROC_MACHINE_ARCH(P)    machine_arch
  193 #endif
  194 
  195         node.sysctl_data = PROC_MACHINE_ARCH(l->l_proc);
  196         node.sysctl_size = strlen(node.sysctl_data) + 1;
  197         return sysctl_lookup(SYSCTLFN_CALL(&node));
  198 }
  199 
  200 SYSCTL_SETUP(sysctl_hwbase_setup, "sysctl hw subtree base setup")
  201 {
  202         u_int u;
  203         u_quad_t q;
  204         const char *model = cpu_getmodel();
  205 
  206         sysctl_createv(clog, 0, NULL, NULL,
  207                        CTLFLAG_PERMANENT,
  208                        CTLTYPE_STRING, "model",
  209                        SYSCTL_DESCR("Machine model"),
  210                        NULL, 0, __UNCONST(model), 0,
  211                        CTL_HW, HW_MODEL, CTL_EOL);
  212         sysctl_createv(clog, 0, NULL, NULL,
  213                        CTLFLAG_PERMANENT,
  214                        CTLTYPE_STRING, "machine",
  215                        SYSCTL_DESCR("Machine class"),
  216                        NULL, 0, machine, 0,
  217                        CTL_HW, HW_MACHINE, CTL_EOL);
  218         sysctl_createv(clog, 0, NULL, NULL,
  219                        CTLFLAG_PERMANENT|CTLFLAG_READONLY,
  220                        CTLTYPE_STRING, "machine_arch",
  221                        SYSCTL_DESCR("Machine CPU class"),
  222                        sysctl_hw_machine_arch, 0, NULL, 0,
  223                        CTL_HW, HW_MACHINE_ARCH, CTL_EOL);
  224         sysctl_createv(clog, 0, NULL, NULL,
  225                        CTLFLAG_PERMANENT,
  226                        CTLTYPE_INT, "ncpu",
  227                        SYSCTL_DESCR("Number of CPUs configured"),
  228                        NULL, 0, &ncpu, 0,
  229                        CTL_HW, HW_NCPU, CTL_EOL);
  230         sysctl_createv(clog, 0, NULL, NULL,
  231                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  232                        CTLTYPE_INT, "byteorder",
  233                        SYSCTL_DESCR("System byte order"),
  234                        NULL, BYTE_ORDER, NULL, 0,
  235                        CTL_HW, HW_BYTEORDER, CTL_EOL);
  236         u = ((u_int)physmem > (UINT_MAX / PAGE_SIZE)) ?
  237                 UINT_MAX : physmem * PAGE_SIZE;
  238         sysctl_createv(clog, 0, NULL, NULL,
  239                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  240                        CTLTYPE_INT, "physmem",
  241                        SYSCTL_DESCR("Bytes of physical memory"),
  242                        NULL, u, NULL, 0,
  243                        CTL_HW, HW_PHYSMEM, CTL_EOL);
  244         sysctl_createv(clog, 0, NULL, NULL,
  245                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  246                        CTLTYPE_INT, "pagesize",
  247                        SYSCTL_DESCR("Software page size"),
  248                        NULL, PAGE_SIZE, NULL, 0,
  249                        CTL_HW, HW_PAGESIZE, CTL_EOL);
  250         sysctl_createv(clog, 0, NULL, NULL,
  251                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  252                        CTLTYPE_INT, "alignbytes",
  253                        SYSCTL_DESCR("Alignment constraint for all possible "
  254                                     "data types"),
  255                        NULL, ALIGNBYTES, NULL, 0,
  256                        CTL_HW, HW_ALIGNBYTES, CTL_EOL);
  257         q = (u_quad_t)physmem * PAGE_SIZE;
  258         sysctl_createv(clog, 0, NULL, NULL,
  259                        CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE,
  260                        CTLTYPE_QUAD, "physmem64",
  261                        SYSCTL_DESCR("Bytes of physical memory"),
  262                        NULL, q, NULL, 0,
  263                        CTL_HW, HW_PHYSMEM64, CTL_EOL);
  264         sysctl_createv(clog, 0, NULL, NULL,
  265                        CTLFLAG_PERMANENT,
  266                        CTLTYPE_INT, "ncpuonline",
  267                        SYSCTL_DESCR("Number of CPUs online"),
  268                        NULL, 0, &ncpuonline, 0,
  269                        CTL_HW, HW_NCPUONLINE, CTL_EOL);
  270 }
  271 
  272 /*
  273  * sysctl helper function for kern.hostname and kern.domainnname.
  274  * resets the relevant recorded length when the underlying name is
  275  * changed.
  276  */
  277 static int
  278 sysctl_setlen(SYSCTLFN_ARGS)
  279 {
  280         int error;
  281 
  282         error = sysctl_lookup(SYSCTLFN_CALL(rnode));
  283         if (error || newp == NULL)
  284                 return (error);
  285 
  286         switch (rnode->sysctl_num) {
  287         case KERN_HOSTNAME:
  288                 hostnamelen = strlen((const char*)rnode->sysctl_data);
  289                 break;
  290         case KERN_DOMAINNAME:
  291                 domainnamelen = strlen((const char*)rnode->sysctl_data);
  292                 break;
  293         }
  294 
  295         return (0);
  296 }

Cache object: 13a9818d94aaaa4936fe9d2c07232f09


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.