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); } }
int system_if_check(struct device *dev) { dev->ifindex = 0; device_set_present(dev, true); device_set_link(dev, true); return 0; }