X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=alias.c;h=56420c7be27bb33a2bb4a36c7bfe8d12f06d9cc5;hb=00fc987a147841a2e9bfd15399056886b6c77064;hp=1f23da08ac5e66eab4f2b6569013f7fc0d098673;hpb=fa624787a83347039ff690ec0a8e209fd1642c2e;p=project%2Fnetifd.git diff --git a/alias.c b/alias.c index 1f23da0..56420c7 100644 --- a/alias.c +++ b/alias.c @@ -34,8 +34,15 @@ static const struct device_type alias_device_type; static void alias_set_device(struct alias_device *alias, struct device *dev) { - if (dev == alias->dep.dev) + if (dev == alias->dep.dev) { + if (alias->update) { + device_remove_user(&alias->new_dep); + alias->update = false; + if (dev) + device_set_present(&alias->dev, true); + } return; + } device_set_present(&alias->dev, false); device_remove_user(&alias->new_dep); @@ -52,12 +59,11 @@ static void alias_set_device(struct alias_device *alias, struct device *dev) 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_set_ifname(&alias->dev, dev->ifname); device_add_user(&alias->dep, dev); } else { - alias->dev.ifname[0] = 0; - device_broadcast_event(&alias->dev, DEV_EVENT_UPDATE_IFNAME); + device_set_ifname(&alias->dev, ""); + device_set_link(&alias->dev, false); } }