]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/device.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
6 typedef struct Device Device
;
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. */
12 typedef enum DeviceFound
{
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 */
17 DEVICE_FOUND_MASK
= DEVICE_FOUND_UDEV
|DEVICE_FOUND_MOUNT
|DEVICE_FOUND_SWAP
,
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. */
27 LIST_FIELDS(struct Device
, same_sysfs
);
29 DeviceState state
, deserialized_state
;
30 DeviceFound found
, deserialized_found
, enumerated_found
;
34 /* The SYSTEMD_WANTS udev property for this device the last time we saw it */
35 char **wants_property
;
38 extern const UnitVTable device_vtable
;
40 void device_found_node(Manager
*m
, const char *node
, DeviceFound found
, DeviceFound mask
);
41 bool device_shall_be_bound_by(Unit
*device
, Unit
*u
);
43 DEFINE_CAST(DEVICE
, Device
);