struct sd_device {
unsigned n_ref;
+ /* syspath */
+ char *syspath;
+ const char *devpath;
+ const char *sysnum;
+ char *sysname;
+
+ /* only set when device is passed through netlink */
+ sd_device_action_t action;
+ uint64_t seqnum;
+
+ /* basic kernel properties */
+ char *subsystem;
+ char *driver_subsystem; /* only set for the 'drivers' subsystem */
+ char *driver;
+ char *devtype;
+
+ /* device node properties */
+ char *devname;
+ dev_t devnum;
+ mode_t devmode;
+ uid_t devuid;
+ gid_t devgid;
+
+ /* block device properties */
+ uint64_t diskseq; /* Block device sequence number, monothonically incremented by the kernel on create/attach */
+
+ /* network interface properties */
+ int ifindex;
+
+ /* determined by devnnum, ifindex, subsystem, and sysname */
+ char *device_id;
+
+ /* sysfs attributes */
+ Hashmap *sysattr_values; /* cached sysattr values */
+ Set *sysattrs; /* names of sysattrs */
+ Iterator sysattrs_iterator;
+
/* The database version indicates the supported features by the udev database.
* This is saved and parsed in V field.
*
*/
unsigned database_version;
- sd_device *parent;
+ /* when device is initialized by udevd */
+ usec_t usec_initialized;
- OrderedHashmap *properties;
+ /* properties */
+ OrderedHashmap *properties; /* all properties set from uevent and by udevd */
Iterator properties_iterator;
uint64_t properties_generation; /* changes whenever the properties are changed */
uint64_t properties_iterator_generation; /* generation when iteration was started */
+ OrderedHashmap *properties_db; /* the subset of the properties that should be written to the db */
+ char **properties_strv; /* the properties hashmap as a strv */
+ char *properties_nulstr; /* the same as a nulstr */
+ size_t properties_nulstr_len;
- /* the subset of the properties that should be written to the db */
- OrderedHashmap *properties_db;
-
- Hashmap *sysattr_values; /* cached sysattr values */
-
- Set *sysattrs; /* names of sysattrs */
- Iterator sysattrs_iterator;
-
+ /* TAG keyword */
Set *all_tags, *current_tags;
Iterator all_tags_iterator, current_tags_iterator;
uint64_t all_tags_iterator_generation, current_tags_iterator_generation; /* generation when iteration was started */
uint64_t tags_generation; /* changes whenever the tags are changed */
+ /* SYMLINK keyword */
Set *devlinks;
Iterator devlinks_iterator;
uint64_t devlinks_generation; /* changes whenever the devlinks are changed */
uint64_t devlinks_iterator_generation; /* generation when iteration was started */
int devlink_priority;
+ /* parent and child devices */
+ sd_device *parent;
Hashmap *children;
Iterator children_iterator;
bool children_enumerated;
- int ifindex;
- char *devtype;
- char *devname;
- dev_t devnum;
-
- char **properties_strv; /* the properties hashmap as a strv */
- char *properties_nulstr; /* the same as a nulstr */
- size_t properties_nulstr_len;
-
- char *syspath;
- const char *devpath;
- const char *sysnum;
- char *sysname;
-
- char *subsystem;
- char *driver_subsystem; /* only set for the 'drivers' subsystem */
- char *driver;
-
- char *device_id;
-
- usec_t usec_initialized;
-
- mode_t devmode;
- uid_t devuid;
- gid_t devgid;
-
- uint64_t diskseq; /* Block device sequence number, monothonically incremented by the kernel on create/attach */
-
- /* only set when device is passed through netlink */
- sd_device_action_t action;
- uint64_t seqnum;
-
bool parent_set:1; /* no need to try to reload parent */
bool sysattrs_read:1; /* don't try to re-read sysattrs once read */
bool property_tags_outdated:1; /* need to update TAGS= or CURRENT_TAGS= property */
bool driver_set:1; /* don't reread driver */
bool uevent_loaded:1; /* don't reread uevent */
bool db_loaded; /* don't reread db */
-
bool is_initialized:1;
bool sealed:1; /* don't read more information from uevent/db */
bool db_persist:1; /* don't clean up the db when switching from initrd to real root */