X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=udev_rules.h;h=14e40abc2ca4c5b34ee04f7a101db61081ecc637;hp=71c510bce5d07cfc2c644ace714bb76a99141633;hb=a0e5382d66567cc91c1a1f571e9fb5288106e876;hpb=e5e322bc627a07d29a07e08f7c96bd644a3ae057 diff --git a/udev_rules.h b/udev_rules.h index 71c510bce..14e40abc2 100644 --- a/udev_rules.h +++ b/udev_rules.h @@ -20,75 +20,120 @@ * */ -#ifndef NAMEDEV_H -#define NAMEDEV_H +#ifndef UDEV_RULES_H +#define UDEV_RULES_H #include "libsysfs/sysfs/libsysfs.h" #include "udev.h" #include "list.h" -#define FIELD_KERNEL "KERNEL" -#define FIELD_SUBSYSTEM "SUBSYSTEM" -#define FIELD_BUS "BUS" -#define FIELD_SYSFS "SYSFS" -#define FIELD_ID "ID" -#define FIELD_PROGRAM "PROGRAM" -#define FIELD_RESULT "RESULT" -#define FIELD_DRIVER "DRIVER" -#define FIELD_NAME "NAME" -#define FIELD_SYMLINK "SYMLINK" -#define FIELD_OWNER "OWNER" -#define FIELD_GROUP "GROUP" -#define FIELD_MODE "MODE" -#define FIELD_OPTIONS "OPTIONS" - +#define KEY_KERNEL "KERNEL" +#define KEY_SUBSYSTEM "SUBSYSTEM" +#define KEY_ACTION "ACTION" +#define KEY_DEVPATH "DEVPATH" +#define KEY_BUS "BUS" +#define KEY_ID "ID" +#define KEY_PROGRAM "PROGRAM" +#define KEY_RESULT "RESULT" +#define KEY_DRIVER "DRIVER" +#define KEY_SYSFS "SYSFS" +#define KEY_ENV "ENV" +#define KEY_MODALIAS "MODALIAS" +#define KEY_IMPORT "IMPORT" +#define KEY_NAME "NAME" +#define KEY_SYMLINK "SYMLINK" +#define KEY_OWNER "OWNER" +#define KEY_GROUP "GROUP" +#define KEY_MODE "MODE" +#define KEY_RUN "RUN" +#define KEY_OPTIONS "OPTIONS" + +#define OPTION_LAST_RULE "last_rule" #define OPTION_IGNORE_DEVICE "ignore_device" #define OPTION_IGNORE_REMOVE "ignore_remove" #define OPTION_PARTITIONS "all_partitions" -#define MAX_SYSFS_PAIRS 5 +#define KEY_SYSFS_PAIRS_MAX 5 +#define KEY_ENV_PAIRS_MAX 5 #define RULEFILE_SUFFIX ".rules" -struct sysfs_pair { - char file[PATH_SIZE]; +enum key_operation { + KEY_OP_UNSET, + KEY_OP_MATCH, + KEY_OP_NOMATCH, + KEY_OP_ADD, + KEY_OP_ASSIGN, + KEY_OP_ASSIGN_FINAL, +}; + +struct key_pair { + char name[NAME_SIZE]; char value[VALUE_SIZE]; + enum key_operation operation; }; struct udev_rule { struct list_head node; - char kernel[NAME_SIZE]; + char kernel_name[NAME_SIZE]; + enum key_operation kernel_operation; char subsystem[NAME_SIZE]; + enum key_operation subsystem_operation; + char action[NAME_SIZE]; + enum key_operation action_operation; + char devpath[PATH_SIZE]; + enum key_operation devpath_operation; char bus[NAME_SIZE]; + enum key_operation bus_operation; char id[NAME_SIZE]; - struct sysfs_pair sysfs_pair[MAX_SYSFS_PAIRS]; + enum key_operation id_operation; + char driver[NAME_SIZE]; + enum key_operation driver_operation; char program[PATH_SIZE]; + enum key_operation program_operation; char result[PATH_SIZE]; - char driver[NAME_SIZE]; + enum key_operation result_operation; + struct key_pair sysfs_pair[KEY_SYSFS_PAIRS_MAX]; + int sysfs_pair_count; + struct key_pair env_pair[KEY_ENV_PAIRS_MAX]; + int env_pair_count; + char modalias[NAME_SIZE]; + enum key_operation modalias_operation; + char import[PATH_SIZE]; + enum key_operation import_operation; + int import_exec; + char name[PATH_SIZE]; + enum key_operation name_operation; char symlink[PATH_SIZE]; - + enum key_operation symlink_operation; char owner[USER_SIZE]; + enum key_operation owner_operation; char group[USER_SIZE]; + enum key_operation group_operation; mode_t mode; + enum key_operation mode_operation; + char run[PATH_SIZE]; + enum key_operation run_operation; - int partitions; + int last_rule; int ignore_device; int ignore_remove; + int partitions; char config_file[PATH_SIZE]; int config_line; }; -extern struct list_head udev_rule_list; - extern int udev_rules_init(void); -extern int udev_rules_get_name(struct udevice *udev, struct sysfs_class_device *class_dev); extern void udev_rules_close(void); -extern void udev_rule_dump(struct udev_rule *rule); -extern void udev_rule_list_dump(void); +extern int udev_rules_iter_init(void); +extern struct udev_rule *udev_rules_iter_next(void); + +extern int udev_rules_get_name(struct udevice *udev, struct sysfs_class_device *class_dev); +extern int udev_rules_get_run(struct udevice *udev, struct sysfs_device *sysfs_device); #endif