]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
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 | 13 | DEVICE_NOT_FOUND = 0, |
4cf997be LP |
14 | DEVICE_FOUND_UDEV = 1 << 0, /* The device has shown up in the udev database */ |
15 | DEVICE_FOUND_MOUNT = 1 << 1, /* The device has shown up in /proc/self/mountinfo */ | |
16 | DEVICE_FOUND_SWAP = 1 << 2, /* The device has shown up in /proc/swaps */ | |
66f3fdbb | 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 | |
1ea74fca | 23 | char *sysfs, *deserialized_sysfs; |
367a2597 | 24 | char *path; /* syspath, device node, alias, or devlink */ |
8fe914ec | 25 | |
66f3fdbb LP |
26 | /* In order to be able to distinguish dependencies on different device nodes we might end up creating multiple |
27 | * devices for the same sysfs path. We chain them up here. */ | |
8fe914ec | 28 | LIST_FIELDS(struct Device, same_sysfs); |
7fab9d01 | 29 | |
f6200941 | 30 | DeviceState state, deserialized_state; |
66f3fdbb | 31 | DeviceFound found, deserialized_found, enumerated_found; |
ebc8968b FB |
32 | |
33 | bool bind_mounts; | |
88116909 LP |
34 | |
35 | /* The SYSTEMD_WANTS udev property for this device the last time we saw it */ | |
36 | char **wants_property; | |
5cb5a6ff LP |
37 | }; |
38 | ||
87f0e418 | 39 | extern const UnitVTable device_vtable; |
5cb5a6ff | 40 | |
485ae697 | 41 | void device_found_node(Manager *m, const char *node, DeviceFound found, DeviceFound mask); |
ebc8968b | 42 | bool device_shall_be_bound_by(Unit *device, Unit *u); |
57b7a260 FS |
43 | |
44 | DEFINE_CAST(DEVICE, Device); |