]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/udev/udev.h
udev: run programs in the specified order
[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 typedef struct UdevEvent {
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 OrderedHashmap *seclabel_list;
29 OrderedHashmap *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 } UdevEvent;
47
48 /* udev-rules.c */
49 typedef struct UdevRules UdevRules;
50
51 int udev_rules_new(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
52 UdevRules *udev_rules_free(UdevRules *rules);
53
54 bool udev_rules_check_timestamp(UdevRules *rules);
55 int udev_rules_apply_to_event(UdevRules *rules, UdevEvent *event,
56 usec_t timeout_usec,
57 Hashmap *properties_list);
58 int udev_rules_apply_static_dev_perms(UdevRules *rules);
59
60 static inline usec_t udev_warn_timeout(usec_t timeout_usec) {
61 return DIV_ROUND_UP(timeout_usec, 3);
62 }
63
64 /* udev-event.c */
65 UdevEvent *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl);
66 UdevEvent *udev_event_free(UdevEvent *event);
67 ssize_t udev_event_apply_format(UdevEvent *event,
68 const char *src, char *dest, size_t size,
69 bool replace_whitespace);
70 int udev_event_spawn(UdevEvent *event,
71 usec_t timeout_usec,
72 bool accept_failure,
73 const char *cmd, char *result, size_t ressize);
74 int udev_event_execute_rules(UdevEvent *event,
75 usec_t timeout_usec,
76 Hashmap *properties_list,
77 UdevRules *rules);
78 void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec);
79
80 /* Cleanup functions */
81 DEFINE_TRIVIAL_CLEANUP_FUNC(UdevEvent*, udev_event_free);
82 DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRules*, udev_rules_free);