diff options
author | Hans Dedecker <dedeckeh@gmail.com> | 2013-11-19 12:17:08 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2013-12-08 18:43:51 +0100 |
commit | c439b52400978dd3799c66e1f632ee68d2c7c9eb (patch) | |
tree | 5c30c2fd6f977bcbdd4c7e730875bc68af8dc2eb /alias.c | |
parent | 134775b1f41fa19a816768268b9d0f8dad86bd90 (diff) |
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 <dedeckeh@gmail.com>
Diffstat (limited to 'alias.c')
-rw-r--r-- | alias.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -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); |