From: Felix Fietkau Date: Sun, 27 Mar 2011 16:40:01 +0000 (+0200) Subject: add a function for adding a virtual device (not tracked in the avl tree) X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=commitdiff_plain;h=5483940df7a35d052d195a2fa1db29763f795ad0;hp=0b7be79bc1fe58c0c19c0c21b1200b098186432f add a function for adding a virtual device (not tracked in the avl tree) --- 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) diff --git a/device.h b/device.h index 9e7d309..bf93ebc 100644 --- a/device.h +++ b/device.h @@ -79,6 +79,7 @@ struct device_hotplug_ops { int (*del)(struct device *main, struct device *member); }; +void init_virtual_device(struct device *dev, const struct device_type *type, const char *name); int init_device(struct device *iface, const struct device_type *type, const char *ifname); void cleanup_device(struct device *iface); struct device *get_device(const char *name, bool create);