[PATCH] support DRIVER as a rule key
Match with a rule against a device with a specific kernel driver.
This commit is contained in:
parent
6818c51d7a
commit
2092fbcdeb
11
namedev.c
11
namedev.c
|
@ -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);
|
||||
|
|
15
namedev.h
15
namedev.h
|
@ -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];
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
},
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue