X-Git-Url: http://git.archive.openwrt.org/?a=blobdiff_plain;f=device.c;h=97fb27f1c8883e22b428c8b11d7dd8e8b7baf464;hb=94c8619d72e65b36aa2a6f5b8157bc479f252473;hp=80881d29edd4a47e1c90bfff4da363586538de14;hpb=51b3f21fef7f581a7df6d8a73d8b973f9eb355d2;p=project%2Fnetifd.git diff --git a/device.c b/device.c index 80881d2..97fb27f 100644 --- a/device.c +++ b/device.c @@ -318,8 +318,13 @@ device_get(const char *name, int create) return device_alias_get(name + 1); dev = avl_find_element(&devices, name, dev, avl); - if (dev) + if (dev) { + if (create > 1 && !dev->external) { + dev->external = true; + device_set_present(dev, true); + } return dev; + } if (!create) return NULL; @@ -384,6 +389,17 @@ void device_set_present(struct device *dev, bool state) device_refresh_present(dev); } +static int device_refcount(struct device *dev) +{ + struct list_head *list; + int count = 0; + + list_for_each(list, &dev->users) + count++; + + return count; +} + void device_add_user(struct device_user *dep, struct device *dev) { struct list_head *head; @@ -401,6 +417,7 @@ void device_add_user(struct device_user *dep, struct device *dev) else head = &dev->users; list_add_tail(&dep->list, head); + D(DEVICE, "Add user for device '%s', refcount=%d\n", dev->ifname, device_refcount(dev)); if (dep->cb && dev->present) { dep->cb(dep, DEV_EVENT_ADD); @@ -441,6 +458,7 @@ void device_remove_user(struct device_user *dep) list_del(&dep->list); dep->dev = NULL; + D(DEVICE, "Remove user for device '%s', refcount=%d\n", dev->ifname, device_refcount(dev)); __device_free_unused(dev); } @@ -566,6 +584,10 @@ device_create(const char *name, const struct device_type *type, if (odev) { odev->current_config = true; change = device_set_config(odev, type, config); + if (odev->external) { + system_if_apply_settings(odev, &odev->settings); + change = DEV_CONFIG_APPLIED; + } switch (change) { case DEV_CONFIG_RESTART: case DEV_CONFIG_APPLIED: @@ -640,7 +662,7 @@ device_dump_status(struct blob_buf *b, struct device *dev) if (st.flags & DEV_OPT_MTU) blobmsg_add_u32(b, "mtu", st.mtu); if (st.flags & DEV_OPT_MACADDR) - blobmsg_add_string(b, "macaddr", ether_ntoa((struct ether_addr *) st.macaddr)); + blobmsg_add_string(b, "macaddr", format_macaddr(st.macaddr)); if (st.flags & DEV_OPT_TXQUEUELEN) blobmsg_add_u32(b, "txqueuelen", st.txqueuelen); }