summaryrefslogtreecommitdiff
path: root/sbin/devd/devd.cc
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2003-04-21 04:30:12 +0000
committerWarner Losh <imp@FreeBSD.org>2003-04-21 04:30:12 +0000
commit9c1808986c363315aa36a967bb7c9801348d168d (patch)
tree481da90693d79b983d632916f0d5fbdb7de370ca /sbin/devd/devd.cc
parent02245e612089c10a31b75ebd58bbef4765fcc054 (diff)
Notes
Diffstat (limited to 'sbin/devd/devd.cc')
-rw-r--r--sbin/devd/devd.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc
index 9a0ea0ec4bf9..bc598fe7ffcd 100644
--- a/sbin/devd/devd.cc
+++ b/sbin/devd/devd.cc
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/types.h>
+#include <sys/sysctl.h>
#include <ctype.h>
#include <dirent.h>
@@ -58,6 +59,7 @@ __FBSDID("$FreeBSD$");
#include "devd.h"
#define CF "/etc/devd.conf"
+#define SYSCTL "hw.bus.devctl_disable"
using namespace std;
@@ -783,6 +785,22 @@ usage()
exit(1);
}
+static void
+check_devd_enabled()
+{
+ int val = 0;
+ size_t len;
+
+ len = sizeof(val);
+ if (sysctlbyname(SYSCTL, &val, &len, NULL, NULL) != 0)
+ errx(1, "devctl sysctl missing from kernel!");
+ if (val) {
+ warnx("Setting " SYSCTL " to 0");
+ val = 0;
+ sysctlbyname(SYSCTL, NULL, NULL, &val, sizeof(val));
+ }
+}
+
/*
* main
*/
@@ -791,6 +809,7 @@ main(int argc, char **argv)
{
int ch;
+ check_devd_enabled();
while ((ch = getopt(argc, argv, "d")) != -1) {
switch (ch) {
case 'd':