mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
[PATCH] support SUBSYSTEM as a rule key
This should make it easier to catch e.g all block or net devices with a single rule.
This commit is contained in:
parent
02fa9ae589
commit
6818c51d7a
13
namedev.c
13
namedev.c
@ -604,7 +604,7 @@ static int match_rule(struct config_device *dev, struct sysfs_class_device *clas
|
||||
}
|
||||
}
|
||||
|
||||
/* check for matching kernel name*/
|
||||
/* check for matching kernel name */
|
||||
if (dev->kernel[0] != '\0') {
|
||||
dbg("check for " FIELD_KERNEL " dev->kernel='%s' class_dev->name='%s'", dev->kernel, class_dev->name);
|
||||
if (strcmp_pattern(dev->kernel, class_dev->name) != 0) {
|
||||
@ -615,6 +615,17 @@ static int match_rule(struct config_device *dev, struct sysfs_class_device *clas
|
||||
}
|
||||
}
|
||||
|
||||
/* check for matching subsystem */
|
||||
if (dev->subsystem[0] != '\0') {
|
||||
dbg("check for " FIELD_SUBSYSTEM " dev->subsystem='%s' class_dev->name='%s'", dev->subsystem, class_dev->name);
|
||||
if (strcmp_pattern(dev->subsystem, udev->subsystem) != 0) {
|
||||
dbg(FIELD_SUBSYSTEM " is not matching");
|
||||
goto try_parent;
|
||||
} else {
|
||||
dbg(FIELD_SUBSYSTEM " matches");
|
||||
}
|
||||
}
|
||||
|
||||
/* check for matching bus id */
|
||||
if (dev->id[0] != '\0') {
|
||||
dbg("check " FIELD_ID);
|
||||
|
@ -42,6 +42,7 @@ struct sysfs_class_device;
|
||||
#define FIELD_PROGRAM "PROGRAM"
|
||||
#define FIELD_RESULT "RESULT"
|
||||
#define FIELD_KERNEL "KERNEL"
|
||||
#define FIELD_SUBSYSTEM "SUBSYSTEM"
|
||||
#define FIELD_NAME "NAME"
|
||||
#define FIELD_SYMLINK "SYMLINK"
|
||||
#define FIELD_OWNER "OWNER"
|
||||
@ -78,6 +79,7 @@ struct config_device {
|
||||
char kernel[NAME_SIZE];
|
||||
char program[PROGRAM_SIZE];
|
||||
char result[PROGRAM_SIZE];
|
||||
char subsystem[SUBSYSTEM_SIZE];
|
||||
char name[NAME_SIZE];
|
||||
char symlink[NAME_SIZE];
|
||||
struct sysfs_pair sysfs_pair[MAX_SYSFS_PAIRS];
|
||||
|
@ -258,6 +258,12 @@ static int namedev_parse_rules(const char *filename, void *data)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcasecmp(temp2, FIELD_SUBSYSTEM) == 0) {
|
||||
strfieldcpy(dev.subsystem, temp3);
|
||||
valid = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strcasecmp(temp2, FIELD_PROGRAM) == 0) {
|
||||
program_given = 1;
|
||||
strfieldcpy(dev.program, temp3);
|
||||
|
@ -1102,6 +1102,17 @@ EOF
|
||||
exp_name => "cdrom",
|
||||
conf => <<EOF
|
||||
KERNEL="sda", NAME="cdrom%e"
|
||||
EOF
|
||||
},
|
||||
{
|
||||
desc => "SUBSYSTEM test",
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "node",
|
||||
conf => <<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
|
||||
},
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user