]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/udev/udev.h
coccinelle: make use of SYNTHETIC_ERRNO
[thirdparty/systemd.git] / src / udev / udev.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 #pragma once
3
4 /*
5 * Copyright © 2003 Greg Kroah-Hartman <greg@kroah.com>
6 */
7
8 #include "sd-device.h"
9 #include "sd-netlink.h"
10
11 #include "hashmap.h"
12 #include "macro.h"
13 #include "udev-util.h"
14 #include "util.h"
15
16 #define READ_END 0
17 #define WRITE_END 1
18
19 struct udev_event {
20 sd_device *dev;
21 sd_device *dev_parent;
22 sd_device *dev_db_clone;
23 char *name;
24 char *program_result;
25 mode_t mode;
26 uid_t uid;
27 gid_t gid;
28 Hashmap *seclabel_list;
29 Hashmap *run_list;
30 usec_t exec_delay_usec;
31 usec_t birth_usec;
32 sd_netlink *rtnl;
33 unsigned builtin_run;
34 unsigned builtin_ret;
35 bool inotify_watch;
36 bool inotify_watch_final;
37 bool group_set;
38 bool group_final;
39 bool owner_set;
40 bool owner_final;
41 bool mode_set;
42 bool mode_final;
43 bool name_final;
44 bool devlink_final;
45 bool run_final;
46 };
47
48 /* udev-rules.c */
49 struct udev_rules;
50 struct udev_rules *udev_rules_new(ResolveNameTiming resolve_name_timing);
51 struct udev_rules *udev_rules_unref(struct udev_rules *rules);
52 bool udev_rules_check_timestamp(struct udev_rules *rules);
53 int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event,
54 usec_t timeout_usec,
55 Hashmap *properties_list);
56 int udev_rules_apply_static_dev_perms(struct udev_rules *rules);
57
58 static inline usec_t udev_warn_timeout(usec_t timeout_usec) {
59 return DIV_ROUND_UP(timeout_usec, 3);
60 }
61
62 /* udev-event.c */
63 struct udev_event *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl);
64 struct udev_event *udev_event_free(struct udev_event *event);
65 ssize_t udev_event_apply_format(struct udev_event *event,
66 const char *src, char *dest, size_t size,
67 bool replace_whitespace);
68 int udev_event_spawn(struct udev_event *event,
69 usec_t timeout_usec,
70 bool accept_failure,
71 const char *cmd, char *result, size_t ressize);
72 int udev_event_execute_rules(struct udev_event *event,
73 usec_t timeout_usec,
74 Hashmap *properties_list,
75 struct udev_rules *rules);
76 void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec);
77
78 /* Cleanup functions */
79 DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_event*, udev_event_free);
80 DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_rules*, udev_rules_unref);