Match with a rule against a device with a specific kernel driver.
}
}
+ /* 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);
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"
#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"
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];
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);
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
},
);
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.