diff options
| author | justin <justin@NetBSD.org> | 2014-02-25 01:02:42 +0000 |
|---|---|---|
| committer | justin <justin@NetBSD.org> | 2014-02-25 01:02:42 +0000 |
| commit | 819da2cfb45ff04fa2e0f3b7a53832184957ce5b (patch) | |
| tree | b9e4a8beba51ba3a166fa17e7d3cf47dbb745cf4 /sys/kern/init_sysctl_base.c | |
| parent | 29c3df4d33dc5964cd8012f4c9395be64416019b (diff) | |
Add kern.{ostype,osrelease,osrevision,version} kern.domainname,
kern.rawpartition sysctl support to rump kernel.
Moved the sysctl support that is shared between rump and normal
kernels to init_sysctl_base.c as rump cannot use init_sysctl.c
in order to avoid code duplication. Agreed with pooka@.
Diffstat (limited to 'sys/kern/init_sysctl_base.c')
| -rw-r--r-- | sys/kern/init_sysctl_base.c | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/sys/kern/init_sysctl_base.c b/sys/kern/init_sysctl_base.c index 822e5c66d42..51f85b839ee 100644 --- a/sys/kern/init_sysctl_base.c +++ b/sys/kern/init_sysctl_base.c @@ -1,4 +1,4 @@ -/* $NetBSD: init_sysctl_base.c,v 1.1 2009/09/16 15:03:56 pooka Exp $ */ +/* $NetBSD: init_sysctl_base.c,v 1.2 2014/02/25 01:02:42 justin Exp $ */ /*- * Copyright (c) 2003, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -30,10 +30,14 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: init_sysctl_base.c,v 1.1 2009/09/16 15:03:56 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: init_sysctl_base.c,v 1.2 2014/02/25 01:02:42 justin Exp $"); #include <sys/param.h> #include <sys/sysctl.h> +#include <sys/kernel.h> +#include <sys/disklabel.h> + +static int sysctl_setlen(SYSCTLFN_PROTO); /* * sets up the base nodes... @@ -124,3 +128,85 @@ SYSCTL_SETUP(sysctl_root_setup, "sysctl base setup") NULL, 0, NULL, 0, CTL_SECURITY, CTL_EOL); } + +/* + * now add some nodes which both rump kernel and standard + * NetBSD both need, as rump cannot use sys/kern/init_sysctl.c + */ +SYSCTL_SETUP(sysctl_kernbase_setup, "sysctl kern subtree base setup") +{ + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT, + CTLTYPE_NODE, "kern", NULL, + NULL, 0, NULL, 0, + CTL_KERN, CTL_EOL); + + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT, + CTLTYPE_STRING, "ostype", + SYSCTL_DESCR("Operating system type"), + NULL, 0, __UNCONST(&ostype), 0, + CTL_KERN, KERN_OSTYPE, CTL_EOL); + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT, + CTLTYPE_STRING, "osrelease", + SYSCTL_DESCR("Operating system release"), + NULL, 0, __UNCONST(&osrelease), 0, + CTL_KERN, KERN_OSRELEASE, CTL_EOL); + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE, + CTLTYPE_INT, "osrevision", + SYSCTL_DESCR("Operating system revision"), + NULL, __NetBSD_Version__, NULL, 0, + CTL_KERN, KERN_OSREV, CTL_EOL); + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT, + CTLTYPE_STRING, "version", + SYSCTL_DESCR("Kernel version"), + NULL, 0, __UNCONST(&version), 0, + CTL_KERN, KERN_VERSION, CTL_EOL); + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT|CTLFLAG_READWRITE, + CTLTYPE_STRING, "hostname", + SYSCTL_DESCR("System hostname"), + sysctl_setlen, 0, hostname, MAXHOSTNAMELEN, + CTL_KERN, KERN_HOSTNAME, CTL_EOL); + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT|CTLFLAG_READWRITE, + CTLTYPE_STRING, "domainname", + SYSCTL_DESCR("YP domain name"), + sysctl_setlen, 0, domainname, MAXHOSTNAMELEN, + CTL_KERN, KERN_DOMAINNAME, CTL_EOL); + sysctl_createv(clog, 0, NULL, NULL, + CTLFLAG_PERMANENT|CTLFLAG_IMMEDIATE, + CTLTYPE_INT, "rawpartition", + SYSCTL_DESCR("Raw partition of a disk"), + NULL, RAW_PART, NULL, 0, + CTL_KERN, KERN_RAWPARTITION, CTL_EOL); +} + +/* + * sysctl helper function for kern.hostname and kern.domainnname. + * resets the relevant recorded length when the underlying name is + * changed. + */ +static int +sysctl_setlen(SYSCTLFN_ARGS) +{ + int error; + + error = sysctl_lookup(SYSCTLFN_CALL(rnode)); + if (error || newp == NULL) + return (error); + + switch (rnode->sysctl_num) { + case KERN_HOSTNAME: + hostnamelen = strlen((const char*)rnode->sysctl_data); + break; + case KERN_DOMAINNAME: + domainnamelen = strlen((const char*)rnode->sysctl_data); + break; + } + + return (0); +} |
