From c439b52400978dd3799c66e1f632ee68d2c7c9eb Mon Sep 17 00:00:00 2001 From: Hans Dedecker Date: Tue, 19 Nov 2013 12:17:08 +0100 Subject: netifd: Link layer state support on device level Patch implements link layer state awareness (aka carrier detection) in netifd on device level. Signed-off-by: Hans Dedecker --- alias.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'alias.c') diff --git a/alias.c b/alias.c index 4e0a6be..cef125f 100644 --- a/alias.c +++ b/alias.c @@ -51,7 +51,7 @@ static void alias_set_device(struct alias_device *alias, struct device *dev) device_remove_user(&alias->dep); alias->dev.hidden = !dev; if (dev) { - alias->dev.ifindex = dev->ifindex; + 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); @@ -83,14 +83,22 @@ alias_device_set_state(struct device *dev, bool state) static void alias_device_cb(struct device_user *dep, enum device_event ev) { struct alias_device *alias; - bool present = false; + bool new_state = false; alias = container_of(dep, struct alias_device, dep); switch (ev) { case DEV_EVENT_ADD: - present = true; + new_state = true; case DEV_EVENT_REMOVE: - device_set_present(&alias->dev, present); + 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); -- cgit v1.2.1