summaryrefslogtreecommitdiff
path: root/namedev.h
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-01-12 21:39:05 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:13:15 -0700
commitac28b86d631f23b5df74dbeb33e76a2b3f5d88bb (patch)
tree3b782dc1d47be2e66e4d498b941217b894a1d124 /namedev.h
parent5472beeea5884dfc8bc5afb0f963de3ea3232e66 (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 'namedev.h')
-rw-r--r--namedev.h29
1 files changed, 6 insertions, 23 deletions
diff --git a/namedev.h b/namedev.h
index f1e770277b..4e75db6410 100644
--- a/namedev.h
+++ b/namedev.h
@@ -28,17 +28,6 @@
struct sysfs_class_device;
-
-enum config_type {
- KERNEL_NAME = 0, /* must be 0 to let memset() default to this value */
- LABEL = 1,
- NUMBER = 2,
- TOPOLOGY = 3,
- REPLACE = 4,
- CALLOUT = 5,
- IGNORE = 6,
-};
-
#define BUS_SIZE 30
#define FILE_SIZE 50
#define VALUE_SIZE 100
@@ -46,23 +35,17 @@ enum config_type {
#define PLACE_SIZE 50
#define PROGRAM_SIZE 100
-#define TYPE_LABEL "LABEL"
-#define TYPE_NUMBER "NUMBER"
-#define TYPE_TOPOLOGY "TOPOLOGY"
-#define TYPE_REPLACE "REPLACE"
-#define TYPE_CALLOUT "CALLOUT"
-#define TYPE_IGNORE "IGNORE"
-
#define FIELD_BUS "BUS"
-#define FIELD_ID "ID"
#define FIELD_SYSFS "SYSFS_"
+#define FIELD_ID "ID"
#define FIELD_PLACE "PLACE"
#define FIELD_PROGRAM "PROGRAM"
+#define FIELD_RESULT "RESULT"
#define FIELD_KERNEL "KERNEL"
#define FIELD_NAME "NAME"
#define FIELD_SYMLINK "SYMLINK"
-#define CALLOUT_MAXARG 8
+#define CALLOUT_MAXARG 10
#define MAX_SYSFS_PAIRS 5
struct sysfs_pair {
@@ -73,12 +56,12 @@ struct sysfs_pair {
struct config_device {
struct list_head node;
- enum config_type type;
char bus[BUS_SIZE];
char id[ID_SIZE];
char place[PLACE_SIZE];
- char kernel_name[NAME_SIZE];
- char exec_program[PROGRAM_SIZE];
+ char kernel[NAME_SIZE];
+ char program[PROGRAM_SIZE];
+ char result[PROGRAM_SIZE];
char name[NAME_SIZE];
char symlink[NAME_SIZE];
struct sysfs_pair sysfs_pair[MAX_SYSFS_PAIRS];