diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-01-12 21:39:05 -0800 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 21:13:15 -0700 |
commit | ac28b86d631f23b5df74dbeb33e76a2b3f5d88bb (patch) | |
tree | 3b782dc1d47be2e66e4d498b941217b894a1d124 /test | |
parent | 5472beeea5884dfc8bc5afb0f963de3ea3232e66 (diff) |
[PATCH] udev - drop all methods :)
> Hi,
> as promised yesterday, here is a patch that drops the explicit methods
> given in the udev config and implement only one type of rule.
>
> A rule now consists only of a number of keys to match. All known keys
> are valid in any combination. The former configs should work with a few
> changes:
>
> o the "<METHOD>, " at the beginning of the line should be removed
>
> o the result of the externel program is matched with RESULT= instead if ID=
> the PROGRAM= key is only valid if the program exits with zero
> (just exit with nozero in a script if the rule should not match)
>
> o rules are processed in order they appear in the file, no priority
>
> o if NAME="" is given, udev is instructed to ignore this device,
> no node will be created
>
>
> EXAMPLE:
>
> # combined BUS, SYSFS and KERNEL
> BUS="usb", KERNEL="video*", SYSFS_model="Creative Labs WebCam*", NAME="test/webcam%n"
>
> # exec script only for the first ide drive (hda), all other will be skipped
> BUS="ide", KERNEL="hda*", PROGRAM="/home/kay/src/udev.kay/extras/ide-devfs.sh %k %b %n", RESULT="hd*", NAME="%1c", SYMLINK="%2c %3c"
>
>
> The udev-test.pl and test.block works fine here.
> Please adapt your config and give it a try.
>
Here is a slightly better version of the patch.
After a conversation with Patrick, we are now able to execute the PROGRAM
and also match in all following rules with the RESULT value from this exec.
EXAMPLE:
We have 7 rules with RESULT and 2 with PROGRAM.
Only the 5th rule matches with the callout result from the exec in the 4th rule.
RULES:
PROGRAM="/bin/echo abc", RESULT="no_match", NAME="web-no-2"
KERNEL="video*", RESULT="123", NAME="web-no-3"
KERNEL="video*", RESULT="123", NAME="web-no-4"
PROGRAM="/bin/echo 123", RESULT="no_match", NAME="web-no-5"
KERNEL="video*", RESULT="123", NAME="web-yes"
RESULT:
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: process rule
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check PROGRAM
Jan 11 23:36:52 pim udev[26050]: execute_program: executing '/bin/echo abc'
Jan 11 23:36:52 pim udev[26050]: execute_program: result is 'abc'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: PROGRAM returned successful
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for RESULT dev->result='no_match', udev->program_result='abc'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: RESULT is not matching
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: process rule
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for KERNEL dev->kernel='video*' class_dev->name='video0'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: KERNEL matches
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for RESULT dev->result='123', udev->program_result='abc'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: RESULT is not matching
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: process rule
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for KERNEL dev->kernel='video*' class_dev->name='video0'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: KERNEL matches
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for RESULT dev->result='123', udev->program_result='abc'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: RESULT is not matching
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: process rule
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check PROGRAM
Jan 11 23:36:52 pim udev[26050]: execute_program: executing '/bin/echo 123'
Jan 11 23:36:52 pim udev[26050]: execute_program: result is '123'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: PROGRAM returned successful
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for RESULT dev->result='no_match', udev->program_result='123'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: RESULT is not matching
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: process rule
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for KERNEL dev->kernel='video*' class_dev->name='video0'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: KERNEL matches
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: check for RESULT dev->result='123', udev->program_result='123'
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: RESULT matches
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: found matching rule, 'video*' becomes ''
Jan 11 23:36:52 pim udev[26050]: namedev_name_device: name, 'web-yes' is going to have owner='', group='', mode = 0600
Diffstat (limited to 'test')
-rw-r--r-- | test/udev-test.pl | 117 |
1 files changed, 57 insertions, 60 deletions
diff --git a/test/udev-test.pl b/test/udev-test.pl index 97c0094921..ab27c74c6a 100644 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -38,8 +38,8 @@ my @tests = ( devpath => "block/sda", expected => "boot_disk" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="boot_disk%n" -REPLACE, KERNEL="ttyUSB0", NAME="visor" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="boot_disk%n" +KERNEL="ttyUSB0", NAME="visor" EOF }, { @@ -48,7 +48,7 @@ EOF devpath => "block/sda/sda1", expected => "boot_disk1" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="boot_disk%n" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="boot_disk%n" EOF }, { @@ -57,10 +57,10 @@ EOF devpath => "block/sda/sda1", expected => "boot_disk1" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="?IBM-ESXS", NAME="boot_disk%n-1" -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS?", NAME="boot_disk%n-2" -LABEL, BUS="scsi", SYSFS_vendor="IBM-ES??", NAME="boot_disk%n" -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXSS", NAME="boot_disk%n-3" +BUS="scsi", SYSFS_vendor="?IBM-ESXS", NAME="boot_disk%n-1" +BUS="scsi", SYSFS_vendor="IBM-ESXS?", NAME="boot_disk%n-2" +BUS="scsi", SYSFS_vendor="IBM-ES??", NAME="boot_disk%n" +BUS="scsi", SYSFS_vendor="IBM-ESXSS", NAME="boot_disk%n-3" EOF }, { @@ -69,8 +69,8 @@ EOF devpath => "block/sda/sda1", expected => "boot_disk1" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_diskX%n" -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_disk%n" +BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_diskX%n" +BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", NAME="boot_disk%n" EOF }, { @@ -79,8 +79,8 @@ EOF devpath => "block/sda/sda1", expected => "boot_disk1" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", SYSFS_scsi_level="4", SYSFS_rev="B245", SYSFS_type="2", SYSFS_queue_depth="32", NAME="boot_diskXX%n" -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", SYSFS_scsi_level="4", SYSFS_rev="B245", SYSFS_type="0", NAME="boot_disk%n" +BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", SYSFS_scsi_level="4", SYSFS_rev="B245", SYSFS_type="2", SYSFS_queue_depth="32", NAME="boot_diskXX%n" +BUS="scsi", SYSFS_vendor="IBM-ESXS", SYSFS_model="ST336605LW !#", SYSFS_scsi_level="4", SYSFS_rev="B245", SYSFS_type="0", NAME="boot_disk%n" EOF }, { @@ -89,7 +89,7 @@ EOF devpath => "class/tty/ttyUSB0", expected => "visor/0" , conf => <<EOF -REPLACE, KERNEL="ttyUSB*", NAME="visor/%n" +KERNEL="ttyUSB*", NAME="visor/%n" EOF }, { @@ -98,9 +98,9 @@ EOF devpath => "class/tty/ttyUSB0", expected => "visor/0" , conf => <<EOF -REPLACE, KERNEL="ttyUSB??*", NAME="visor/%n-1" -REPLACE, KERNEL="ttyUSB??", NAME="visor/%n-2" -REPLACE, KERNEL="ttyUSB?", NAME="visor/%n" +KERNEL="ttyUSB??*", NAME="visor/%n-1" +KERNEL="ttyUSB??", NAME="visor/%n-2" +KERNEL="ttyUSB?", NAME="visor/%n" EOF }, { @@ -109,9 +109,9 @@ EOF devpath => "class/tty/ttyUSB0", expected => "visor/0" , conf => <<EOF -REPLACE, KERNEL="ttyUSB[A-Z]*", NAME="visor/%n-1" -REPLACE, KERNEL="ttyUSB?[0-9]", NAME="visor/%n-2" -REPLACE, KERNEL="ttyUSB[0-9]*", NAME="visor/%n" +KERNEL="ttyUSB[A-Z]*", NAME="visor/%n-1" +KERNEL="ttyUSB?[0-9]", NAME="visor/%n-2" +KERNEL="ttyUSB[0-9]*", NAME="visor/%n" EOF }, { @@ -120,7 +120,7 @@ EOF devpath => "class/tty/ttyUSB0", expected => "visor" , conf => <<EOF -REPLACE, KERNEL="ttyUSB0", NAME="visor" +KERNEL="ttyUSB0", NAME="visor" EOF }, { @@ -130,7 +130,7 @@ EOF expected => "visor" , conf => <<EOF # this is a comment -REPLACE, KERNEL="ttyUSB0", NAME="visor" +KERNEL="ttyUSB0", NAME="visor" EOF }, @@ -141,7 +141,7 @@ EOF expected => "visor" , conf => <<EOF # this is a comment with whitespace before the comment -REPLACE, KERNEL="ttyUSB0", NAME="visor" +KERNEL="ttyUSB0", NAME="visor" EOF }, @@ -152,7 +152,7 @@ EOF expected => "visor" , conf => <<EOF -REPLACE, KERNEL="ttyUSB0", NAME="visor" +KERNEL="ttyUSB0", NAME="visor" EOF }, @@ -162,7 +162,7 @@ EOF devpath => "class/tty/ttyUSB0", expected => "sub/direct/ory/visor" , conf => <<EOF -REPLACE, KERNEL="ttyUSB0", NAME="sub/direct/ory/visor" +KERNEL="ttyUSB0", NAME="sub/direct/ory/visor" EOF }, { @@ -171,7 +171,7 @@ EOF devpath => "block/sda/sda3", expected => "first_disk3" , conf => <<EOF -TOPOLOGY, BUS="scsi", PLACE="0:0:0:0", NAME="first_disk%n" +BUS="scsi", PLACE="0:0:0:0", NAME="first_disk%n" EOF }, { @@ -180,58 +180,58 @@ EOF devpath => "block/sda/sda3", expected => "Major:8:minor:3:kernelnumber:3:bus:0:0:0:0" , conf => <<EOF -TOPOLOGY, BUS="scsi", PLACE="0:0:0:0", NAME="Major:%M:minor:%m:kernelnumber:%n:bus:%b" +BUS="scsi", PLACE="0:0:0:0", NAME="Major:%M:minor:%m:kernelnumber:%n:bus:%b" EOF }, { - desc => "callout result substitution", + desc => "program result substitution", subsys => "block", devpath => "block/sda/sda3", expected => "special-device-3" , conf => <<EOF -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n special-device", ID="-special-*", NAME="%c-1-%n" -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n special-device", ID="special--*", NAME="%c-2-%n" -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n special-device", ID="special-device-", NAME="%c-3-%n" -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n special-device", ID="special-devic", NAME="%c-4-%n" -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n special-device", ID="special-*", NAME="%c-%n" +BUS="scsi", PROGRAM="/bin/echo -n special-device", RESULT="-special-*", NAME="%c-1-%n" +BUS="scsi", PROGRAM="/bin/echo -n special-device", RESULT="special--*", NAME="%c-2-%n" +BUS="scsi", PROGRAM="/bin/echo -n special-device", RESULT="special-device-", NAME="%c-3-%n" +BUS="scsi", PROGRAM="/bin/echo -n special-device", RESULT="special-devic", NAME="%c-4-%n" +BUS="scsi", PROGRAM="/bin/echo -n special-device", RESULT="special-*", NAME="%c-%n" EOF }, { - desc => "callout program substitution", + desc => "program result substitution", subsys => "block", devpath => "block/sda/sda3", expected => "test-0:0:0:0" , conf => <<EOF -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n test-%b", ID="test-*", NAME="%c" +BUS="scsi", PROGRAM="/bin/echo -n test-%b", RESULT="test-0:0*", NAME="%c" EOF }, { - desc => "callout program substitution (numbered part of)", + desc => "program result substitution (numbered part of)", subsys => "block", devpath => "block/sda/sda3", expected => "link1" , conf => <<EOF -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n node link1 link2", ID="node *", NAME="%1c", SYMLINK="%2c %3c" +BUS="scsi", PROGRAM="/bin/echo -n node link1 link2", RESULT="node *", NAME="%1c", SYMLINK="%2c %3c" EOF }, { - desc => "invalid callout for device with no bus", + desc => "invalid program for device with no bus", subsys => "tty", devpath => "class/tty/console", expected => "TTY" , conf => <<EOF -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n foo", ID="foo", NAME="foo" -REPLACE, KERNEL="console", NAME="TTY" +BUS="scsi", PROGRAM="/bin/echo -n foo", RESULT="foo", NAME="foo" +KERNEL="console", NAME="TTY" EOF }, { - desc => "valid callout for device with no bus", + desc => "valid program for device with no bus", subsys => "tty", devpath => "class/tty/console", expected => "foo" , conf => <<EOF -CALLOUT, PROGRAM="/bin/echo -n foo", ID="foo", NAME="foo" -REPLACE, KERNEL="console", NAME="TTY" +PROGRAM="/bin/echo -n foo", RESULT="foo", NAME="foo" +KERNEL="console", NAME="TTY" EOF }, { @@ -240,8 +240,8 @@ EOF devpath => "class/tty/console", expected => "TTY" , conf => <<EOF -LABEL, BUS="foo", SYSFS_dev="5:1", NAME="foo" -REPLACE, KERNEL="console", NAME="TTY" +BUS="foo", SYSFS_dev="5:1", NAME="foo" +KERNEL="console", NAME="TTY" EOF }, { @@ -250,8 +250,8 @@ EOF devpath => "class/tty/console", expected => "foo" , conf => <<EOF -LABEL, SYSFS_dev="5:1", NAME="foo" -REPLACE, KERNEL="console", NAME="TTY" +SYSFS_dev="5:1", NAME="foo" +KERNEL="console", NAME="TTY" EOF }, { @@ -260,7 +260,7 @@ EOF devpath => "block/sda", expected => "lun0/disc" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="lun0/%D" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="lun0/%D" EOF }, { @@ -269,18 +269,18 @@ EOF devpath => "block/sda/sda2", expected => "lun0/part2" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="lun0/%D" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="lun0/%D" EOF }, { - desc => "callout bus type", + desc => "program and bus type match", subsys => "block", devpath => "block/sda", expected => "scsi-0:0:0:0" , conf => <<EOF -CALLOUT, BUS="usb", PROGRAM="/bin/echo -n usb-%b", ID="*", NAME="%c" -CALLOUT, BUS="scsi", PROGRAM="/bin/echo -n scsi-%b", ID="*", NAME="%c" -CALLOUT, BUS="foo", PROGRAM="/bin/echo -n foo-%b", ID="*", NAME="%c" +BUS="usb", PROGRAM="/bin/echo -n usb-%b", NAME="%c" +BUS="scsi", PROGRAM="/bin/echo -n scsi-%b", NAME="%c" +BUS="foo", PROGRAM="/bin/echo -n foo-%b", NAME="%c" EOF }, { @@ -289,7 +289,7 @@ EOF devpath => "class/tty/ttyUSB0", expected => "visor0" , conf => <<EOF -REPLACE, KERNEL="ttyUSB[0-9]*", NAME="ttyUSB%n", SYMLINK="visor%n" +KERNEL="ttyUSB[0-9]*", NAME="ttyUSB%n", SYMLINK="visor%n" EOF }, { @@ -298,7 +298,7 @@ EOF devpath => "block/sda/sda2", expected => "1/2/a/b/symlink" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/node", SYMLINK="1/2/a/b/symlink" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/node", SYMLINK="1/2/a/b/symlink" EOF }, { @@ -307,7 +307,7 @@ EOF devpath => "block/sda/sda2", expected => "1/2/symlink" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/symlink" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/symlink" EOF }, { @@ -316,7 +316,7 @@ EOF devpath => "block/sda/sda2", expected => "1/2/c/d/symlink" , conf => <<EOF -LABEL, BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/c/d/symlink" +BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="1/2/a/b/node", SYMLINK="1/2/c/d/symlink" EOF }, { @@ -325,7 +325,7 @@ EOF devpath => "class/tty/ttyUSB0", expected => "second-0" , conf => <<EOF -REPLACE, KERNEL="ttyUSB0", NAME="visor", SYMLINK="first-%n second-%n third-%n" +KERNEL="ttyUSB0", NAME="visor", SYMLINK="first-%n second-%n third-%n" EOF }, ); @@ -368,11 +368,8 @@ print CONF "udev_permissions=\"$perm\"\n"; close CONF; foreach my $config (@tests) { - $config->{conf} =~ m/([A-Z]+)\s*,/; - my $method = $1; - print "TEST: $config->{desc}\n"; - print "method \'$method\' for \'$config->{devpath}\' expecting node \'$config->{expected}\'\n"; + print "device \'$config->{devpath}\' expecting node \'$config->{expected}\'\n"; udev("add", $config->{subsys}, $config->{devpath}, \$config->{conf}); if (-e "$PWD/$udev_root$config->{expected}") { |