]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
c2f1db8f | 2 | #pragma once |
5cb5a6ff | 3 | |
57b7a260 FS |
4 | #include "unit.h" |
5 | ||
5cb5a6ff LP |
6 | typedef struct Device Device; |
7 | ||
66f3fdbb LP |
8 | /* A mask specifying where we have seen the device currently. This is a bitmask because the device might show up |
9 | * asynchronously from each other at various places. For example, in very common case a device might already be mounted | |
10 | * before udev finished probing it (think: a script setting up a loopback block device, formatting it and mounting it | |
11 | * in quick succession). Hence we need to track precisely where it is already visible and where not. */ | |
628c89cc | 12 | typedef enum DeviceFound { |
66f3fdbb LP |
13 | DEVICE_NOT_FOUND = 0, |
14 | DEVICE_FOUND_UDEV = 1U << 1, /* The device has shown up in the udev database */ | |
15 | DEVICE_FOUND_MOUNT = 1U << 2, /* The device has shown up in /proc/self/mountinfo */ | |
16 | DEVICE_FOUND_SWAP = 1U << 3, /* The device has shown up in /proc/swaps */ | |
17 | DEVICE_FOUND_MASK = DEVICE_FOUND_UDEV|DEVICE_FOUND_MOUNT|DEVICE_FOUND_SWAP, | |
628c89cc LP |
18 | } DeviceFound; |
19 | ||
5cb5a6ff | 20 | struct Device { |
ac155bb8 | 21 | Unit meta; |
5cb5a6ff | 22 | |
25ac040b | 23 | char *sysfs; |
8fe914ec | 24 | |
66f3fdbb LP |
25 | /* In order to be able to distinguish dependencies on different device nodes we might end up creating multiple |
26 | * devices for the same sysfs path. We chain them up here. */ | |
8fe914ec | 27 | LIST_FIELDS(struct Device, same_sysfs); |
7fab9d01 | 28 | |
f6200941 | 29 | DeviceState state, deserialized_state; |
66f3fdbb | 30 | DeviceFound found, deserialized_found, enumerated_found; |
ebc8968b FB |
31 | |
32 | bool bind_mounts; | |
88116909 LP |
33 | |
34 | /* The SYSTEMD_WANTS udev property for this device the last time we saw it */ | |
35 | char **wants_property; | |
5cb5a6ff LP |
36 | }; |
37 | ||
87f0e418 | 38 | extern const UnitVTable device_vtable; |
5cb5a6ff | 39 | |
485ae697 | 40 | void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFound mask); |
ebc8968b | 41 | bool device_shall_be_bound_by(Unit *device, Unit *u); |
57b7a260 FS |
42 | |
43 | DEFINE_CAST(DEVICE, Device); |