]>
Commit | Line | Data |
---|---|---|
663996b3 MS |
1 | /* |
2 | * Copyright (C) 2003 Greg Kroah-Hartman <greg@kroah.com> | |
3 | * Copyright (C) 2003-2010 Kay Sievers <kay@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 | #pragma once | |
20 | ||
21 | #include <sys/types.h> | |
22 | #include <sys/param.h> | |
23 | #include <signal.h> | |
24 | ||
25 | #include "macro.h" | |
5eef597e | 26 | #include "sd-rtnl.h" |
663996b3 MS |
27 | #include "libudev.h" |
28 | #include "libudev-private.h" | |
29 | #include "util.h" | |
30 | #include "label.h" | |
31 | #include "strv.h" | |
32 | ||
33 | struct udev_event { | |
34 | struct udev *udev; | |
35 | struct udev_device *dev; | |
36 | struct udev_device *dev_parent; | |
37 | struct udev_device *dev_db; | |
38 | char *name; | |
39 | char *program_result; | |
40 | mode_t mode; | |
41 | uid_t uid; | |
42 | gid_t gid; | |
60f067b4 | 43 | struct udev_list seclabel_list; |
663996b3 MS |
44 | struct udev_list run_list; |
45 | int exec_delay; | |
46 | usec_t birth_usec; | |
663996b3 | 47 | int fd_signal; |
5eef597e | 48 | sd_rtnl *rtnl; |
663996b3 MS |
49 | unsigned int builtin_run; |
50 | unsigned int builtin_ret; | |
51 | bool sigterm; | |
52 | bool inotify_watch; | |
53 | bool inotify_watch_final; | |
54 | bool group_set; | |
55 | bool group_final; | |
56 | bool owner_set; | |
57 | bool owner_final; | |
58 | bool mode_set; | |
59 | bool mode_final; | |
60 | bool name_final; | |
61 | bool devlink_final; | |
62 | bool run_final; | |
63 | }; | |
64 | ||
65 | struct udev_watch { | |
66 | struct udev_list_node node; | |
67 | int handle; | |
68 | char *name; | |
69 | }; | |
70 | ||
71 | /* udev-rules.c */ | |
72 | struct udev_rules; | |
73 | struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names); | |
74 | struct udev_rules *udev_rules_unref(struct udev_rules *rules); | |
75 | bool udev_rules_check_timestamp(struct udev_rules *rules); | |
5eef597e MP |
76 | int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, |
77 | const sigset_t *sigmask); | |
14228c0d | 78 | int udev_rules_apply_static_dev_perms(struct udev_rules *rules); |
663996b3 MS |
79 | |
80 | /* udev-event.c */ | |
81 | struct udev_event *udev_event_new(struct udev_device *dev); | |
82 | void udev_event_unref(struct udev_event *event); | |
83 | size_t udev_event_apply_format(struct udev_event *event, const char *src, char *dest, size_t size); | |
84 | int udev_event_apply_subsys_kernel(struct udev_event *event, const char *string, | |
85 | char *result, size_t maxsize, int read_value); | |
86 | int udev_event_spawn(struct udev_event *event, | |
5eef597e MP |
87 | usec_t timeout_usec, |
88 | usec_t timeout_warn_usec, | |
663996b3 MS |
89 | const char *cmd, char **envp, const sigset_t *sigmask, |
90 | char *result, size_t ressize); | |
5eef597e MP |
91 | void udev_event_execute_rules(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, |
92 | struct udev_rules *rules, const sigset_t *sigset); | |
93 | void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec, usec_t timeout_warn_usec, const sigset_t *sigset); | |
663996b3 MS |
94 | int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]); |
95 | ||
96 | /* udev-watch.c */ | |
97 | int udev_watch_init(struct udev *udev); | |
98 | void udev_watch_restore(struct udev *udev); | |
99 | void udev_watch_begin(struct udev *udev, struct udev_device *dev); | |
100 | void udev_watch_end(struct udev *udev, struct udev_device *dev); | |
101 | struct udev_device *udev_watch_lookup(struct udev *udev, int wd); | |
102 | ||
103 | /* udev-node.c */ | |
60f067b4 JS |
104 | void udev_node_add(struct udev_device *dev, bool apply, |
105 | mode_t mode, uid_t uid, gid_t gid, | |
106 | struct udev_list *seclabel_list); | |
663996b3 MS |
107 | void udev_node_remove(struct udev_device *dev); |
108 | void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev_old); | |
109 | ||
110 | /* udev-ctrl.c */ | |
111 | struct udev_ctrl; | |
112 | struct udev_ctrl *udev_ctrl_new(struct udev *udev); | |
113 | struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd); | |
114 | int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl); | |
663996b3 MS |
115 | struct udev_ctrl *udev_ctrl_unref(struct udev_ctrl *uctrl); |
116 | int udev_ctrl_cleanup(struct udev_ctrl *uctrl); | |
117 | struct udev *udev_ctrl_get_udev(struct udev_ctrl *uctrl); | |
118 | int udev_ctrl_get_fd(struct udev_ctrl *uctrl); | |
119 | int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, int timeout); | |
120 | int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, int timeout); | |
121 | int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, int timeout); | |
122 | int udev_ctrl_send_reload(struct udev_ctrl *uctrl, int timeout); | |
123 | int udev_ctrl_send_ping(struct udev_ctrl *uctrl, int timeout); | |
124 | int udev_ctrl_send_exit(struct udev_ctrl *uctrl, int timeout); | |
125 | int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, int timeout); | |
126 | int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, int timeout); | |
127 | struct udev_ctrl_connection; | |
128 | struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl); | |
129 | struct udev_ctrl_connection *udev_ctrl_connection_ref(struct udev_ctrl_connection *conn); | |
130 | struct udev_ctrl_connection *udev_ctrl_connection_unref(struct udev_ctrl_connection *conn); | |
131 | struct udev_ctrl_msg; | |
132 | struct udev_ctrl_msg *udev_ctrl_receive_msg(struct udev_ctrl_connection *conn); | |
663996b3 MS |
133 | struct udev_ctrl_msg *udev_ctrl_msg_unref(struct udev_ctrl_msg *ctrl_msg); |
134 | int udev_ctrl_get_set_log_level(struct udev_ctrl_msg *ctrl_msg); | |
135 | int udev_ctrl_get_stop_exec_queue(struct udev_ctrl_msg *ctrl_msg); | |
136 | int udev_ctrl_get_start_exec_queue(struct udev_ctrl_msg *ctrl_msg); | |
137 | int udev_ctrl_get_reload(struct udev_ctrl_msg *ctrl_msg); | |
138 | int udev_ctrl_get_ping(struct udev_ctrl_msg *ctrl_msg); | |
139 | int udev_ctrl_get_exit(struct udev_ctrl_msg *ctrl_msg); | |
140 | const char *udev_ctrl_get_set_env(struct udev_ctrl_msg *ctrl_msg); | |
141 | int udev_ctrl_get_set_children_max(struct udev_ctrl_msg *ctrl_msg); | |
142 | ||
143 | /* built-in commands */ | |
144 | enum udev_builtin_cmd { | |
145 | #ifdef HAVE_BLKID | |
146 | UDEV_BUILTIN_BLKID, | |
147 | #endif | |
148 | UDEV_BUILTIN_BTRFS, | |
663996b3 MS |
149 | UDEV_BUILTIN_HWDB, |
150 | UDEV_BUILTIN_INPUT_ID, | |
14228c0d | 151 | UDEV_BUILTIN_KEYBOARD, |
663996b3 MS |
152 | #ifdef HAVE_KMOD |
153 | UDEV_BUILTIN_KMOD, | |
154 | #endif | |
155 | UDEV_BUILTIN_NET_ID, | |
60f067b4 | 156 | UDEV_BUILTIN_NET_LINK, |
663996b3 MS |
157 | UDEV_BUILTIN_PATH_ID, |
158 | UDEV_BUILTIN_USB_ID, | |
159 | #ifdef HAVE_ACL | |
160 | UDEV_BUILTIN_UACCESS, | |
161 | #endif | |
162 | UDEV_BUILTIN_MAX | |
163 | }; | |
164 | struct udev_builtin { | |
165 | const char *name; | |
166 | int (*cmd)(struct udev_device *dev, int argc, char *argv[], bool test); | |
167 | const char *help; | |
168 | int (*init)(struct udev *udev); | |
169 | void (*exit)(struct udev *udev); | |
170 | bool (*validate)(struct udev *udev); | |
171 | bool run_once; | |
172 | }; | |
173 | #ifdef HAVE_BLKID | |
174 | extern const struct udev_builtin udev_builtin_blkid; | |
175 | #endif | |
176 | extern const struct udev_builtin udev_builtin_btrfs; | |
663996b3 MS |
177 | extern const struct udev_builtin udev_builtin_hwdb; |
178 | extern const struct udev_builtin udev_builtin_input_id; | |
14228c0d | 179 | extern const struct udev_builtin udev_builtin_keyboard; |
663996b3 MS |
180 | #ifdef HAVE_KMOD |
181 | extern const struct udev_builtin udev_builtin_kmod; | |
182 | #endif | |
183 | extern const struct udev_builtin udev_builtin_net_id; | |
60f067b4 | 184 | extern const struct udev_builtin udev_builtin_net_setup_link; |
663996b3 MS |
185 | extern const struct udev_builtin udev_builtin_path_id; |
186 | extern const struct udev_builtin udev_builtin_usb_id; | |
187 | extern const struct udev_builtin udev_builtin_uaccess; | |
188 | void udev_builtin_init(struct udev *udev); | |
189 | void udev_builtin_exit(struct udev *udev); | |
190 | enum udev_builtin_cmd udev_builtin_lookup(const char *command); | |
191 | const char *udev_builtin_name(enum udev_builtin_cmd cmd); | |
192 | bool udev_builtin_run_once(enum udev_builtin_cmd cmd); | |
193 | int udev_builtin_run(struct udev_device *dev, enum udev_builtin_cmd cmd, const char *command, bool test); | |
194 | void udev_builtin_list(struct udev *udev); | |
195 | bool udev_builtin_validate(struct udev *udev); | |
196 | int udev_builtin_add_property(struct udev_device *dev, bool test, const char *key, const char *val); | |
14228c0d MB |
197 | int udev_builtin_hwdb_lookup(struct udev_device *dev, const char *prefix, const char *modalias, |
198 | const char *filter, bool test); | |
663996b3 MS |
199 | |
200 | /* udev logging */ | |
201 | void udev_main_log(struct udev *udev, int priority, | |
202 | const char *file, int line, const char *fn, | |
60f067b4 | 203 | const char *format, va_list args) _printf_(6, 0); |
663996b3 MS |
204 | |
205 | /* udevadm commands */ | |
206 | struct udevadm_cmd { | |
207 | const char *name; | |
208 | int (*cmd)(struct udev *udev, int argc, char *argv[]); | |
209 | const char *help; | |
210 | int debug; | |
211 | }; | |
212 | extern const struct udevadm_cmd udevadm_info; | |
213 | extern const struct udevadm_cmd udevadm_trigger; | |
214 | extern const struct udevadm_cmd udevadm_settle; | |
215 | extern const struct udevadm_cmd udevadm_control; | |
216 | extern const struct udevadm_cmd udevadm_monitor; | |
217 | extern const struct udevadm_cmd udevadm_hwdb; | |
218 | extern const struct udevadm_cmd udevadm_test; | |
219 | extern const struct udevadm_cmd udevadm_test_builtin; |