chiark / gitweb /
scsi_id: compiler warning on 32-bit
[elogind.git] / udev / udev_rules.h
1 /*
2  * Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com>
3  * Copyright (C) 2004-2008 Kay Sievers <kay.sievers@vrfy.org>
4  *
5  * This program is free software: you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation, either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #ifndef UDEV_RULES_H
20 #define UDEV_RULES_H
21
22 #include "udev.h"
23
24 #define PAIRS_MAX               5
25
26 enum key_operation {
27         KEY_OP_UNSET,
28         KEY_OP_MATCH,
29         KEY_OP_NOMATCH,
30         KEY_OP_ADD,
31         KEY_OP_ASSIGN,
32         KEY_OP_ASSIGN_FINAL,
33 };
34
35 struct key {
36         enum key_operation operation;
37         size_t val_off;
38 };
39
40 struct key_pair {
41         struct key key;
42         size_t key_name_off;
43 };
44
45 struct key_pairs {
46         int count;
47         struct key_pair keys[PAIRS_MAX];
48 };
49
50 enum import_type {
51         IMPORT_UNSET,
52         IMPORT_PROGRAM,
53         IMPORT_FILE,
54         IMPORT_PARENT,
55 };
56
57 enum escape_type {
58         ESCAPE_UNSET,
59         ESCAPE_NONE,
60         ESCAPE_REPLACE,
61 };
62
63 struct udev_rule {
64         struct key action;
65         struct key devpath;
66         struct key kernel;
67         struct key subsystem;
68         struct key driver;
69         struct key_pairs attr;
70
71         struct key kernels;
72         struct key subsystems;
73         struct key drivers;
74         struct key_pairs attrs;
75
76         struct key_pairs env;
77         struct key program;
78         struct key result;
79         struct key import;
80         enum import_type import_type;
81         struct key test;
82         mode_t test_mode_mask;
83         struct key run;
84         struct key wait_for;
85         struct key label;
86         struct key goto_label;
87
88         struct key name;
89         struct key symlink;
90         struct key symlink_match;
91         struct key owner;
92         struct key group;
93         struct key mode;
94         enum escape_type string_escape;
95
96         unsigned int link_priority;
97         int event_timeout;
98         unsigned int partitions;
99         unsigned int last_rule:1,
100                      run_ignore_error:1,
101                      ignore_device:1,
102                      ignore_remove:1;
103
104         size_t bufsize;
105         char buf[];
106 };
107
108 struct udev_rules {
109         struct udev *udev;
110         char *buf;
111         size_t bufsize;
112         int resolve_names;
113 };
114
115 struct udev_rules_iter {
116         struct udev_rules *rules;
117         size_t current;
118 };
119
120 extern int udev_rules_init(struct udev *udev, struct udev_rules *rules, int resolve_names);
121 extern void udev_rules_cleanup(struct udev_rules *rules);
122
123 extern void udev_rules_iter_init(struct udev_rules_iter *iter, struct udev_rules *rules);
124 extern struct udev_rule *udev_rules_iter_next(struct udev_rules_iter *iter);
125 extern struct udev_rule *udev_rules_iter_label(struct udev_rules_iter *iter, const char *label);
126
127 extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev);
128 extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev);
129 extern int udev_rules_run(struct udevice *udev);
130
131 extern void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize);
132
133 #endif