]>
Commit | Line | Data |
---|---|---|
e7145211 | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
0ef6f454 LP |
2 | #pragma once |
3 | ||
f0083e3d | 4 | /* |
810adae9 | 5 | * Copyright © 2003 Greg Kroah-Hartman <greg@kroah.com> |
f0083e3d GKH |
6 | */ |
7 | ||
70068602 | 8 | #include "sd-device.h" |
07630cea LP |
9 | #include "sd-netlink.h" |
10 | ||
d838e145 | 11 | #include "hashmap.h" |
07630cea | 12 | #include "macro.h" |
bc768f04 | 13 | #include "udev-util.h" |
02edd80d YW |
14 | #include "util.h" |
15 | ||
16 | #define READ_END 0 | |
17 | #define WRITE_END 1 | |
f0083e3d | 18 | |
aa8734ff | 19 | struct udev_event { |
cf28ad46 | 20 | sd_device *dev; |
f3d241fe | 21 | sd_device *dev_parent; |
480ecb7d | 22 | sd_device *dev_db_clone; |
912541b0 KS |
23 | char *name; |
24 | char *program_result; | |
25 | mode_t mode; | |
26 | uid_t uid; | |
27 | gid_t gid; | |
d838e145 | 28 | Hashmap *seclabel_list; |
29448498 | 29 | Hashmap *run_list; |
6b92f429 | 30 | usec_t exec_delay_usec; |
40fe8b11 | 31 | usec_t birth_usec; |
1c4baffc | 32 | sd_netlink *rtnl; |
14cb109d YW |
33 | unsigned builtin_run; |
34 | unsigned builtin_ret; | |
912541b0 KS |
35 | bool inotify_watch; |
36 | bool inotify_watch_final; | |
1edefa4f | 37 | bool group_set; |
912541b0 | 38 | bool group_final; |
1edefa4f | 39 | bool owner_set; |
912541b0 KS |
40 | bool owner_final; |
41 | bool mode_set; | |
42 | bool mode_final; | |
43 | bool name_final; | |
44 | bool devlink_final; | |
45 | bool run_final; | |
aa8734ff | 46 | }; |
aa8734ff | 47 | |
c7521974 | 48 | /* udev-rules.c */ |
9a07157d | 49 | typedef struct UdevRules UdevRules; |
1d791281 | 50 | |
9a07157d ZJS |
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, struct udev_event *event, | |
66f737b4 | 56 | usec_t timeout_usec, |
9b5150b6 | 57 | Hashmap *properties_list); |
9a07157d | 58 | int udev_rules_apply_static_dev_perms(UdevRules *rules); |
f1128767 | 59 | |
66f737b4 ZJS |
60 | static inline usec_t udev_warn_timeout(usec_t timeout_usec) { |
61 | return DIV_ROUND_UP(timeout_usec, 3); | |
62 | } | |
63 | ||
f1128767 | 64 | /* udev-event.c */ |
6b92f429 | 65 | struct udev_event *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl); |
c1118ceb | 66 | struct udev_event *udev_event_free(struct udev_event *event); |
4cade7a1 YW |
67 | ssize_t udev_event_apply_format(struct udev_event *event, |
68 | const char *src, char *dest, size_t size, | |
69 | bool replace_whitespace); | |
2181d30a | 70 | int udev_event_spawn(struct udev_event *event, |
dd5eddd2 | 71 | usec_t timeout_usec, |
53318514 | 72 | bool accept_failure, |
bbf35206 | 73 | const char *cmd, char *result, size_t ressize); |
eb1f9e30 | 74 | int udev_event_execute_rules(struct udev_event *event, |
66f737b4 | 75 | usec_t timeout_usec, |
eb1f9e30 | 76 | Hashmap *properties_list, |
9a07157d | 77 | UdevRules *rules); |
66f737b4 | 78 | void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec); |
c7521974 | 79 | |
152d0efa | 80 | /* Cleanup functions */ |
c1118ceb | 81 | DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_event*, udev_event_free); |
9a07157d | 82 | DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRules*, udev_rules_free); |