linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] add options to udevtrigger to control scanning
@ 2006-08-31  0:41 Greg KH
  2006-08-31  8:46 ` Kay Sievers
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Greg KH @ 2006-08-31  0:41 UTC (permalink / raw)
  To: linux-hotplug

This patch has been in the gentoo tree for a bit.  It modifies
udevtrigger to allow a little more fine grained control for people who
don't want all of the sysfs tree to be scanned by udevtrigger at
startup.

Patch was originally written by Martin Schlemmer <azarah@gentoo.org> but
was forward-ported by me to the latest version of udev.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

--- a/udevtrigger.c
+++ b/udevtrigger.c
@@ -358,6 +358,9 @@ int main(int argc, char *argv[], char *e
 {
 	int i;
 	int failed = 0;
+	int block = 1;
+	int bus = 1;
+	int class = 1;
 
 	logging_init("udevtrigger");
 	udev_config_init();
@@ -373,8 +376,15 @@ int main(int argc, char *argv[], char *e
 			dry_run = 1;
 		} else if (strcmp(arg, "--retry-failed") = 0 || strcmp(arg, "-F") = 0) {
 			failed = 1;
+		} else if (strcmp(arg, "--no-scan-block") = 0) {
+			block = 0;
+		} else if (strcmp(arg, "--no-scan-bus") = 0) {
+			bus = 0;
+		} else if (strcmp(arg, "--no-scan-class") = 0) {
+			class = 0;
 		} else if (strcmp(arg, "--help") = 0 || strcmp(arg, "-h") = 0) {
-			printf("Usage: udevtrigger [--help] [--verbose] [--dry-run] [--retry-failed]\n");
+			printf("Usage: udevtrigger [--no-scan-block] [--no-scan-bus] [--no-scan-class]\n");
+			printf("                   [--help] [--verbose] [--dry-run] [--retry-failed]\n");
 			goto exit;
 		} else {
 			fprintf(stderr, "unrecognized option '%s'\n", arg);
@@ -386,9 +396,12 @@ int main(int argc, char *argv[], char *e
 		scan_failed();
 	else {
 		/* default action */
-		scan_bus();
-		scan_class();
-		scan_block();
+		if (bus)
+			scan_bus();
+		if (class)
+			scan_class();
+		if (block)
+			scan_block();
 	}
 	exec_lists();
 


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
@ 2006-08-31  8:46 ` Kay Sievers
  2006-08-31 17:31 ` Greg KH
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2006-08-31  8:46 UTC (permalink / raw)
  To: linux-hotplug

On Wed, Aug 30, 2006 at 05:41:38PM -0700, Greg KH wrote:
> This patch has been in the gentoo tree for a bit.  It modifies
> udevtrigger to allow a little more fine grained control for people who
> don't want all of the sysfs tree to be scanned by udevtrigger at
> startup.

When is it useful to have such options. And "no" flags who negate
something from all events sounds pretty odd to me.
The Ubuntu guys use a patch which can filter on values to have control
over what is triggered and what not. If we are going that road, I like
their patch more than this. But in both cases, please explain in which
situations this is really needed?

Thanks,
Kay

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
  2006-08-31  8:46 ` Kay Sievers
@ 2006-08-31 17:31 ` Greg KH
  2006-08-31 17:37 ` Marco d'Itri
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2006-08-31 17:31 UTC (permalink / raw)
  To: linux-hotplug

On Thu, Aug 31, 2006 at 10:46:12AM +0200, Kay Sievers wrote:
> On Wed, Aug 30, 2006 at 05:41:38PM -0700, Greg KH wrote:
> > This patch has been in the gentoo tree for a bit.  It modifies
> > udevtrigger to allow a little more fine grained control for people who
> > don't want all of the sysfs tree to be scanned by udevtrigger at
> > startup.
> 
> When is it useful to have such options. And "no" flags who negate
> something from all events sounds pretty odd to me.

Well, either that or force the --scan-class options to be used :)

> The Ubuntu guys use a patch which can filter on values to have control
> over what is triggered and what not. If we are going that road, I like
> their patch more than this.

Do you have a pointer to where this patch is?

> But in both cases, please explain in which situations this is really
> needed?

People do not want all of their devices probed for at boot time, they
want to load the modules that they know they want, on their own.  So
they don't want all of the modalias files being poked at.

In short, they don't like the "coldplug" functionality for loading
modules and only want udev to handle the device nodes present at boot
time.  I don't blame them for wanting this because with machines that
you know all the hardware, it isn't necessary, and does speed up the
boot process ever so slightly.

And yes, they can use the blacklist functionality from
module-init-tools, except that seems to be broken right now in the
Gentoo releases, and I'm having a hard time figuring out why.  It used
to work...

So this could be reduced to just the one option, --no-scan-bus, as that
is all that Gentoo currently uses.  I think the original author was just
trying to be nice in giving all possible options :)

Would you be more comfortable with just that option being added?  The
filter seems a bit complicated, unless you are able to specify all
modalias files.

thanks,

greg k-h

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
  2006-08-31  8:46 ` Kay Sievers
  2006-08-31 17:31 ` Greg KH
@ 2006-08-31 17:37 ` Marco d'Itri
  2006-08-31 17:52 ` Greg KH
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Marco d'Itri @ 2006-08-31 17:37 UTC (permalink / raw)
  To: linux-hotplug

On Aug 31, Greg KH <greg@kroah.com> wrote:

> And yes, they can use the blacklist functionality from
> module-init-tools, except that seems to be broken right now in the
> Gentoo releases, and I'm having a hard time figuring out why.  It used
> to work...
They could also not create a rule to run modprobe, which looks cleaner
to me and does not require any new code.

-- 
ciao,
Marco

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
                   ` (2 preceding siblings ...)
  2006-08-31 17:37 ` Marco d'Itri
@ 2006-08-31 17:52 ` Greg KH
  2006-08-31 20:02 ` Scott James Remnant
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2006-08-31 17:52 UTC (permalink / raw)
  To: linux-hotplug

On Thu, Aug 31, 2006 at 07:37:10PM +0200, Marco d'Itri wrote:
> On Aug 31, Greg KH <greg@kroah.com> wrote:
> 
> > And yes, they can use the blacklist functionality from
> > module-init-tools, except that seems to be broken right now in the
> > Gentoo releases, and I'm having a hard time figuring out why.  It used
> > to work...
> They could also not create a rule to run modprobe, which looks cleaner
> to me and does not require any new code.

But you want modprobe to run when adding a new usb device, or pcmcia
device, so that rule is necessary.  Just not at boot time which causes
the whole pci bus to be scanned, and stupid things like shpchp always to
be loaded :(

thanks,

greg k-h

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
                   ` (3 preceding siblings ...)
  2006-08-31 17:52 ` Greg KH
@ 2006-08-31 20:02 ` Scott James Remnant
  2006-09-02 17:46 ` Roy Marples
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Scott James Remnant @ 2006-08-31 20:02 UTC (permalink / raw)
  To: linux-hotplug


[-- Attachment #1.1.1: Type: text/plain, Size: 736 bytes --]

On Thu, 2006-08-31 at 10:31 -0700, Greg KH wrote:

> > The Ubuntu guys use a patch which can filter on values to have control
> > over what is triggered and what not. If we are going that road, I like
> > their patch more than this.
> 
> Do you have a pointer to where this patch is?
> 
Attached;  I sent it to this list a while back as part of my "patches
collection" mail.

The reason we use this is that we try and have an initramfs that works
on every single machine, rather than produce a tailored one for the
machine underneath.

So we take a little more care about what we coldplug and when -- rather
than just probing for everything and hoping for the best.

Scott
-- 
Scott James Remnant
scott@ubuntu.com

[-- Attachment #1.1.2: 40-udevtrigger-filters.patch --]
[-- Type: text/x-patch, Size: 16480 bytes --]

diff -ruNp udev-093~/udevtrigger.8 udev-093/udevtrigger.8
--- udev-093~/udevtrigger.8	2006-05-29 10:18:16.000000000 +0100
+++ udev-093/udevtrigger.8	2006-06-07 19:30:30.000000000 +0100
@@ -1,37 +1,100 @@
-.\" ** You probably do not want to edit this file directly **
-.\" It was generated using the DocBook XSL Stylesheets (version 1.69.1).
-.\" Instead of manually editing it, you probably should edit the DocBook XML
-.\" source for it and then use the DocBook XSL Stylesheets to regenerate it.
-.TH "UDEVTRIGGER" "8" "March 2006" "udev" "udevtrigger"
-.\" disable hyphenation
-.nh
-.\" disable justification (adjust text to left margin only)
-.ad l
-.SH "NAME"
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "UDEVTRIGGER" 8 "March 2006" "udev" "udevtrigger"
+.SH NAME
 udevtrigger \- request kernel devices events for coldplug
 .SH "SYNOPSIS"
+.ad l
+.hy 0
 .HP 12
-\fBudevtrigger\fR [\fB\-\-verbose\fR] [\fB\-\-dry\-run\fR]
+\fBudevtrigger\fR [\fB\-\-verbose\fR] [\fB\-\-dry\-run\fR] [\fB\-\-serial\fR] [\fBFILTER\&.\&.\&.\fR]
+.ad
+.hy
+
 .SH "DESCRIPTION"
+
 .PP
-Trigger kernel device uevents to replay missing events at system coldplug.
+Trigger kernel device uevents to replay missing events at system coldplug\&.
+
 .SH "OPTIONS"
+
 .TP
 \fB\-\-verbose\fR
-print out the devices found in sysfs.
+print out the devices found in sysfs\&.
+
 .TP
 \fB\-\-dry\-run\fR
-don't actually trigger the event.
+don't actually trigger the event\&.
+
+.TP
+\fB\-\-serial\fR
+run udevsettle between events\&.
+
+.SH "FILTER OPTIONS"
+
+.PP
+All options are accumulative and may be specified multiple times
+
+.TP
+\fB\-I\fIattr\fR=\fIvalue\fR\fR
+only those devices for which the given attribute matches the value (which may include wildcards) are triggered
+
+.TP
+\fB\-X\fIattr\fR=\fIvalue\fR\fR
+only those devices for which the given attribute DOES NOT MATCH the value (which may include wildcards) are triggered
+
+.TP
+\fB\-B\fIbus\fR\fR
+devices on the given bus are triggered
+
+.TP
+\fB\-C\fIclass\fR\fR
+devices in the given class are triggered
+
+.TP
+\fB\-F\fR
+devices that have previously failed are triggered
+
+.TP
+\fB\-b\fR
+block devices are triggered
+
+.TP
+\fB\-c\fR
+class devices are triggered
+
 .SH "ENVIRONMENT"
+
 .TP
 \fBUDEV_LOG\fR
-Overrides the syslog priority specified in the config file.
+Overrides the syslog priority specified in the config file\&.
+
 .SH "AUTHOR"
+
 .PP
-Written by Kay Sievers
-<kay.sievers@vrfy.org>
-and Hannes Reinecke
-<hare@suse.de>.
+Written by Kay Sievers <kay\&.sievers@vrfy\&.org> and Hannes Reinecke <hare@suse\&.de>\&.
+
 .SH "SEE ALSO"
+
 .PP
 \fBudev\fR(7)
+
+.SH AUTHOR
+Kay Sievers.
diff -ruNp udev-093~/udevtrigger.c udev-093/udevtrigger.c
--- udev-093~/udevtrigger.c	2006-05-29 10:18:16.000000000 +0100
+++ udev-093/udevtrigger.c	2006-06-07 20:06:31.000000000 +0100
@@ -27,15 +27,19 @@
 #include <errno.h>
 #include <dirent.h>
 #include <fcntl.h>
+#include <ctype.h>
 #include <syslog.h>
 #include <sys/stat.h>
 #include <sys/types.h>
+#include <sys/wait.h>
 
 #include "udev.h"
+#include "udevd.h"
 
 static const char *udev_log_str;
 static int verbose;
 static int dry_run;
+static int serial_plug;
 
 #ifdef USE_LOG
 void log_message(int priority, const char *format, ...)
@@ -96,11 +100,89 @@ static int device_list_insert(const char
 	return 0;
 }
 
+struct filter {
+	struct list_head node;
+	char name[NAME_SIZE];
+	char value[VALUE_SIZE];
+	int include;
+};
+
+LIST_HEAD(filter_list);
+
+static int filter_list_insert(int include, const char *filter)
+{
+	struct filter *new_filter;
+	const char *ptr;
+
+	new_filter = malloc(sizeof(struct filter));
+	if (!new_filter) {
+		dbg("error malloc");
+		return -ENOMEM;
+	}
+	new_filter->include = include;
+
+	ptr = strchr(filter, '=');
+	if (ptr) {
+		if ((size_t)(ptr + 1 - filter) > sizeof(new_filter->name)) {
+			err("attribute name too long in filter %s", filter);
+			free(new_filter);
+			return 1;
+		}
+		memcpy(new_filter->name, filter, ptr - filter);
+		new_filter->name[ptr - filter] = '\0';
+
+		strlcpy(new_filter->value, ptr + 1, sizeof(new_filter->value));
+	} else {
+		strlcpy(new_filter->name, filter, sizeof(new_filter->name));
+		strlcpy(new_filter->value, "?*", sizeof(new_filter->value));
+	}
+
+	list_add_tail(&new_filter->node, &filter_list);
+	dbg("add %s filter '%s' value '%s'",
+	    new_filter->include ? "include" : "exclude",
+	    new_filter->name, new_filter->value);
+	return 0;
+}
+
 static void trigger_uevent(const char *path)
 {
+	struct filter *loop_filter;
+	const char *devpath;
 	char filename[PATH_SIZE];
 	int fd;
 
+	devpath = path;
+	if (!strncmp (devpath, sysfs_path, strlen(sysfs_path)))
+		devpath += strlen(sysfs_path);
+
+	list_for_each_entry(loop_filter, &filter_list, node) {
+		char *attr, value[256];
+		int i;
+
+		attr = sysfs_attr_get_value(devpath, loop_filter->name);
+		if (!attr) {
+			if (loop_filter->include)
+				return;
+
+			continue;
+		}
+
+		i = strlcpy(value, attr, sizeof(value));
+		while (i > 0 && isspace(value[i-1]))
+			value[--i] = '\0';
+
+		if (strcmp_pattern(loop_filter->value, value) == 0) {
+			dbg("device '%s' attr '%s' matched filter '%s' <-> '%s'",
+			    path, loop_filter->name, value, loop_filter->value);
+
+			if (!loop_filter->include)
+				return;
+		} else {
+			if (loop_filter->include)
+				return;
+		}
+	}
+
 	strlcpy(filename, path, sizeof(filename));
 	strlcat(filename, "/uevent", sizeof(filename));
 
@@ -120,6 +202,24 @@ static void trigger_uevent(const char *p
 		info("error on triggering %s: %s\n", filename, strerror(errno));
 
 	close(fd);
+
+	if (serial_plug && !dry_run) {
+		pid_t pid;
+
+		pid = fork();
+		switch(pid) {
+		case 0:
+			execl("/sbin/udevsettle", "/sbin/udevsettle", NULL);
+
+			/* we should never reach this */
+			err("exec of udevsettle failed");
+			_exit(1);
+		case -1:
+			err("fork of udevsettle failed: %s", strerror(errno));
+		default:
+			waitpid(pid, NULL, 0);
+		}
+	}
 }
 
 static void exec_lists(void)
@@ -166,6 +266,35 @@ static int is_device(const char *path)
 	return 1;
 }
 
+static void udev_scan_bus_devices(const char *devpath)
+{
+	char dirname[PATH_SIZE];
+	DIR *dir2;
+	struct dirent *dent2;
+
+	strlcpy(dirname, devpath, sizeof(dirname));
+	strlcat(dirname, "/devices", sizeof(dirname));
+
+	/* look for devices */
+	dir2 = opendir(dirname);
+	if (dir2 != NULL) {
+		for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
+			char dirname2[PATH_SIZE];
+
+			if (dent2->d_name[0] == '.')
+				continue;
+
+			strlcpy(dirname2, dirname, sizeof(dirname2));
+			strlcat(dirname2, "/", sizeof(dirname2));
+			strlcat(dirname2, dent2->d_name, sizeof(dirname2));
+
+			if (is_device(dirname2))
+				device_list_insert(dirname2);
+		}
+		closedir(dir2);
+	}
+}
+
 static void udev_scan_bus(void)
 {
 	char base[PATH_SIZE];
@@ -179,8 +308,6 @@ static void udev_scan_bus(void)
 	if (dir != NULL) {
 		for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
 			char dirname[PATH_SIZE];
-			DIR *dir2;
-			struct dirent *dent2;
 
 			if (dent->d_name[0] == '.')
 				continue;
@@ -188,31 +315,24 @@ static void udev_scan_bus(void)
 			strlcpy(dirname, base, sizeof(dirname));
 			strlcat(dirname, "/", sizeof(dirname));
 			strlcat(dirname, dent->d_name, sizeof(dirname));
-			strlcat(dirname, "/devices", sizeof(dirname));
-
-			/* look for devices */
-			dir2 = opendir(dirname);
-			if (dir2 != NULL) {
-				for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
-					char dirname2[PATH_SIZE];
 
-					if (dent2->d_name[0] == '.')
-						continue;
-
-					strlcpy(dirname2, dirname, sizeof(dirname2));
-					strlcat(dirname2, "/", sizeof(dirname2));
-					strlcat(dirname2, dent2->d_name, sizeof(dirname2));
-
-					if (is_device(dirname2))
-						device_list_insert(dirname2);
-				}
-				closedir(dir2);
-			}
+			udev_scan_bus_devices(dirname);
 		}
 		closedir(dir);
 	}
 }
 
+static void udev_scan_one_bus(const char *bus)
+{
+	char base[PATH_SIZE];
+
+	strlcpy(base, sysfs_path, sizeof(base));
+	strlcat(base, "/bus/", sizeof(base));
+	strlcat(base, bus, sizeof(base));
+
+	udev_scan_bus_devices(base);
+}
+
 static void udev_scan_block(void)
 {
 	char base[PATH_SIZE];
@@ -272,6 +392,32 @@ static void udev_scan_block(void)
 	}
 }
 
+static void udev_scan_class_devices(const char *devpath)
+{
+	DIR *dir2;
+	struct dirent *dent2;
+
+	dir2 = opendir(devpath);
+	if (dir2 != NULL) {
+		for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
+			char dirname[PATH_SIZE];
+
+			if (dent2->d_name[0] == '.')
+				continue;
+
+			if (!strcmp(dent2->d_name, "device"))
+				continue;
+
+			strlcpy(dirname, devpath, sizeof(dirname));
+			strlcat(dirname, "/", sizeof(dirname));
+			strlcat(dirname, dent2->d_name, sizeof(dirname));
+			if (is_device(dirname))
+				device_list_insert(dirname);
+		}
+		closedir(dir2);
+	}
+}
+
 static void udev_scan_class(void)
 {
 	char base[PATH_SIZE];
@@ -285,8 +431,6 @@ static void udev_scan_class(void)
 	if (dir != NULL) {
 		for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
 			char dirname[PATH_SIZE];
-			DIR *dir2;
-			struct dirent *dent2;
 
 			if (dent->d_name[0] == '.')
 				continue;
@@ -294,25 +438,54 @@ static void udev_scan_class(void)
 			strlcpy(dirname, base, sizeof(dirname));
 			strlcat(dirname, "/", sizeof(dirname));
 			strlcat(dirname, dent->d_name, sizeof(dirname));
-			dir2 = opendir(dirname);
-			if (dir2 != NULL) {
-				for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
-					char dirname2[PATH_SIZE];
 
-					if (dent2->d_name[0] == '.')
-						continue;
+			udev_scan_class_devices(dirname);
+		}
+		closedir(dir);
+	}
+}
 
-					if (!strcmp(dent2->d_name, "device"))
-						continue;
+static void udev_scan_one_class(const char *class)
+{
+	char base[PATH_SIZE];
 
-					strlcpy(dirname2, dirname, sizeof(dirname2));
-					strlcat(dirname2, "/", sizeof(dirname2));
-					strlcat(dirname2, dent2->d_name, sizeof(dirname2));
-					if (is_device(dirname2))
-						device_list_insert(dirname2);
-				}
-				closedir(dir2);
-			}
+	strlcpy(base, sysfs_path, sizeof(base));
+	strlcat(base, "/class/", sizeof(base));
+	strlcat(base, class, sizeof(base));
+
+	udev_scan_class_devices(base);
+}
+
+static void udev_scan_failed(void)
+{
+	char base[PATH_SIZE];
+	DIR *dir;
+	struct dirent *dent;
+
+	strlcpy(base, udev_root, sizeof(base));
+	strlcat(base, "/", sizeof(base));
+	strlcat(base, EVENT_FAILED_DIR, sizeof(base));
+
+	dir = opendir(base);
+	if (dir != NULL) {
+		for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
+			char linkname[PATH_SIZE];
+			char dirname[PATH_SIZE];
+
+			if (dent->d_name[0] == '.')
+				continue;
+
+			strlcpy(linkname, base, sizeof(linkname));
+			strlcat(linkname, "/", sizeof(linkname));
+			strlcat(linkname, dent->d_name, sizeof(linkname));
+
+			if (readlink(linkname, dirname, sizeof(dirname)) == 0)
+				continue;
+
+			if (is_device(dirname))
+				device_list_insert(dirname);
+			else
+				continue;
 		}
 		closedir(dir);
 	}
@@ -320,6 +493,7 @@ static void udev_scan_class(void)
 
 int main(int argc, char *argv[], char *envp[])
 {
+	int scan_default = 1;
 	int i;
 
 	logging_init("udevtrigger");
@@ -328,6 +502,8 @@ int main(int argc, char *argv[], char *e
 
 	udev_log_str = getenv("UDEV_LOG");
 
+	sysfs_init();
+
 	for (i = 1 ; i < argc; i++) {
 		char *arg = argv[i];
 
@@ -335,17 +511,40 @@ int main(int argc, char *argv[], char *e
 			verbose = 1;
 		else if (strcmp(arg, "--dry-run") == 0 || strcmp(arg, "-n") == 0)
 			dry_run = 1;
-		else {
-			fprintf(stderr, "Usage: udevtrigger [--verbose] [--dry-run]\n");
+		else if (strcmp(arg, "--serial") == 0 || strcmp(arg, "-s") == 0)
+			serial_plug = 1;
+		else if (strncmp(arg, "-I", 2) == 0)
+			filter_list_insert(1, arg + 2);
+		else if (strncmp(arg, "-X", 2) == 0)
+			filter_list_insert(0, arg + 2);
+		else if (strncmp(arg, "-B", 2) == 0) {
+			udev_scan_one_bus(arg + 2);
+			scan_default = 0;
+		} else if (strncmp(arg, "-C", 2) == 0) {
+			udev_scan_one_class(arg + 2);
+			scan_default = 0;
+		} else if (strcmp(arg, "-F") == 0) {
+			udev_scan_failed();
+			scan_default = 0;
+		} else if (strcmp(arg, "-b") == 0) {
+			udev_scan_one_class("block");
+			udev_scan_block();
+			scan_default = 0;
+		} else if (strcmp(arg, "-c") == 0) {
+			udev_scan_class();
+			scan_default = 0;
+		} else {
+			fprintf(stderr, "Usage: udevtrigger [--verbose] [--dry-run] [--serial] [FILTER...]\n");
 			goto exit;
 		}
 	}
 
-	sysfs_init();
+	if (scan_default) {
+		udev_scan_bus();
+		udev_scan_class();
+		udev_scan_block();
+	}
 
-	udev_scan_bus();
-	udev_scan_class();
-	udev_scan_block();
 	exec_lists();
 
 	sysfs_cleanup();
diff -ruNp udev-093~/udevtrigger.xml udev-093/udevtrigger.xml
--- udev-093~/udevtrigger.xml	2006-05-29 10:18:16.000000000 +0100
+++ udev-093/udevtrigger.xml	2006-06-07 19:30:17.000000000 +0100
@@ -39,6 +39,8 @@
           <command>udevtrigger</command>
           <arg><option>--verbose</option></arg>
           <arg><option>--dry-run</option></arg>
+          <arg><option>--serial</option></arg>
+          <arg><option>FILTER...</option></arg>
         </cmdsynopsis>
       </refsynopsisdiv>
 
@@ -60,6 +62,63 @@
               <para>don't actually trigger the event.</para>
             </listitem>
           </varlistentry>
+          <varlistentry>
+            <term><option>--serial</option></term>
+            <listitem>
+              <para>run udevsettle between events.</para>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+      </refsect1>
+
+      <refsect1><title>FILTER OPTIONS</title>
+      <para>All options are accumulative and may be specified multiple times</para>
+        <variablelist>
+          <varlistentry>
+            <term><option>-I<replaceable>attr</replaceable>=<replaceable>value</replaceable></option></term>
+            <listitem>
+              <para>only those devices for which the given attribute matches
+	      the value (which may include wildcards) are triggered</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term><option>-X<replaceable>attr</replaceable>=<replaceable>value</replaceable></option></term>
+            <listitem>
+              <para>only those devices for which the given attribute DOES
+	      NOT MATCH the value (which may include wildcards) are
+	      triggered</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term><option>-B<replaceable>bus</replaceable></option></term>
+            <listitem>
+              <para>devices on the given bus are triggered</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term><option>-C<replaceable>class</replaceable></option></term>
+            <listitem>
+              <para>devices in the given class are triggered</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term><option>-F</option></term>
+            <listitem>
+              <para>devices that have previously failed are triggered</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term><option>-b</option></term>
+            <listitem>
+              <para>block devices are triggered</para>
+            </listitem>
+          </varlistentry>
+          <varlistentry>
+            <term><option>-c</option></term>
+            <listitem>
+              <para>class devices are triggered</para>
+            </listitem>
+          </varlistentry>
         </variablelist>
       </refsect1>
 

[-- Attachment #1.2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 191 bytes --]

[-- Attachment #2: Type: text/plain, Size: 373 bytes --]

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

[-- Attachment #3: Type: text/plain, Size: 226 bytes --]

_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
                   ` (4 preceding siblings ...)
  2006-08-31 20:02 ` Scott James Remnant
@ 2006-09-02 17:46 ` Roy Marples
  2006-09-03  1:34 ` Kay Sievers
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Roy Marples @ 2006-09-02 17:46 UTC (permalink / raw)
  To: linux-hotplug

On Thursday 31 August 2006 01:41, Greg KH wrote:
> Patch was originally written by Martin Schlemmer <azarah@gentoo.org> but
> was forward-ported by me to the latest version of udev.

Phooey - it was written by me :P

az just applied it to the portage tree :)

-- 
Roy Marples <uberlord@gentoo.org>
Gentoo/Linux Developer (baselayout, networking)

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
                   ` (5 preceding siblings ...)
  2006-09-02 17:46 ` Roy Marples
@ 2006-09-03  1:34 ` Kay Sievers
  2006-09-03  3:46 ` Greg KH
  2006-09-03  4:03 ` Greg KH
  8 siblings, 0 replies; 10+ messages in thread
From: Kay Sievers @ 2006-09-03  1:34 UTC (permalink / raw)
  To: linux-hotplug

On Thu, 2006-08-31 at 10:31 -0700, Greg KH wrote:
> On Thu, Aug 31, 2006 at 10:46:12AM +0200, Kay Sievers wrote:
> > On Wed, Aug 30, 2006 at 05:41:38PM -0700, Greg KH wrote:
> > > This patch has been in the gentoo tree for a bit.  It modifies
> > > udevtrigger to allow a little more fine grained control for people who
> > > don't want all of the sysfs tree to be scanned by udevtrigger at
> > > startup.
> > 
> > When is it useful to have such options?

> People do not want all of their devices probed for at boot time, they
> want to load the modules that they know they want, on their own.  So
> they don't want all of the modalias files being poked at.

> So this could be reduced to just the one option, --no-scan-bus, as that
> is all that Gentoo currently uses.  I think the original author was just
> trying to be nice in giving all possible options :)
> 
> Would you be more comfortable with just that option being added?  The
> filter seems a bit complicated, unless you are able to specify all
> modalias files.

We better avoid exposing kernel driver implementation details like
'bus', 'class', 'block', if we can. The current udev does not even have
the old BUS= key in the man page, and everything is just SUBSYSTEM(S).
That way, we are hopefully free to move things around in the kernel
without breaking too much in userspace. Also 'block' may be a 'class',
some day, and better not have its own option.

I've added these options to udevtrigger now:
  --subsystem-match=<subsystem>
  --subsystem-nomatch=<subsystem>
  --attr-match=<file[=<value>]>
  --attr-nomatch=<file[=<value>]>

If you only want to populate /dev, this should work fine:
  udevtrigger --attr-matchfiv
It will also skip all class devices which don't have a corresponding
device node.

You can also just skip all devices with a 'modalias' file:
  udevtrigger --attr-nomatch modalias
Or just skip all devices with 'modalias' for pci:
   udevtrigger --attr-nomatch modalias=pci*

By adding "--dry-run --verbose", you can check the filter on the command
line. It's in the git tree now, care to try if that works for you?

Thanks,
Kay


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
                   ` (6 preceding siblings ...)
  2006-09-03  1:34 ` Kay Sievers
@ 2006-09-03  3:46 ` Greg KH
  2006-09-03  4:03 ` Greg KH
  8 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2006-09-03  3:46 UTC (permalink / raw)
  To: linux-hotplug

On Sun, Sep 03, 2006 at 03:34:15AM +0200, Kay Sievers wrote:
> I've added these options to udevtrigger now:
>   --subsystem-match=<subsystem>
>   --subsystem-nomatch=<subsystem>
>   --attr-match=<file[=<value>]>
>   --attr-nomatch=<file[=<value>]>
> 
> If you only want to populate /dev, this should work fine:
>   udevtrigger --attr-matchÞv
> It will also skip all class devices which don't have a corresponding
> device node.

Very nice, I just tried this out and it works fine for me.  Nice thing
is, it sped up my boot time a bunch, as I don't have to wait on
udevtrigger to finish setting up my usb bus (or that's why I'm guessing
it's so much faster, haven't looked into it at all yet.)

thanks for doing this.

Oh, attached is the latest gentoo 50-rules.d file, if you want to update
the udev tree with it (Gentoo now uses the persistant rules file from
the udev package, so our rules file is a lot smaller now.)

thanks,

greg k-h

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid\x120709&bid&3057&dat\x121642
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH] add options to udevtrigger to control scanning
  2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
                   ` (7 preceding siblings ...)
  2006-09-03  3:46 ` Greg KH
@ 2006-09-03  4:03 ` Greg KH
  8 siblings, 0 replies; 10+ messages in thread
From: Greg KH @ 2006-09-03  4:03 UTC (permalink / raw)
  To: linux-hotplug

[-- Attachment #1: Type: text/plain, Size: 308 bytes --]

On Sat, Sep 02, 2006 at 08:46:27PM -0700, Greg KH wrote:
> Oh, attached is the latest gentoo 50-rules.d file, if you want to update
> the udev tree with it (Gentoo now uses the persistant rules file from
> the udev package, so our rules file is a lot smaller now.)

Bleah, forgot it, sorry.  Here it is...



[-- Attachment #2: 50-udev.rules --]
[-- Type: text/plain, Size: 10095 bytes --]

# /etc/udev/rules/50-udev.rules:  device naming rules for udev
#
# Gentoo specific rules
#
# There are a number of modifiers that are allowed to be used in some of the
# fields.  See the udev man page for a full description of them.
#
# Try not to modify this file, if you wish to change things, create a new rule
# file that can be run before this one.
#


# console
KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", NAME="%k", GROUP="tty",	OPTIONS="last_rule"
KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", NAME="%k", GROUP="tty",	OPTIONS="last_rule"
KERNEL=="vcs*",                 NAME="%k", GROUP="tty",			OPTIONS="last_rule"
KERNEL=="vcsa*",                NAME="%k", GROUP="tty",			OPTIONS="last_rule"
KERNEL=="tty",                  NAME="%k", GROUP="tty", MODE="0666",	OPTIONS="last_rule"
KERNEL=="tty[0-9]",             NAME="%k", GROUP="tty",			OPTIONS="last_rule"
KERNEL=="tty[0-9][0-9]",        NAME="%k", GROUP="tty",			OPTIONS="last_rule"
KERNEL=="console",		NAME="%k", GROUP="tty", MODE="0600"
KERNEL=="ptmx",			NAME="%k", GROUP="tty", MODE="0666"

# tty devices
KERNEL=="ttyS[0-9]*",	NAME="%k", SYMLINK="tts/%n", GROUP="tty"
KERNEL=="ttyUSB[0-9]*",	NAME="%k", SYMLINK="tts/USB%n", GROUP="tty", MODE="0660"
KERNEL=="ippp0",	NAME="%k", GROUP="tty"
KERNEL=="isdn*"		NAME="%k", GROUP="tty"
KERNEL=="dcbri*",	NAME="%k", GROUP="tty"
KERNEL=="ircomm*",	NAME="%k", GROUP="tty"

# all block devices
SUBSYSTEM=="block", GROUP="disk"

# cdrom symlinks and other good cdrom naming
BUS=="ide",	KERNEL=="hd[a-z]", ACTION=="add", IMPORT="cdrom_id --export $tempnode"
BUS=="scsi",	KERNEL=="sr[0-9]*", ACTION=="add", IMPORT="cdrom_id --export $tempnode"
BUS=="scsi",	KERNEL=="scd[a-z]", ACTION=="add", IMPORT="cdrom_id --export $tempnode"
BUS=="scsi",	KERNEL=="sg[0-9]*", ACTION=="add", DRIVERS=="sr", GROUP="cdrom"
ENV{ID_CDROM}=="?*",		PROGRAM="seq_node.sh %r %k cdrom", SYMLINK+="%c", GROUP="cdrom"
ENV{ID_CDROM_CD_RW}=="?*",	PROGRAM="seq_node.sh %r %k cdrw",  SYMLINK+="%c"
ENV{ID_CDROM_DVD}=="?*",	PROGRAM="seq_node.sh %r %k dvd",   SYMLINK+="%c"
ENV{ID_CDROM_DVD_R}=="?*",	PROGRAM="seq_node.sh %r %k dvdrw", SYMLINK+="%c"

# disk devices
KERNEL=="sd*",		NAME="%k", GROUP="disk"
KERNEL=="dasd*",	NAME="%k", GROUP="disk"
KERNEL=="ataraid*",	NAME="%k", GROUP="disk"

# compaq smart array
KERNEL=="cciss*",	NAME="%k"
KERNEL=="ida*",		NAME="%k"

# mylex
KERNEL=="rd*",		NAME="%k"

# dri devices
KERNEL=="card*",	NAME="dri/card%n", GROUP="video"
KERNEL=="nvidia*",	NAME="%k", GROUP="video"
KERNEL=="3dfx*",	NAME="%k", GROUP="video"

# alsa devices
SUBSYSTEM=="sound", GROUP="audio"
KERNEL=="controlC[0-9]*",	NAME="snd/%k"
KERNEL=="hw[CD0-9]*",		NAME="snd/%k"
KERNEL=="pcm[CD0-9cp]*",	NAME="snd/%k"
KERNEL=="midiC[D0-9]*",		NAME="snd/%k"
KERNEL=="timer",		NAME="snd/%k"
KERNEL=="seq",			NAME="snd/%k"

# capi devices
KERNEL=="capi",		NAME="capi20", SYMLINK+="isdn/capi20", GROUP="dialout"
KERNEL=="capi*",	NAME="capi/%n", GROUP="dialout"

# cpu devices
KERNEL=="cpu[0-9]*",	NAME="cpu/%n/cpuid"
KERNEL=="msr[0-9]*",	NAME="cpu/%n/msr"
KERNEL=="microcode",	NAME="cpu/microcode"

# dm devices (ignore them)
KERNEL=="dm-[0-9]*",	OPTIONS="ignore_device"
# create a symlink named after the device map name
# note devmap_name comes with extras/multipath
#KERNEL=="dm-[0-9]*",	PROGRAM="/sbin/devmap_name %M %m", NAME="%k", SYMLINK+="%c"
KERNEL=="device-mapper",	NAME="mapper/control"

# fb devices
KERNEL=="fb[0-9]*",	NAME="fb/%n", SYMLINK+="%k", GROUP="video"

# floppy devices
KERNEL=="fd[0-9]*",	NAME="floppy/%n", SYMLINK+="%k", GROUP="floppy"

# i2c devices
KERNEL=="i2c-[0-9]*",	NAME="i2c/%n", SYMLINK+="%k"

# input devices
KERNEL=="mice",		NAME="input/%k", MODE="0644"
KERNEL=="mouse*",	NAME="input/%k", MODE="0644"
KERNEL=="event*",	NAME="input/%k", MODE="0600"
KERNEL=="js*",		NAME="input/%k", MODE="664"
KERNEL=="ts*",		NAME="input/%k", MODE="0600"

# loop devices
KERNEL=="loop[0-9]*",	NAME="loop/%n", SYMLINK+="%k", GROUP="disk"

# md block devices
KERNEL=="md[0-9]*",	NAME="md/%n", SYMLINK+="%k", GROUP="disk"

# aoe char devices,
SUBSYSTEM=="aoe", KERNEL=="discover",	NAME="etherd/%k", GROUP="disk", MODE="0220"
SUBSYSTEM=="aoe", KERNEL=="err",	NAME="etherd/%k", GROUP="disk", MODE="0440"
SUBSYSTEM=="aoe", KERNEL=="interfaces",	NAME="etherd/%k", GROUP="disk", MODE="0220"

# misc devices
KERNEL=="agpgart",	NAME="misc/%k", SYMLINK+="%k"
KERNEL=="psaux",	NAME="misc/%k", SYMLINK+="%k"
KERNEL=="rtc",		NAME="misc/%k", SYMLINK+="%k", MODE="0664"
KERNEL=="uinput",	NAME="misc/%k", SYMLINK+="%k"
KERNEL=="inotify",	NAME="misc/%k", SYMLINK+="%k", MODE="0666"

# netlink devices
KERNEL=="route",	NAME="netlink/%k"
KERNEL=="skip",		NAME="netlink/%k"
KERNEL=="usersock",	NAME="netlink/%k"
KERNEL=="fwmonitor",	NAME="netlink/%k"
KERNEL=="tcpdiag",	NAME="netlink/%k"
KERNEL=="nflog",	NAME="netlink/%k"
KERNEL=="xfrm",		NAME="netlink/%k"
KERNEL=="arpd",		NAME="netlink/%k"
KERNEL=="route6",	NAME="netlink/%k"
KERNEL=="ip6_fw",	NAME="netlink/%k"
KERNEL=="dnrtmsg",	NAME="netlink/%k"
KERNEL=="tap*",		NAME="netlink/%k"

# network devices
KERNEL=="tun",		NAME="net/%k",	MODE="0600"

# ramdisk devices
KERNEL=="ram[0-9]*",	NAME="rd/%n", SYMLINK+="%k"

# IEEE1394 (firewire) devices (must be before raw devices below)
KERNEL=="raw1394",	NAME="%k",		GROUP="video"
KERNEL=="dv1394*",	NAME="dv1394/%n",	GROUP="video"
KERNEL=="video1394*",	NAME="video1394/%n",	GROUP="video"

# raw devices
KERNEL=="raw[0-9]*",	NAME="raw/%k", GROUP="disk"
KERNEL=="ram*",		NAME="%k", GROUP="disk"

# sound devices
KERNEL=="adsp",			NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="adsp[0-9]*",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="audio",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="audio[0-9]*",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="dsp",			NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="dsp[0-9]*",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="mixer",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="mixer[0-9]*",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="sequencer",		NAME="sound/%k", SYMLINK+="%k", GROUP="audio"
KERNEL=="sequencer[0-9]*",	NAME="sound/%k", SYMLINK+="%k", GROUP="audio"

# memory devices
KERNEL=="random",	NAME="%k", MODE="0666"
KERNEL=="urandom",	NAME="%k", MODE="0444"
KERNEL=="mem",		NAME="%k", MODE="0640"
KERNEL=="kmem",		NAME="%k", MODE="0640"
KERNEL=="port",		NAME="%k", MODE="0640"
KERNEL=="full",		NAME="%k", MODE="0666"
KERNEL=="null",		NAME="%k", MODE="0666"
KERNEL=="zero",		NAME="%k", MODE="0666"

# usb devices
KERNEL=="hiddev*",		NAME="usb/%k"
KERNEL=="auer*",		NAME="usb/%k"
KERNEL=="legousbtower*",	NAME="usb/%k", GROUP="usb"
KERNEL=="dabusb*",		NAME="usb/%k"
BUS=="usb", KERNEL=="lp[0-9]*",	NAME="usb/%k", GROUP="lp"

# v4l devices
KERNEL=="video[0-9]*",	NAME="v4l/video%n", SYMLINK+="video%n", GROUP="video"
KERNEL=="radio[0-9]*",	NAME="v4l/radio%n", SYMLINK+="radio%n", GROUP="video"
KERNEL=="vbi[0-9]*",	NAME="v4l/vbi%n", SYMLINK+="vbi%n", GROUP="video"
KERNEL=="vtx[0-9]*",	NAME="v4l/vtx%n", GROUP="video"

# dvb devices
SUBSYSTEM=="dvb", PROGRAM="/bin/sh -c 'K=%k; K=$${K#dvb}; printf dvb/adapter%%i/%%s $${K%%%%.*} $${K#*.}'", NAME="%c", GROUP="video"

# Asterisk Zaptel devices
KERNEL=="zapctl",	NAME="zap/ctl"
KERNEL=="zaptimer",	NAME="zap/timer"
KERNEL=="zapchannel",	NAME="zap/channel"
KERNEL=="zappseudo",	NAME="zap/pseudo"
KERNEL=="zap[0-9]*",	NAME="zap/%n"

# pilot/palm devices
KERNEL=="pilot",	NAME="%k", GROUP="uucp"

# jaz devices
KERNEL=="jaz*",		NAME="%k", GROUP="disk"

# zip devices
KERNEL=="pocketzip*",	NAME="%k", GROUP="disk"
KERNEL=="zip*",		NAME="%k", GROUP="disk"

# ls120 devices
KERNEL=="ls120",	NAME="%k", GROUP="disk"

# lp devices
KERNEL=="lp*",		NAME="%k", GROUP="lp"
KERNEL=="irlpt",	NAME="%k", GROUP="lp"
KERNEL=="usblp",	NAME="%k", GROUP="lp"
KERNEL=="lp*",		NAME="%k", GROUP="lp"
KERNEL=="parport*",	NAME="%k", GROUP="lp"

# tape devices
KERNEL=="ht*",		NAME="%k", GROUP="tape"
KERNEL=="nht*",		NAME="%k", GROUP="tape"
KERNEL=="pt*",		NAME="%k", GROUP="tape"
KERNEL=="npt*",		NAME="%k", GROUP="tape"
KERNEL=="st*",		NAME="%k", GROUP="tape"
KERNEL=="nst*",		NAME="%k", GROUP="tape"
KERNEL=="osst*",	NAME="%k", GROUP="tape"
KERNEL=="nosst*",	NAME="%k", GROUP="tape"

# diskonkey devices
KERNEL=="diskonkey*",	NAME="%k", GROUP="disk"

# rem_ide devices
KERNEL=="microdrive*",	NAME="%k", GROUP="disk"

# kbd devices
KERNEL=="kbd",		NAME="%k", MODE="0664"

# Sony Vaio Jogdial sonypi device
KERNEL=="sonypi",	NAME="%k", MODE="0666"

# packet devices
KERNEL=="pktcdvd",		NAME="pktcdvd/control", GROUP="cdrw", MODE="0660"
KERNEL=="pktcdvd[0-9]*",	NAME="pktcdvd/pktcdvd%n", GROUP="cdrw", MODE="0660"

# infiniband devices
KERNEL=="umad*",	NAME="infiniband/%k"
KERNEL=="issm*",	NAME="infiniband/%k"


# usbfs-like device nodes
SUBSYSTEM=="usb_device", PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i $${K%%%%.*} $${K#*.}'", NAME="%c", MODE="0644"


# Module autoloading

# Autoload modules that lack aliases but have them defined inutoload modules
SYSFS{modalias}=="?*", ACTION=="add", RUN+="/sbin/modprobe $env{MODALIAS}"

# /etc/modprobe.conf.
SUBSYSTEM=="pnp", ENV{MODALIAS}!="?*", RUN+="/bin/sh -c 'while read id; do /sbin/modprobe pnp:d$$id; done < /sys$devpath/id'"
# If you have problems with some pnp modules being loaded, please enter the
# following aliases into the modprobe configuration files.  These are needed by
# udev to autoload some modules
# alias pnp:dPNP0510 irtty-sir
# alias pnp:dPNP0511 irtty-sir
# alias pnp:dPNP0700 floppy
# alias pnp:dPNP0800 pcspkr
# alias pnp:dPNP0b00 rtc
# alias pnp:dPNP0303 atkbd
# alias pnp:dPNP0f13 psmouse
# alias pnp:dPNPb02f analog



# Load firmware
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"


# be backward compatible for a while with the /etc/dev.d and /etc/hotplug.d/ systems
# run /etc/hotplug.d/ stuff only if we came from a hotplug event, not for udevstart
ENV{UDEVD_EVENT}=="1", RUN+="udev_run_hotplugd $env{SUBSYSTEM}"

# always run /etc/dev.d/ stuff for now.
RUN+="udev_run_devd $env{SUBSYSTEM}"

# debugging monitor
RUN+="socket:/org/kernel/udev/monitor"

[-- Attachment #3: Type: text/plain, Size: 373 bytes --]

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

[-- Attachment #4: Type: text/plain, Size: 226 bytes --]

_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2006-09-03  4:03 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-31  0:41 [PATCH] add options to udevtrigger to control scanning Greg KH
2006-08-31  8:46 ` Kay Sievers
2006-08-31 17:31 ` Greg KH
2006-08-31 17:37 ` Marco d'Itri
2006-08-31 17:52 ` Greg KH
2006-08-31 20:02 ` Scott James Remnant
2006-09-02 17:46 ` Roy Marples
2006-09-03  1:34 ` Kay Sievers
2006-09-03  3:46 ` Greg KH
2006-09-03  4:03 ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).