X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fnetifd.git;a=blobdiff_plain;f=device.c;h=ce6f175181f7a45eee152c4b1b0a08bfd7546649;hp=42b78e3584580a81e5573e877641908b1ef1232c;hb=9ce15904743529fc38d1bb2fc78bf559db98fe3b;hpb=4f2a541e99b381c39b822ddaffb8f3941217463a diff --git a/device.c b/device.c index 42b78e3..ce6f175 100644 --- a/device.c +++ b/device.c @@ -222,6 +222,7 @@ struct device *device_get(const char *name, bool create) if (!create) return NULL; + D(DEVICE, "Create simple device '%s'\n", name); dev = calloc(1, sizeof(*dev)); device_init(dev, &simple_device_type, name); @@ -234,6 +235,7 @@ device_delete(struct device *dev) if (!dev->avl.key) return; + D(DEVICE, "Delete device '%s' from list\n", dev->ifname); avl_delete(&devices, &dev->avl); dev->avl.key = NULL; } @@ -342,8 +344,12 @@ device_reload_config(struct device *dev, struct blob_attr *attr) } static enum dev_change_type -device_check_config(struct device *dev, struct blob_attr *attr) +device_check_config(struct device *dev, const struct device_type *type, + struct blob_attr *attr) { + if (type != dev->type) + return DEV_CONFIG_RECREATE; + if (dev->type->reload) return dev->type->reload(dev, attr); @@ -383,7 +389,7 @@ device_create(const char *name, const struct device_type *type, odev = device_get(name, false); if (odev) { - change = device_check_config(odev, config); + change = device_check_config(odev, type, config); switch (change) { case DEV_CONFIG_APPLIED: D(DEVICE, "Device '%s': config applied\n", odev->ifname);