[PATCH] support DRIVER as a rule key

Match with a rule against a device with a specific kernel driver.
This commit is contained in:
kay.sievers@vrfy.org 2004-11-13 05:21:12 +01:00 committed by Greg KH
parent 6818c51d7a
commit 2092fbcdeb
5 changed files with 39 additions and 7 deletions

View file

@ -626,6 +626,17 @@ static int match_rule(struct config_device *dev, struct sysfs_class_device *clas
}
}
/* check for matching driver */
if (dev->driver[0] != '\0') {
dbg("check for " FIELD_DRIVER " dev->driver='%s' sysfs_device->driver_name='%s'", dev->driver, sysfs_device->driver_name);
if (strcmp_pattern(dev->driver, sysfs_device->driver_name) != 0) {
dbg(FIELD_DRIVER " is not matching");
goto try_parent;
} else {
dbg(FIELD_DRIVER " matches");
}
}
/* check for matching bus id */
if (dev->id[0] != '\0') {
dbg("check " FIELD_ID);

View file

@ -28,12 +28,13 @@
struct sysfs_class_device;
#define BUS_SIZE 30
#define FILE_SIZE 50
#define VALUE_SIZE 100
#define ID_SIZE 50
#define PLACE_SIZE 50
#define PROGRAM_SIZE 100
#define BUS_SIZE 32
#define FILE_SIZE 64
#define VALUE_SIZE 128
#define ID_SIZE 64
#define PLACE_SIZE 64
#define DRIVER_SIZE 64
#define PROGRAM_SIZE 128
#define FIELD_BUS "BUS"
#define FIELD_SYSFS "SYSFS"
@ -43,6 +44,7 @@ struct sysfs_class_device;
#define FIELD_RESULT "RESULT"
#define FIELD_KERNEL "KERNEL"
#define FIELD_SUBSYSTEM "SUBSYSTEM"
#define FIELD_DRIVER "DRIVER"
#define FIELD_NAME "NAME"
#define FIELD_SYMLINK "SYMLINK"
#define FIELD_OWNER "OWNER"
@ -80,6 +82,7 @@ struct config_device {
char program[PROGRAM_SIZE];
char result[PROGRAM_SIZE];
char subsystem[SUBSYSTEM_SIZE];
char driver[DRIVER_SIZE];
char name[NAME_SIZE];
char symlink[NAME_SIZE];
struct sysfs_pair sysfs_pair[MAX_SYSFS_PAIRS];

View file

@ -264,6 +264,12 @@ static int namedev_parse_rules(const char *filename, void *data)
continue;
}
if (strcasecmp(temp2, FIELD_DRIVER) == 0) {
strfieldcpy(dev.driver, temp3);
valid = 1;
continue;
}
if (strcasecmp(temp2, FIELD_PROGRAM) == 0) {
program_given = 1;
strfieldcpy(dev.program, temp3);

View file

@ -1113,6 +1113,16 @@ EOF
BUS="scsi", KERNEL="sda", NAME="should_not_match", SUBSYSTEM="vc"
BUS="scsi", KERNEL="sda", NAME="node", SUBSYSTEM="block"
BUS="scsi", KERNEL="sda", NAME="should_not_match2", SUBSYSTEM="vc"
EOF
},
{
desc => "DRIVER test",
subsys => "block",
devpath => "/block/sda",
exp_name => "node",
conf => <<EOF
BUS="scsi", KERNEL="sda", NAME="should_not_match", DRIVER="sd-wrong"
BUS="scsi", KERNEL="sda", NAME="node", DRIVER="sd"
EOF
},
);

View file

@ -172,8 +172,10 @@ Match the bus type of the device.
Match the kernel device name.
.TP
.B SUBSYSTEM
Match the kernel's subsystem name.
Match the kernel subsystem name.
.TP
.B DRIVER
Match the kernel driver name.
.TP
.B ID
Match the device number on the bus, like PCI bus id.