[PATCH 5/5] dbus: Added dbus signal MeshPeerDisconnected

Dan Williams dcbw at redhat.com
Fri Jun 2 18:45:05 PDT 2017


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 at samsung.com>
> ---
>  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 */



More information about the Hostap mailing list