aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_mib.c
diff options
context:
space:
mode:
authorWojciech A. Koszek <wkoszek@FreeBSD.org>2007-05-12 19:38:18 +0000
committerWojciech A. Koszek <wkoszek@FreeBSD.org>2007-05-12 19:38:18 +0000
commit744b947ef84848227ce1a826167ada052973c82a (patch)
tree7df0bae947c0e7aa57e02e7373440d236848d9d0 /sys/kern/kern_mib.c
parentfbe4fc2ec0af84e67e9b0ade975d2d2603962ee3 (diff)
downloadsrc-744b947ef84848227ce1a826167ada052973c82a.tar.gz
src-744b947ef84848227ce1a826167ada052973c82a.zip
Improve INCLUDE_CONFIG_FILE support.
This change will let us to have full configuration of a running kernel available in sysctl: sysctl -b kern.conftxt The same configuration is also contained within the kernel image. It can be obtained with: config -x <kernelfile> Current functionality lets you to quickly recover kernel configuration, by simply redirecting output from commands presented above and starting kernel build procedure. "include" statements are also honored, which means options and devices from included files are also included. Please note that comments from configuration files are not preserved by default. In order to preserve them, you can use -C flag for config(8). This will bring configuration file and included files literally; however, redirection to a file no longer works directly. This commit was followed by discussion, that took place on freebsd-current@. For more details, look here: http://lists.freebsd.org/pipermail/freebsd-current/2007-March/069994.html http://lists.freebsd.org/pipermail/freebsd-current/2007-May/071844.html Development of this patch took place in Perforce, hierarchy: //depot/user/wkoszek/wkoszek_kconftxt/ Support from: freebsd-current@ (links above) Reviewed by: imp@ Approved by: imp@
Notes
Notes: svn path=/head/; revision=169507
Diffstat (limited to 'sys/kern/kern_mib.c')
-rw-r--r--sys/kern/kern_mib.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/sys/kern/kern_mib.c b/sys/kern/kern_mib.c
index 0a5220df3535..2ccb207c5933 100644
--- a/sys/kern/kern_mib.c
+++ b/sys/kern/kern_mib.c
@@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/kernel.h>
+#include <sys/sbuf.h>
#include <sys/systm.h>
#include <sys/sysctl.h>
#include <sys/proc.h>
@@ -295,6 +296,38 @@ SYSCTL_PROC(_kern, KERN_SECURELVL, securelevel,
CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_PRISON, 0, 0, sysctl_kern_securelvl,
"I", "Current secure level");
+/* Actual kernel configuration options. */
+extern char kernconfstring[];
+
+static int
+sysctl_kern_config(SYSCTL_HANDLER_ARGS)
+{
+ struct sbuf *sb;
+ int error;
+ char *p;
+
+ sb = sbuf_new(NULL, NULL, 2048, SBUF_AUTOEXTEND);
+ if (sb == NULL)
+ return (ENOMEM);
+ sbuf_clear(sb);
+ p = kernconfstring;
+ if (p == NULL || *p == '\0') {
+ sbuf_printf(sb, "No kernel configuration\n");
+ } else {
+ sbuf_printf(sb, "%s", p);
+ }
+ sbuf_trim(sb);
+ sbuf_putc(sb, '\n');
+ sbuf_finish(sb);
+ error = sysctl_handle_string(oidp, sbuf_data(sb), sbuf_len(sb), req);
+ if (error)
+ return (error);
+ sbuf_delete(sb);
+ return (error);
+}
+SYSCTL_PROC(_kern, OID_AUTO, conftxt, CTLTYPE_STRING|CTLFLAG_RW,
+ 0, 0, sysctl_kern_config, "", "Kernel configuration file");
+
char domainname[MAXHOSTNAMELEN];
SYSCTL_STRING(_kern, KERN_NISDOMAINNAME, domainname, CTLFLAG_RW,
&domainname, sizeof(domainname), "Name of the current YP/NIS domain");