]>
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 | ||
c076a2bd | 8 | #include <sys/param.h> |
27d13af7 | 9 | #include <sys/sysmacros.h> |
07630cea | 10 | #include <sys/types.h> |
1aa1e248 | 11 | |
70068602 | 12 | #include "sd-device.h" |
07630cea LP |
13 | #include "sd-netlink.h" |
14 | ||
d838e145 | 15 | #include "hashmap.h" |
e9a5ef7c | 16 | #include "label.h" |
07630cea LP |
17 | #include "libudev-private.h" |
18 | #include "macro.h" | |
775f8b3c | 19 | #include "strv.h" |
07630cea | 20 | #include "util.h" |
bc768f04 | 21 | #include "udev-util.h" |
f0083e3d | 22 | |
aa8734ff | 23 | struct udev_event { |
cf28ad46 | 24 | sd_device *dev; |
f3d241fe | 25 | sd_device *dev_parent; |
480ecb7d | 26 | sd_device *dev_db_clone; |
912541b0 KS |
27 | char *name; |
28 | char *program_result; | |
29 | mode_t mode; | |
30 | uid_t uid; | |
31 | gid_t gid; | |
d838e145 | 32 | Hashmap *seclabel_list; |
29448498 | 33 | Hashmap *run_list; |
6b92f429 | 34 | usec_t exec_delay_usec; |
40fe8b11 | 35 | usec_t birth_usec; |
1c4baffc | 36 | sd_netlink *rtnl; |
14cb109d YW |
37 | unsigned builtin_run; |
38 | unsigned builtin_ret; | |
912541b0 KS |
39 | bool inotify_watch; |
40 | bool inotify_watch_final; | |
1edefa4f | 41 | bool group_set; |
912541b0 | 42 | bool group_final; |
1edefa4f | 43 | bool owner_set; |
912541b0 KS |
44 | bool owner_final; |
45 | bool mode_set; | |
46 | bool mode_final; | |
47 | bool name_final; | |
48 | bool devlink_final; | |
49 | bool run_final; | |
aa8734ff | 50 | }; |
aa8734ff | 51 | |
c7521974 | 52 | /* udev-rules.c */ |
f1128767 | 53 | struct udev_rules; |
c4d44cba | 54 | struct udev_rules *udev_rules_new(ResolveNameTiming resolve_name_timing); |
7c85d636 | 55 | struct udev_rules *udev_rules_unref(struct udev_rules *rules); |
6ada823a | 56 | bool udev_rules_check_timestamp(struct udev_rules *rules); |
d838e145 | 57 | int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event, |
66f737b4 | 58 | usec_t timeout_usec, |
9b5150b6 | 59 | Hashmap *properties_list); |
84b6ad70 | 60 | int udev_rules_apply_static_dev_perms(struct udev_rules *rules); |
f1128767 | 61 | |
66f737b4 ZJS |
62 | static inline usec_t udev_warn_timeout(usec_t timeout_usec) { |
63 | return DIV_ROUND_UP(timeout_usec, 3); | |
64 | } | |
65 | ||
f1128767 | 66 | /* udev-event.c */ |
6b92f429 | 67 | struct udev_event *udev_event_new(sd_device *dev, usec_t exec_delay_usec, sd_netlink *rtnl); |
c1118ceb | 68 | struct udev_event *udev_event_free(struct udev_event *event); |
4cade7a1 YW |
69 | ssize_t udev_event_apply_format(struct udev_event *event, |
70 | const char *src, char *dest, size_t size, | |
71 | bool replace_whitespace); | |
2181d30a | 72 | int udev_event_spawn(struct udev_event *event, |
dd5eddd2 | 73 | usec_t timeout_usec, |
53318514 | 74 | bool accept_failure, |
bbf35206 | 75 | const char *cmd, char *result, size_t ressize); |
eb1f9e30 | 76 | int udev_event_execute_rules(struct udev_event *event, |
66f737b4 | 77 | usec_t timeout_usec, |
eb1f9e30 YW |
78 | Hashmap *properties_list, |
79 | struct udev_rules *rules); | |
66f737b4 | 80 | void udev_event_execute_run(struct udev_event *event, usec_t timeout_usec); |
c7521974 | 81 | |
152d0efa | 82 | /* Cleanup functions */ |
c1118ceb | 83 | DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_event*, udev_event_free); |
152d0efa | 84 | DEFINE_TRIVIAL_CLEANUP_FUNC(struct udev_rules*, udev_rules_unref); |