if (dev->type != &bridge_device_type)
return;
+ if (dev->hotplug_ops && dev->hotplug_ops->prepare)
+ dev->hotplug_ops->prepare(dev);
+
blobmsg_add_string(buf, "bridge", dev->ifname);
}
{
struct wireless_interface *vif;
+ uloop_timeout_cancel(&wdev->timeout);
wireless_complete_kill_request(wdev);
free(wdev->data);
wdev->data = NULL;
}
static void
+wireless_device_free(struct wireless_device *wdev)
+{
+ vlist_flush_all(&wdev->interfaces);
+ free(wdev->config);
+ free(wdev);
+}
+
+static void
+wdev_handle_config_change(struct wireless_device *wdev)
+{
+ enum interface_config_state state = wdev->config_state;
+
+ wdev->config_state = IFC_NORMAL;
+ switch(state) {
+ case IFC_NORMAL:
+ case IFC_RELOAD:
+ if (wdev->autostart)
+ __wireless_device_set_up(wdev);
+ break;
+ case IFC_REMOVE:
+ wireless_device_free(wdev);
+ break;
+ }
+}
+
+static void
wireless_device_mark_down(struct wireless_device *wdev)
{
struct wireless_interface *vif;
wireless_process_kill_all(wdev, SIGTERM, true);
+ wdev->cancel = false;
wdev->state = IFS_DOWN;
wireless_device_free_state(wdev);
-
- if (wdev->autostart)
- __wireless_device_set_up(wdev);
+ wdev_handle_config_change(wdev);
}
static void
static void
wireless_device_retry_setup(struct wireless_device *wdev)
{
+ if (wdev->state == IFS_TEARDOWN || wdev->state == IFS_DOWN || wdev->cancel)
+ return;
+
if (--wdev->retry < 0)
wdev->autostart = false;
}
static void
-wireless_device_free(struct wireless_device *wdev)
-{
- vlist_flush_all(&wdev->interfaces);
- free(wdev->config);
- free(wdev);
-}
-
-static void
-wdev_handle_config_change(struct wireless_device *wdev)
-{
- enum interface_config_state state = wdev->config_state;
-
- wdev->config_state = IFC_NORMAL;
- switch(state) {
- case IFC_NORMAL:
- break;
- case IFC_RELOAD:
- if (wdev->autostart)
- __wireless_device_set_up(wdev);
- break;
- case IFC_REMOVE:
- wireless_device_free(wdev);
- break;
- }
-}
-
-static void
wdev_set_config_state(struct wireless_device *wdev, enum interface_config_state s)
{
enum interface_config_state old_state = wdev->config_state;