]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/device.h
9bcbece4296afce0782e94fa11829bc8827562ec
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
4 #include "core-forward.h"
7 /* A mask specifying where we have seen the device currently. This is a bitmask because the device might show up
8 * asynchronously from each other at various places. For example, in very common case a device might already be mounted
9 * before udev finished probing it (think: a script setting up a loopback block device, formatting it and mounting it
10 * in quick succession). Hence we need to track precisely where it is already visible and where not. */
11 typedef enum DeviceFound
{
13 DEVICE_FOUND_UDEV
= 1 << 0, /* The device has shown up in the udev database */
14 DEVICE_FOUND_MOUNT
= 1 << 1, /* The device has shown up in /proc/self/mountinfo */
15 DEVICE_FOUND_SWAP
= 1 << 2, /* The device has shown up in /proc/swaps */
16 _DEVICE_FOUND_MASK
= DEVICE_FOUND_UDEV
|DEVICE_FOUND_MOUNT
|DEVICE_FOUND_SWAP
,
19 typedef struct Device
{
22 char *sysfs
, *deserialized_sysfs
;
23 char *path
; /* syspath, device node, alias, or devlink */
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
;
31 bool processed
; /* Whether udevd has done processing the device, i.e. the device has database and
32 * ID_PROCESSING=1 udev property is not set. This is used only by enumeration and
33 * subsequent catchup process. */
36 /* The SYSTEMD_WANTS udev property for this device the last time we saw it */
37 char **wants_property
;
40 extern const UnitVTable device_vtable
;
42 void device_found_node(Manager
*m
, const char *node
, DeviceFound found
, DeviceFound mask
);
43 bool device_shall_be_bound_by(Unit
*device
, Unit
*u
);
45 DEFINE_CAST(DEVICE
, Device
);