X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=device.c;h=f9cb05878cb38fd223af5fbe55829a3b20f0c93d;hp=e1ffba179e9996a8e56a3f6ed3df827c7fffcb1b;hb=5483940df7a35d052d195a2fa1db29763f795ad0;hpb=0b7be79bc1fe58c0c19c0c21b1200b098186432f diff --git a/device.c b/device.c index e1ffba1..f9cb058 100644 --- a/device.c +++ b/device.c @@ -85,29 +85,36 @@ int check_device_state(struct device *dev) return dev->type->check_state(dev); } -int init_device(struct device *dev, const struct device_type *type, const char *ifname) +void init_virtual_device(struct device *dev, const struct device_type *type, const char *name) { - int ret; - assert(dev); assert(type); - if (ifname) - strncpy(dev->ifname, ifname, IFNAMSIZ); + fprintf(stderr, "Initialize interface '%s'\n", dev->ifname); + INIT_LIST_HEAD(&dev->users); + dev->type = type; + + if (name) + strncpy(dev->ifname, name, IFNAMSIZ); +} + +int init_device(struct device *dev, const struct device_type *type, const char *ifname) +{ + int ret; + + init_virtual_device(dev, type, ifname); if (!dev->set_state) dev->set_state = set_device_state; - fprintf(stderr, "Initialize interface '%s'\n", dev->ifname); - INIT_LIST_HEAD(&dev->users); dev->avl.key = dev->ifname; - dev->type = type; ret = avl_insert(&devices, &dev->avl); if (ret < 0) return ret; check_device_state(dev); + return 0; } @@ -149,7 +156,8 @@ void cleanup_device(struct device *dev) dep->cb(dep, DEV_EVENT_REMOVE); } - avl_delete(&devices, &dev->avl); + if (dev->avl.key) + avl_delete(&devices, &dev->avl); } void set_device_present(struct device *dev, bool state)