On Fri, 2017-05-19 at 16:54 +0530, Saurav Babu wrote: > This is similar to the control interface event MESH-PEER-DISCONNECTED > > > Signed-off-by: Saurav Babu <saurav.babu@xxxxxxxxxxx> > --- > doc/dbus.doxygen | 9 +++++++++ > wpa_supplicant/dbus/dbus_new.c | 39 +++++++++++++++++++++++++++++++++++++++ > wpa_supplicant/dbus/dbus_new.h | 8 ++++++++ > wpa_supplicant/mesh_mpm.c | 3 +++ > wpa_supplicant/notify.c | 11 +++++++++++ > wpa_supplicant/notify.h | 2 ++ > 6 files changed, 72 insertions(+) > > diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen > index 6f2eeaf..f9244a5 100644 > --- a/doc/dbus.doxygen > +++ b/doc/dbus.doxygen > @@ -2287,6 +2287,15 @@ Interface for performing Mesh operations. > <dd>A dictionary containing information of connected Mesh Peer.</dd> > </dl> > </li> > + <li> > + <h3>MeshPeerDisconnected ( a{sv} : args )</h3> > + <p></p> > + <h4>Arguments</h4> > + <dl> > + <dt>a{sv} : args</dt> > + <dd>A dictionary containing information of disconnected Mesh Peer.</dd> > + </dl> > + </li> > </ul> > > */ > diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c > index c91d945..7b8af9d 100644 > --- a/wpa_supplicant/dbus/dbus_new.c > +++ b/wpa_supplicant/dbus/dbus_new.c > @@ -887,6 +887,39 @@ void wpas_dbus_signal_mesh_peer_connected(struct wpa_supplicant *wpa_s, > > dbus_connection_send(iface->con, msg, NULL); > > dbus_message_unref(msg); > } > + > +void wpas_dbus_signal_mesh_peer_disconnected(struct wpa_supplicant *wpa_s, > > + const u8 *peer_addr, 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, > > + "MeshPeerDisconnected"); > > + if (msg == NULL) > > + return; > + > > + dbus_message_iter_init_append(msg, &iter); > + dbus_message_iter_init_append(msg, &iter); One of these is not needed. Dan > + if (!wpa_dbus_dict_open_write(&iter, &dict_iter) || > > + !wpa_dbus_dict_append_byte_array(&dict_iter, "PeerAddress", > > + (const char *) peer_addr, > > + ETH_ALEN) || > > + !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, > @@ -3737,6 +3770,12 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = { > > END_ARGS > > } > > }, > > + { "MeshPeerDisconnected", 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 39705fd..cf5cd90 100644 > --- a/wpa_supplicant/dbus/dbus_new.h > +++ b/wpa_supplicant/dbus/dbus_new.h > @@ -247,6 +247,8 @@ void wpas_dbus_signal_mesh_group_removed(struct wpa_supplicant *wpa_s, > > struct wpa_ssid *ssid, int reason); > void wpas_dbus_signal_mesh_peer_connected(struct wpa_supplicant *wpa_s, > > const u8 *peer_addr); > +void wpas_dbus_signal_mesh_peer_disconnected(struct wpa_supplicant *wpa_s, > > + const u8 *peer_addr, int reason); > > #else /* CONFIG_CTRL_IFACE_DBUS_NEW */ > > @@ -580,6 +582,12 @@ void wpas_dbus_signal_mesh_peer_connected(struct wpa_supplicant *wpa_s, > { > } > > +static inline > +void wpas_dbus_signal_mesh_peer_disconnected(struct wpa_supplicant *wpa_s, > > + const u8 *peer_addr, int reason) > +{ > +} > + > #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */ > > #endif /* CTRL_IFACE_DBUS_H_NEW */ > diff --git a/wpa_supplicant/mesh_mpm.c b/wpa_supplicant/mesh_mpm.c > index 6106b07..cf7107e 100644 > --- a/wpa_supplicant/mesh_mpm.c > +++ b/wpa_supplicant/mesh_mpm.c > @@ -1013,6 +1013,9 @@ static void mesh_mpm_fsm(struct wpa_supplicant *wpa_s, struct sta_info *sta, > > wpa_msg(wpa_s, MSG_INFO, MESH_PEER_DISCONNECTED MACSTR, > > MAC2STR(sta->addr)); > > > + /* Send DBUS event */ > > + wpas_notify_mesh_peer_disconnected(wpa_s, sta->addr, reason); > + > > hapd->num_plinks--; > > > mesh_mpm_send_plink_action(wpa_s, sta, > diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c > index 7772c27..683a036 100644 > --- a/wpa_supplicant/notify.c > +++ b/wpa_supplicant/notify.c > @@ -883,3 +883,14 @@ void wpas_notify_mesh_peer_connected(struct wpa_supplicant *wpa_s, > > wpas_dbus_signal_mesh_peer_connected(wpa_s, peer_addr); > #endif /* CONFIG_MESH */ > } > + > +void wpas_notify_mesh_peer_disconnected(struct wpa_supplicant *wpa_s, > > + const u8 *peer_addr, int reason_code) > +{ > > + if (wpa_s->p2p_mgmt) > > + return; > + > +#ifdef CONFIG_MESH > > + wpas_dbus_signal_mesh_peer_disconnected(wpa_s, peer_addr, reason_code); > +#endif /* CONFIG_MESH */ > +} > diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h > index 3d2d8b4..81fa24a 100644 > --- a/wpa_supplicant/notify.h > +++ b/wpa_supplicant/notify.h > @@ -147,5 +147,7 @@ void wpas_notify_mesh_group_removed(struct wpa_supplicant *wpa_s, > > struct wpa_ssid *ssid, int reason_code); > void wpas_notify_mesh_peer_connected(struct wpa_supplicant *wpa_s, > > const u8 *peer_addr); > +void wpas_notify_mesh_peer_disconnected(struct wpa_supplicant *wpa_s, > > + const u8 *peer_addr, int reason_code); > > #endif /* NOTIFY_H */ _______________________________________________ Hostap mailing list Hostap@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/hostap