]>
Commit | Line | Data |
---|---|---|
2232cac8 | 1 | /* |
e8d569b4 | 2 | * Copyright (C) 2003-2004 Greg Kroah-Hartman <greg@kroah.com> |
27b77df4 | 3 | * Copyright (C) 2004-2006 Kay Sievers <kay.sievers@vrfy.org> |
2232cac8 GKH |
4 | * |
5 | * This program is free software; you can redistribute it and/or modify it | |
6 | * under the terms of the GNU General Public License as published by the | |
7 | * Free Software Foundation version 2 of the License. | |
8 | * | |
9 | * This program is distributed in the hope that it will be useful, but | |
10 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
12 | * General Public License for more details. | |
13 | * | |
14 | * You should have received a copy of the GNU General Public License along | |
15 | * with this program; if not, write to the Free Software Foundation, Inc., | |
27b77df4 | 16 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
2232cac8 GKH |
17 | * |
18 | */ | |
19 | ||
38285d23 KS |
20 | #ifndef UDEV_RULES_H |
21 | #define UDEV_RULES_H | |
2232cac8 | 22 | |
8e41d35d | 23 | #include "udev.h" |
cb32ac94 GKH |
24 | #include "list.h" |
25 | ||
8bd41f36 | 26 | #define PAIRS_MAX 5 |
9dd0c257 | 27 | #define RULESFILE_SUFFIX ".rules" |
e41245cb | 28 | |
28ce66de | 29 | enum key_operation { |
db949b02 | 30 | KEY_OP_UNSET, |
28ce66de KS |
31 | KEY_OP_MATCH, |
32 | KEY_OP_NOMATCH, | |
33 | KEY_OP_ADD, | |
34 | KEY_OP_ASSIGN, | |
c974742b | 35 | KEY_OP_ASSIGN_FINAL, |
28ce66de KS |
36 | }; |
37 | ||
8bd41f36 | 38 | struct key { |
28ce66de | 39 | enum key_operation operation; |
8bd41f36 KS |
40 | size_t val_off; |
41 | }; | |
42 | ||
43 | struct key_pair { | |
44 | struct key key; | |
45 | size_t key_name_off; | |
46 | }; | |
47 | ||
48 | struct key_pairs { | |
49 | int count; | |
50 | struct key_pair keys[PAIRS_MAX]; | |
a8b01705 | 51 | }; |
cb32ac94 | 52 | |
0bfb84e1 KS |
53 | enum import_type { |
54 | IMPORT_UNSET, | |
55 | IMPORT_PROGRAM, | |
56 | IMPORT_FILE, | |
57 | IMPORT_PARENT, | |
58 | }; | |
59 | ||
3df3c93e KS |
60 | enum escape_type { |
61 | ESCAPE_UNSET, | |
62 | ESCAPE_NONE, | |
63 | ESCAPE_REPLACE, | |
64 | }; | |
65 | ||
e5e322bc | 66 | struct udev_rule { |
8bd41f36 KS |
67 | struct key action; |
68 | struct key devpath; | |
95776dc6 KS |
69 | struct key kernel; |
70 | struct key subsystem; | |
8bd41f36 | 71 | struct key driver; |
95776dc6 KS |
72 | struct key_pairs attr; |
73 | ||
74 | struct key kernels; | |
75 | struct key subsystems; | |
76 | struct key drivers; | |
77 | struct key_pairs attrs; | |
78 | ||
79 | struct key_pairs env; | |
8bd41f36 KS |
80 | struct key program; |
81 | struct key result; | |
8bd41f36 | 82 | struct key import; |
0bfb84e1 | 83 | enum import_type import_type; |
953249a3 KS |
84 | struct key test; |
85 | mode_t test_mode_mask; | |
95776dc6 | 86 | struct key run; |
b2fe4b9a | 87 | struct key wait_for_sysfs; |
95776dc6 KS |
88 | struct key label; |
89 | struct key goto_label; | |
8bd41f36 KS |
90 | |
91 | struct key name; | |
92 | struct key symlink; | |
1ff1aa42 | 93 | struct key symlink_match; |
8bd41f36 KS |
94 | struct key owner; |
95 | struct key group; | |
8bd41f36 | 96 | mode_t mode; |
95776dc6 | 97 | enum key_operation mode_operation; |
3df3c93e | 98 | enum escape_type string_escape; |
8bd41f36 | 99 | |
2dbb47f8 | 100 | unsigned int link_priority; |
8bd41f36 KS |
101 | unsigned int partitions; |
102 | unsigned int last_rule:1, | |
4110664d | 103 | run_ignore_error:1, |
8bd41f36 | 104 | ignore_device:1, |
0bfb84e1 | 105 | ignore_remove:1; |
fd9efc00 | 106 | |
8bd41f36 KS |
107 | size_t bufsize; |
108 | char buf[]; | |
109 | }; | |
fd9efc00 | 110 | |
8bd41f36 KS |
111 | struct udev_rules { |
112 | char *buf; | |
113 | size_t bufsize; | |
114 | size_t current; | |
8bd41f36 | 115 | int resolve_names; |
61219c75 GKH |
116 | }; |
117 | ||
287814b2 | 118 | extern int udev_rules_init(struct udev_rules *rules, int resolve_names); |
1aa1e248 | 119 | extern void udev_rules_cleanup(struct udev_rules *rules); |
6bf0ffe8 | 120 | |
8bd41f36 KS |
121 | extern void udev_rules_iter_init(struct udev_rules *rules); |
122 | extern struct udev_rule *udev_rules_iter_next(struct udev_rules *rules); | |
594dd610 | 123 | extern struct udev_rule *udev_rules_iter_label(struct udev_rules *rules, const char *label); |
6bf0ffe8 | 124 | |
1aa1e248 KS |
125 | extern int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev); |
126 | extern int udev_rules_get_run(struct udev_rules *rules, struct udevice *udev); | |
274da2b2 | 127 | extern int udev_rules_run(struct udevice *udev); |
19feb351 | 128 | |
a9bd2ed8 KS |
129 | extern void udev_rules_apply_format(struct udevice *udev, char *string, size_t maxsize); |
130 | ||
2232cac8 | 131 | #endif |