static void alias_device_cb(struct device_user *dep, enum device_event ev) { struct alias_device *alias; bool new_state = false; alias = container_of(dep, struct alias_device, dep); switch (ev) { case DEV_EVENT_ADD: new_state = true; case DEV_EVENT_REMOVE: device_set_present(&alias->dev, new_state); break; case DEV_EVENT_LINK_UP: new_state = true; case DEV_EVENT_LINK_DOWN: device_set_link(&alias->dev, new_state); break; case DEV_EVENT_UPDATE_IFINDEX: device_set_ifindex(&alias->dev, dep->dev->ifindex); break; default: device_broadcast_event(&alias->dev, ev); break; } }
static void alias_set_device(struct alias_device *alias, struct device *dev) { if (dev == alias->dep.dev) return; device_set_present(&alias->dev, false); device_remove_user(&alias->new_dep); if (alias->dev.active) { if (dev) device_add_user(&alias->new_dep, dev); alias->update = true; return; } alias->update = false; device_remove_user(&alias->dep); alias->dev.hidden = !dev; if (dev) { device_set_ifindex(&alias->dev, dev->ifindex); strcpy(alias->dev.ifname, dev->ifname); device_broadcast_event(&alias->dev, DEV_EVENT_UPDATE_IFNAME); device_add_user(&alias->dep, dev); } else { alias->dev.ifname[0] = 0; device_broadcast_event(&alias->dev, DEV_EVENT_UPDATE_IFNAME); } }
static int device_amend(sd_device *device, const char *key, const char *value) { int r; assert(device); assert(key); assert(value); if (streq(key, "DEVPATH")) { char *path; path = strjoina("/sys", value); /* the caller must verify or trust this data (e.g., if it comes from the kernel) */ r = device_set_syspath(device, path, false); if (r < 0) return log_debug_errno(r, "sd-device: could not set syspath to '%s': %m", path); } else if (streq(key, "SUBSYSTEM")) { r = device_set_subsystem(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set subsystem to '%s': %m", value); } else if (streq(key, "DEVTYPE")) { r = device_set_devtype(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devtype to '%s': %m", value); } else if (streq(key, "DEVNAME")) { r = device_set_devname(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devname to '%s': %m", value); } else if (streq(key, "USEC_INITIALIZED")) { r = device_set_usec_initialized(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set usec-initialized to '%s': %m", value); } else if (streq(key, "DRIVER")) { r = device_set_driver(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set driver to '%s': %m", value); } else if (streq(key, "IFINDEX")) { r = device_set_ifindex(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set ifindex to '%s': %m", value); } else if (streq(key, "DEVMODE")) { r = device_set_devmode(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devmode to '%s': %m", value); } else if (streq(key, "DEVUID")) { r = device_set_devuid(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devuid to '%s': %m", value); } else if (streq(key, "DEVGID")) { r = device_set_devgid(device, value); if (r < 0) return log_debug_errno(r, "sd-device: could not set devgid to '%s': %m", value); } else if (streq(key, "DEVLINKS")) { const char *word, *state; size_t l; FOREACH_WORD(word, l, value, state) { char devlink[l + 1]; strncpy(devlink, word, l); devlink[l] = '\0'; r = device_add_devlink(device, devlink); if (r < 0) return log_debug_errno(r, "sd-device: could not add devlink '%s': %m", devlink); } } else if (streq(key, "TAGS")) {