From: Hans Dedecker Date: Thu, 31 Mar 2016 10:18:27 +0000 (+0200) Subject: alias : Fix interface aliased on top of a static interface not getting active X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=commitdiff_plain;h=6fd6be6b7f3fc4883fdc464fcbcb2b5e8d8e8174 alias : Fix interface aliased on top of a static interface not getting active An interfaces referring to a static interface is not getting active when doing a network reload or ifup. The problem is triggered by alias_set_device which is not clearing the pending update (mostly a null device due to the previous down event) when the same device is set as the current device via alias_notify_device. As a result alias_set_device_state when called will overwrite the device with an invalid pending device meaning the interface will not be set available anymore and thus will stay down. Signed-off-by: Hans Dedecker --- diff --git a/alias.c b/alias.c index 1f23da0..e4bb700 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);