chiark / gitweb /
update file headers
[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 #include "list.h"
24
25 #define PAIRS_MAX               5
26
27 enum key_operation {
28         KEY_OP_UNSET,
29         KEY_OP_MATCH,
30         KEY_OP_NOMATCH,
31         KEY_OP_ADD,
32         KEY_OP_ASSIGN,
33         KEY_OP_ASSIGN_FINAL,
34 };
35
36 struct key {
37         enum key_operation operation;
38         size_t val_off;
39 };
40
41 struct key_pair {
42         struct key key;
43         size_t key_name_off;
44 };
45
46 struct key_pairs {
47         int count;
48         struct key_pair keys[PAIRS_MAX];
49 };
50
51 enum import_type {
52         IMPORT_UNSET,
53         IMPORT_PROGRAM,
54         IMPORT_FILE,
55         IMPORT_PARENT,
56 };
57
58 enum escape_type {
59         ESCAPE_UNSET,
60         ESCAPE_NONE,
61         ESCAPE_REPLACE,
62 };
63
64 struct udev_rule {
65         struct key action;
66         struct key devpath;
67         struct key kernel;
68         struct key subsystem;
69         struct key driver;
70         struct key_pairs attr;
71
72         struct key kernels;
73         struct key subsystems;
74         struct key drivers;
75         struct key_pairs attrs;
76
77         struct key_pairs env;
78         struct key program;
79         struct key result;
80         struct key import;
81         enum import_type import_type;
82         struct key test;
83         mode_t test_mode_mask;
84         struct key run;
85         struct key wait_for;
86         struct key label;
87         struct key goto_label;
88
89         struct key name;
90         struct key symlink;
91         struct key symlink_match;
92         struct key owner;
93         struct key group;
94         struct key mode;
95         enum escape_type string_escape;
96
97         unsigned int link_priority;
98         int event_timeout;
99         unsigned int partitions;
100         unsigned int last_rule:1,
101                      run_ignore_error:1,
102                      ignore_device:1,
103                      ignore_remove:1;
104
105         size_t bufsize;
106         char buf[];
107 };
108
109 struct udev_rules {
110         struct udev *udev;
111         char *buf;
112         size_t bufsize;
113         int resolve_names;
114 };
115
116 struct udev_rules_iter {
117         struct udev_rules *rules;
118         size_t current;
119 };
120
121 extern int udev_rules_init(struct udev *udev, struct udev_rules *rules, int resolve_names);
122 extern void udev_rules_cleanup(struct udev_rules *rules);
123
124 extern void udev_rules_iter_init(struct udev_rules_iter *iter, struct udev_rules *rules);
125 extern struct udev_rule *udev_rules_iter_next(struct udev_rules_iter *iter);
126 extern struct udev_rule *udev_rules_iter_label(struct udev_rules_iter *iter, const char *label);
127
128 extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev);
129 extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev);
130 extern int udev_rules_run(struct udevice *udev);
131
132 extern void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize);
133
134 #endif