This is similar to the control interface event MESH-GROUP-REMOVED Signed-off-by: Saurav Babu <saurav.babu@xxxxxxxxxxx> --- doc/dbus.doxygen | 9 +++++++++ wpa_supplicant/dbus/dbus_new.c | 38 ++++++++++++++++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new.h | 8 ++++++++ wpa_supplicant/notify.c | 11 +++++++++++ wpa_supplicant/notify.h | 2 ++ wpa_supplicant/wpa_supplicant.c | 10 ++++++++++ 6 files changed, 78 insertions(+) diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen index 42260f9..a894770 100644 --- a/doc/dbus.doxygen +++ b/doc/dbus.doxygen @@ -2269,6 +2269,15 @@ Interface for performing Mesh operations. <dd>A dictionary containing information of started Mesh Group.</dd> </dl> </li> + <li> + <h3>MeshGroupRemoved ( a{sv} : args )</h3> + <p></p> + <h4>Arguments</h4> + <dl> + <dt>a{sv} : args</dt> + <dd>A dictionary containing information of removed Mesh Group.</dd> + </dl> + </li> </ul> */ diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 3c30cbc..dc02dc4 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -824,6 +824,38 @@ void wpas_dbus_signal_mesh_group_started(struct wpa_supplicant *wpa_s, dbus_connection_send(iface->con, msg, NULL); dbus_message_unref(msg); } + +void wpas_dbus_signal_mesh_group_removed(struct wpa_supplicant *wpa_s, + u8 *meshid, u8 meshid_len, int reason) +{ + struct wpas_dbus_priv *iface; + DBusMessage *msg; + DBusMessageIter iter, dict_iter; + + iface = wpa_s->global->dbus; + + /* Do nothing if the control interface is not turned on */ + if (iface == NULL || !wpa_s->dbus_new_path) + return; + + msg = dbus_message_new_signal(wpa_s->dbus_new_path, + WPAS_DBUS_NEW_IFACE_MESH, + "MeshGroupRemoved"); + if (msg == NULL) + return; + + dbus_message_iter_init_append(msg, &iter); + if (!wpa_dbus_dict_open_write(&iter, &dict_iter) || + !wpa_dbus_dict_append_byte_array(&dict_iter, "SSID", + (const char *) meshid, + meshid_len) || + !wpa_dbus_dict_append_int32(&dict_iter, "DisconnectReason", reason) || + !wpa_dbus_dict_close_write(&iter, &dict_iter)) + wpa_printf(MSG_ERROR, "dbus: Failed to construct signal"); + else + dbus_connection_send(iface->con, msg, NULL); + dbus_message_unref(msg); +} #endif /* CONFIG_MESH */ void wpas_dbus_signal_certification(struct wpa_supplicant *wpa_s, @@ -3662,6 +3694,12 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = { END_ARGS } }, + { "MeshGroupRemoved", WPAS_DBUS_NEW_IFACE_MESH, + { + { "args", "a{sv}", ARG_OUT }, + END_ARGS + } + }, #endif /* CONFIG_MESH */ { NULL, NULL, { END_ARGS } } }; diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h index 4c33ac8..b9f487b 100644 --- a/wpa_supplicant/dbus/dbus_new.h +++ b/wpa_supplicant/dbus/dbus_new.h @@ -243,6 +243,8 @@ void wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant *wpa_s, int op_freq); void wpas_dbus_signal_mesh_group_started(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid); +void wpas_dbus_signal_mesh_group_removed(struct wpa_supplicant *wpa_s, + u8 *meshid, u8 meshid_len, int reason); #else /* CONFIG_CTRL_IFACE_DBUS_NEW */ @@ -564,6 +566,12 @@ void wpas_dbus_signal_mesh_group_started(struct wpa_supplicant *wpa_s, { } +static inline +void wpas_dbus_signal_mesh_group_removed(struct wpa_supplicant *wpa_s, + u8 *meshid, u8 meshid_len, int reason) +{ +} + #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ #endif /* CTRL_IFACE_DBUS_H_NEW */ diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c index 3be1242..afbde11 100644 --- a/wpa_supplicant/notify.c +++ b/wpa_supplicant/notify.c @@ -861,3 +861,14 @@ void wpas_notify_mesh_group_started(struct wpa_supplicant *wpa_s, wpas_dbus_signal_mesh_group_started(wpa_s, ssid); #endif /* CONFIG_MESH */ } + +void wpas_notify_mesh_group_removed(struct wpa_supplicant *wpa_s, + u8 *meshid, u8 meshid_len, int reason_code) +{ + if (wpa_s->p2p_mgmt) + return; + +#ifdef CONFIG_MESH + wpas_dbus_signal_mesh_group_removed(wpa_s, meshid, meshid_len, reason_code); +#endif /* CONFIG_MESH */ +} diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h index e620dd2..46270f9 100644 --- a/wpa_supplicant/notify.h +++ b/wpa_supplicant/notify.h @@ -143,5 +143,7 @@ void wpas_notify_p2p_invitation_received(struct wpa_supplicant *wpa_s, const u8 *bssid, int id, int op_freq); void wpas_notify_mesh_group_started(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid); +void wpas_notify_mesh_group_removed(struct wpa_supplicant *wpa_s, + u8 *meshid, u8 meshid_len, int reason_code); #endif /* NOTIFY_H */ diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index c41093a..28e6cb5 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -61,6 +61,10 @@ #include "wpas_kay.h" #include "mesh.h" #include "dpp_supplicant.h" +#ifdef CONFIG_MESH +#include "ap/ap_config.h" +#include "ap/hostapd.h" +#endif const char *const wpa_supplicant_version = "wpa_supplicant v" VERSION_STR "\n" @@ -2954,6 +2958,9 @@ void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s, u8 *addr = NULL; union wpa_event_data event; int zero_addr = 0; +#ifdef CONFIG_MESH + struct mesh_conf *mconf; +#endif wpa_dbg(wpa_s, MSG_DEBUG, "Request to deauthenticate - bssid=" MACSTR " pending_bssid=" MACSTR " reason=%d state=%s", @@ -2983,8 +2990,11 @@ void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s, #ifdef CONFIG_MESH if (wpa_s->ifmsh) { + mconf = wpa_s->ifmsh->mconf; wpa_msg(wpa_s, MSG_INFO, MESH_GROUP_REMOVED "%s", wpa_s->ifname); + wpas_notify_mesh_group_removed(wpa_s, mconf->meshid, mconf->meshid_len, + reason_code); wpa_supplicant_leave_mesh(wpa_s); } #endif /* CONFIG_MESH */ -- 1.9.1 _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap