diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index f94d818c1..56a34c0f4 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -1062,6 +1062,8 @@ static struct ctrl_iface_dbus_new_priv * wpas_dbus_ctrl_iface_init( wpas_dbus_global_properties, wpas_dbus_global_signals); + wpa_printf(MSG_DEBUG, "dbus: Register D-Bus object '%s'", + WPAS_DBUS_NEW_PATH); ctrl_iface = wpa_dbus_ctrl_iface_init(global, WPAS_DBUS_NEW_PATH, WPAS_DBUS_NEW_SERVICE, obj_desc); @@ -1084,6 +1086,8 @@ static struct ctrl_iface_dbus_new_priv * wpas_dbus_ctrl_iface_init( static void wpas_dbus_ctrl_iface_deinit(struct ctrl_iface_dbus_new_priv *iface) { if (iface) { + wpa_printf(MSG_DEBUG, "dbus: Unregister D-Bus object '%s'", + WPAS_DBUS_NEW_PATH); dbus_connection_unregister_object_path(iface->con, WPAS_DBUS_NEW_PATH); wpa_dbus_ctrl_iface_deinit(iface); @@ -1135,6 +1139,8 @@ static int wpas_dbus_register_network(struct wpa_supplicant *wpa_s, "%s/" WPAS_DBUS_NEW_NETWORKS_PART "/%u", wpas_dbus_get_path(wpa_s), ssid->id); + wpa_printf(MSG_DEBUG, "dbus: Register network object '%s'", + net_obj_path); obj_desc = os_zalloc(sizeof(struct wpa_dbus_object_desc)); if (!obj_desc) { wpa_printf(MSG_ERROR, "Not enough memory " @@ -1229,6 +1235,8 @@ static int wpas_dbus_unregister_network(struct wpa_supplicant *wpa_s, int nid) "%s/" WPAS_DBUS_NEW_NETWORKS_PART "/%u", wpas_dbus_get_path(wpa_s), nid); + wpa_printf(MSG_DEBUG, "dbus: Unregister network object '%s'", + net_obj_path); ret = wpa_dbus_unregister_object_per_iface(ctrl_iface, net_obj_path); if (!ret) @@ -1269,6 +1277,8 @@ static int wpas_dbus_unregister_bss(struct wpa_supplicant *wpa_s, "%s/" WPAS_DBUS_NEW_BSSIDS_PART "/%u", wpas_dbus_get_path(wpa_s), id); + wpa_printf(MSG_DEBUG, "dbus: Unregister BSS object '%s'", + bss_obj_path); if (wpa_dbus_unregister_object_per_iface(ctrl_iface, bss_obj_path)) { wpa_printf(MSG_ERROR, "Cannot unregister BSSID dbus object %s.", @@ -1340,6 +1350,8 @@ static int wpas_dbus_register_bss(struct wpa_supplicant *wpa_s, wpas_dbus_getter_bss_properties, NULL, arg, wpa_dbus_free, R); + wpa_printf(MSG_DEBUG, "dbus: Register BSS object '%s'", + bss_obj_path); if (wpa_dbus_register_object_per_iface(ctrl_iface, bss_obj_path, wpa_s->ifname, obj_desc)) { wpa_printf(MSG_ERROR, @@ -1619,6 +1631,7 @@ static int wpas_dbus_register_interface(struct wpa_supplicant *wpa_s) wpas_dbus_interface_properties, wpas_dbus_interface_signals); + wpa_printf(MSG_DEBUG, "dbus: Register interface object '%s'", path); if (wpa_dbus_register_object_per_iface(ctrl_iface, path, wpa_s->ifname, obj_desc)) goto err; @@ -1638,8 +1651,6 @@ err: static int wpas_dbus_unregister_interface(struct wpa_supplicant *wpa_s) { struct ctrl_iface_dbus_new_priv *ctrl_iface; - struct wpa_ssid *ssid; - struct wpa_bss *bss; /* Do nothing if the control interface is not turned on */ if (wpa_s == NULL || wpa_s->global == NULL) @@ -1648,16 +1659,8 @@ static int wpas_dbus_unregister_interface(struct wpa_supplicant *wpa_s) if (ctrl_iface == NULL) return 0; - /* unregister all BSSs and networks from dbus */ - dl_list_for_each(bss, &wpa_s->bss, struct wpa_bss, list) - wpas_dbus_unregister_bss(wpa_s, bss->bssid, bss->id); - - ssid = wpa_s->conf->ssid; - while (ssid) { - wpas_dbus_unregister_network(wpa_s, ssid->id); - ssid = ssid->next; - } - + wpa_printf(MSG_DEBUG, "dbus: Unregister interface object '%s'", + wpas_dbus_get_path(wpa_s)); if (wpa_dbus_unregister_object_per_iface(ctrl_iface, wpas_dbus_get_path(wpa_s))) return -1; diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 8a6f95ee8..3f05616ce 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -379,6 +379,9 @@ static void wpa_supplicant_cleanup(struct wpa_supplicant *wpa_s) wpa_s->ctrl_iface = NULL; } if (wpa_s->conf != NULL) { + struct wpa_ssid *ssid; + for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) + wpas_notify_network_removed(wpa_s, ssid); wpa_config_free(wpa_s->conf); wpa_s->conf = NULL; } @@ -2112,11 +2115,11 @@ static void wpa_supplicant_deinit_iface(struct wpa_supplicant *wpa_s, wpa_clear_keys(wpa_s, NULL); } + wpa_supplicant_cleanup(wpa_s); + if (notify) wpas_notify_iface_removed(wpa_s); - wpa_supplicant_cleanup(wpa_s); - if (wpa_s->drv_priv) wpa_drv_deinit(wpa_s); } @@ -2139,6 +2142,7 @@ struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global, { struct wpa_supplicant *wpa_s; struct wpa_interface t_iface; + struct wpa_ssid *ssid; if (global == NULL || iface == NULL) return NULL; @@ -2179,6 +2183,9 @@ struct wpa_supplicant * wpa_supplicant_add_iface(struct wpa_global *global, return NULL; } + for (ssid = wpa_s->conf->ssid; ssid; ssid = ssid->next) + wpas_notify_network_added(wpa_s, ssid); + wpa_s->next = global->ifaces; global->ifaces = wpa_s;