Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src add the device publish daemon, written by jmcneill@.
details: https://anonhg.NetBSD.org/src/rev/7adcb7f1e8ea
branches: trunk
changeset: 768929:7adcb7f1e8ea
user: mrg <mrg%NetBSD.org@localhost>
date: Mon Aug 29 11:38:48 2011 +0000
description:
add the device publish daemon, written by jmcneill@.
listens on drvctl for new devices and invokes MAKEDEV for them.
missing:
- manual page
- rc.d script
- more testing
but it works well enough to make new disk nodes appear in /dev when
netbsd sees them and they're missing. you will need to make sure
you have a new /dev/MAKEDEV for this to work properly (postinstall
should handle this normally, of course.)
thanks jared!
diffstat:
distrib/sets/lists/base/mi | 14 +-
doc/CHANGES | 4 +-
etc/mtree/NetBSD.dist.base | 3 +-
sbin/Makefile | 4 +-
sbin/devpubd/Makefile | 33 +++++
sbin/devpubd/devpubd-run-hooks.in | 21 +++
sbin/devpubd/devpubd.c | 247 ++++++++++++++++++++++++++++++++++++++
sbin/devpubd/hooks/01-makedev | 15 ++
8 files changed, 332 insertions(+), 9 deletions(-)
diffs (truncated from 425 to 300 lines):
diff -r cf5c4031f80b -r 7adcb7f1e8ea distrib/sets/lists/base/mi
--- a/distrib/sets/lists/base/mi Mon Aug 29 11:23:53 2011 +0000
+++ b/distrib/sets/lists/base/mi Mon Aug 29 11:38:48 2011 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.950 2011/08/27 18:35:19 joerg Exp $
+# $NetBSD: mi,v 1.951 2011/08/29 11:38:48 mrg Exp $
#
# Note: Don't delete entries from here - mark them as "obsolete" instead,
# unless otherwise stated below.
@@ -183,18 +183,21 @@
./libdata/firmware/rum/rum-rt2573 base-firmware-root
./libdata/firmware/upgt base-firmware-root
./libdata/firmware/zyd base-firmware-root
-./libdata/firmware/zyd/zd1211-licence base-obsolete obsolete
+./libdata/firmware/zyd/zd1211-licence base-obsolete obsolete
./libdata/firmware/zyd/zd1211-license base-firmware-root
./libdata/firmware/zyd/zyd-zd1211 base-firmware-root
./libdata/firmware/zyd/zyd-zd1211b base-firmware-root
./libexec base-sys-root
+./libexec/devpubd-hooks base-sysutil-root
+./libexec/devpubd-hooks/01-makedev base-sysutil-root
+./libexec/devpubd-run-hooks base-sysutil-root
./libexec/dhcpcd-hooks base-dhcpcd-root
./libexec/dhcpcd-hooks/01-test base-dhcpcd-root
./libexec/dhcpcd-hooks/02-dump base-dhcpcd-root
./libexec/dhcpcd-hooks/10-mtu base-dhcpcd-root
-./libexec/dhcpcd-hooks/10-resolv.conf base-obsolete obsolete
-./libexec/dhcpcd-hooks/14-lookup-hostname base-obsolete obsolete
-./libexec/dhcpcd-hooks/15-hostname base-obsolete obsolete
+./libexec/dhcpcd-hooks/10-resolv.conf base-obsolete obsolete
+./libexec/dhcpcd-hooks/14-lookup-hostname base-obsolete obsolete
+./libexec/dhcpcd-hooks/15-hostname base-obsolete obsolete
./libexec/dhcpcd-hooks/20-resolv.conf base-dhcpcd-root
./libexec/dhcpcd-hooks/29-lookup-hostname base-dhcpcd-root
./libexec/dhcpcd-hooks/30-hostname base-dhcpcd-root
@@ -221,6 +224,7 @@
./sbin/chown base-sysutil-root
./sbin/rump.cgdconfig base-sysutil-root crypto
./sbin/clri base-sysutil-root
+./sbin/devpubd base-sysutil-root
./sbin/dhclient base-dhclient-root
./sbin/dhclient-script base-dhclient-root
./sbin/dhcpcd base-dhcpcd-root
diff -r cf5c4031f80b -r 7adcb7f1e8ea doc/CHANGES
--- a/doc/CHANGES Mon Aug 29 11:23:53 2011 +0000
+++ b/doc/CHANGES Mon Aug 29 11:38:48 2011 +0000
@@ -1,4 +1,4 @@
-# LIST OF CHANGES FROM LAST RELEASE: <$Revision: 1.1597 $>
+# LIST OF CHANGES FROM LAST RELEASE: <$Revision: 1.1598 $>
#
#
# [Note: This file does not mention every change made to the NetBSD source tree.
@@ -1107,3 +1107,5 @@
mips: add support for MIPS DSP v2 ASE. [matt 20110815]
sparc: Switch to GCC 4.5.3 [mrg 20110817]
tmux(1): Import of tmux 1.5. [jmmv 20110817]
+ devpubd(8): Add a device publishing daemon, written by Jared D.
+ McNeill. [mrg 20110827]
diff -r cf5c4031f80b -r 7adcb7f1e8ea etc/mtree/NetBSD.dist.base
--- a/etc/mtree/NetBSD.dist.base Mon Aug 29 11:23:53 2011 +0000
+++ b/etc/mtree/NetBSD.dist.base Mon Aug 29 11:38:48 2011 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: NetBSD.dist.base,v 1.90 2011/08/26 21:22:10 dyoung Exp $
+# $NetBSD: NetBSD.dist.base,v 1.91 2011/08/29 11:38:48 mrg Exp $
# @(#)4.4BSD.dist 8.1 (Berkeley) 6/13/93
# Do not customize this file as it may be overwritten on upgrades.
@@ -74,6 +74,7 @@
./libdata/firmware/zyd
./libexec
./libexec/dhcpcd-hooks
+./libexec/devpubd-hooks
./libexec/resolvconf
./mnt
./rescue
diff -r cf5c4031f80b -r 7adcb7f1e8ea sbin/Makefile
--- a/sbin/Makefile Mon Aug 29 11:23:53 2011 +0000
+++ b/sbin/Makefile Mon Aug 29 11:38:48 2011 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.120 2011/06/27 11:52:23 uch Exp $
+# $NetBSD: Makefile,v 1.121 2011/08/29 11:38:48 mrg Exp $
# @(#)Makefile 8.5 (Berkeley) 3/31/94
# Not ported: XNSrouted enpload scsiformat startslip
@@ -7,7 +7,7 @@
.include <bsd.own.mk>
SUBDIR= amrctl apmlabel atactl badsect bioctl brconfig ccdconfig \
- chown disklabel dkctl dkscan_bsdlabel dmesg dmctl \
+ chown devpubd disklabel dkctl dkscan_bsdlabel dmesg dmctl \
drvctl fastboot fdisk fsck fsirand gpt ifconfig init ldconfig \
mbrlabel mknod modload modstat modunload mount newbtconf nologin \
pdisk ping pppoectl raidctl reboot rcorder rndctl route routed \
diff -r cf5c4031f80b -r 7adcb7f1e8ea sbin/devpubd/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbin/devpubd/Makefile Mon Aug 29 11:38:48 2011 +0000
@@ -0,0 +1,33 @@
+# $NetBSD: Makefile,v 1.1 2011/08/29 11:38:48 mrg Exp $
+
+PROG= devpubd
+SRCS= devpubd.c
+NOMAN= # defined
+WARNS= 4
+
+BINDIR?= /sbin
+
+CPPFLAGS+= -DDEVPUBD_RUN_HOOKS=\"/libexec/devpubd-run-hooks\"
+
+SCRIPTS= devpubd-run-hooks
+SCRIPTSDIR_devpubd-run-hooks= /libexec
+
+.PATH: ${.CURDIR}/hooks
+HOOKS= 01-makedev
+SCRIPTS+= ${HOOKS:C,^,hooks/,}
+.for f in ${HOOKS}
+SCRIPTSDIR_hooks/${f}= /libexec/devpubd-hooks
+.endfor
+
+LDADD+= -lprop
+DPADD+= ${LIBPROP}
+
+CLEANFILES= devpubd-run-hooks
+
+.for f in devpubd-run-hooks
+${f}: ${f}.in
+ ${TOOL_SED} -e 's,@HOOKSDIR@,/libexec/devpubd-hooks,g' \
+ ${.CURDIR}/${f}.in > $@
+.endfor
+
+.include <bsd.prog.mk>
diff -r cf5c4031f80b -r 7adcb7f1e8ea sbin/devpubd/devpubd-run-hooks.in
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbin/devpubd/devpubd-run-hooks.in Mon Aug 29 11:38:48 2011 +0000
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# $NetBSD: devpubd-run-hooks.in,v 1.1 2011/08/29 11:38:48 mrg Exp $
+#
+# devpubd run hooks
+
+devpubd_event=$1
+devpubd_device=$2
+devpubd_hooks_base=@HOOKSDIR@
+
+case $devpubd_event in
+device-attach|device-detach)
+ for hook in ${devpubd_hooks_base}/*; do
+ if [ -x "${hook}" ]; then
+ "${hook}" ${devpubd_event} ${devpubd_device}
+ fi
+ done
+ ;;
+*)
+ ;;
+esac
diff -r cf5c4031f80b -r 7adcb7f1e8ea sbin/devpubd/devpubd.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sbin/devpubd/devpubd.c Mon Aug 29 11:38:48 2011 +0000
@@ -0,0 +1,247 @@
+/* $NetBSD: devpubd.c,v 1.1 2011/08/29 11:38:48 mrg Exp $ */
+
+/*-
+ * Copyright (c) 2011 Jared D. McNeill <jmcneill%invisible.ca@localhost>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__COPYRIGHT("@(#) Copyright (c) 2011\
+Jared D. McNeill <jmcneill%invisible.ca@localhost>. All rights reserved.");
+__RCSID("$NetBSD: devpubd.c,v 1.1 2011/08/29 11:38:48 mrg Exp $");
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/drvctlio.h>
+#include <sys/wait.h>
+#include <sys/poll.h>
+
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <syslog.h>
+#include <unistd.h>
+
+static int drvctl_fd = -1;
+static const char *devpubd_script = DEVPUBD_RUN_HOOKS;
+
+#define DEVPUBD_ATTACH_EVENT "device-attach"
+#define DEVPUBD_DETACH_EVENT "device-detach"
+
+static void
+devpubd_exec(const char *path, const char *event, const char *device)
+{
+ int error;
+
+ error = execl(path, path, event, device, NULL);
+ if (error) {
+ syslog(LOG_ERR, "couldn't exec '%s %s %s': %m",
+ path, event, device);
+ exit(EXIT_FAILURE);
+ }
+
+ exit(EXIT_SUCCESS);
+}
+
+static void
+devpubd_eventhandler(const char *event, const char *device)
+{
+ pid_t pid;
+ int status;
+
+ syslog(LOG_DEBUG, "event = '%s', device = '%s'", event, device);
+
+ pid = fork();
+ switch (pid) {
+ case -1:
+ syslog(LOG_ERR, "fork failed: %m");
+ break;
+ case 0:
+ devpubd_exec(devpubd_script, event, device);
+ /* NOTREACHED */
+ default:
+ if (waitpid(pid, &status, 0) == -1) {
+ syslog(LOG_ERR, "waitpid(%d) failed: %m", pid);
+ break;
+ }
+ if (WIFEXITED(status) && WEXITSTATUS(status)) {
+ syslog(LOG_WARNING, "%s exited with status %d",
+ devpubd_script, WEXITSTATUS(status));
+ } else if (WIFSIGNALED(status)) {
+ syslog(LOG_WARNING, "%s received signal %d",
+ devpubd_script, WTERMSIG(status));
+ }
+ break;
+ }
+}
+
+static void
+devpubd_eventloop(void)
+{
+ const char *event, *device;
+ prop_dictionary_t ev;
+ int res;
+
+ assert(drvctl_fd != -1);
+
+ for (;;) {
+ res = prop_dictionary_recv_ioctl(drvctl_fd, DRVGETEVENT, &ev);
+ if (res)
+ err(EXIT_FAILURE, "DRVGETEVENT failed");
+ prop_dictionary_get_cstring_nocopy(ev, "event", &event);
+ prop_dictionary_get_cstring_nocopy(ev, "device", &device);
+
+ printf("%s: event='%s', device='%s'\n", __func__,
+ event, device);
+
+ devpubd_eventhandler(event, device);
+
+ prop_object_release(ev);
+ }
+}
+
+static void
+devpubd_probe(const char *device)
+{
+ struct devlistargs laa;
+ size_t len, children, n;
+ void *p;
+ int error;
Home |
Main Index |
Thread Index |
Old Index