]>
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 */ |
f1128767 | 49 | struct udev_rules; |
1d791281 | 50 | int udev_rules_new(struct udev_rules **ret_rules, ResolveNameTiming resolve_name_timing); |
981fae90 | 51 | struct udev_rules *udev_rules_free(struct udev_rules *rules); |
1d791281 | 52 | |
6ada823a | 53 | bool udev_rules_check_timestamp(struct udev_rules *rules); |
d838e145 | 54 | int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, |
66f737b4 | 55 | usec_t timeout_usec, |
9b5150b6 | 56 | Hashmap *properties_list); |
84b6ad70 | 57 | int udev_rules_apply_static_dev_perms(struct udev_rules *rules); |
f1128767 | 58 | |
66f737b4 ZJS |
59 | static inline usec_t udev_warn_timeout(usec_t timeout_usec) { |
60 | return DIV_ROUND_UP(timeout_usec, 3); | |
61 | } | |
62 | ||
f1128767 | 63 | /* udev-event.c */ |
6b92f429 | 64 | struct udev_event *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl); |
c1118ceb | 65 | struct udev_event *udev_event_free(struct udev_event *event); |
4cade7a1 YW |
66 | ssize_t udev_event_apply_format(struct udev_event *event, |
67 | const char *src, char *dest, size_t size, | |
68 | bool replace_whitespace); | |
2181d30a | 69 | int udev_event_spawn(struct udev_event *event, |
dd5eddd2 | 70 | usec_t timeout_usec, |
53318514 | 71 | bool accept_failure, |
bbf35206 | 72 | const char *cmd, char *result, size_t ressize); |
eb1f9e30 | 73 | int udev_event_execute_rules(struct udev_event *event, |
66f737b4 | 74 | usec_t timeout_usec, |
eb1f9e30 YW |
75 | Hashmap *properties_list, |
76 | struct udev_rules *rules); | |
66f737b4 | 77 | void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec); |
c7521974 | 78 | |
152d0efa | 79 | /* Cleanup functions */ |
c1118ceb | 80 | DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_event*, udev_event_free); |
981fae90 | 81 | DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_rules*, udev_rules_free); |